查看Const::Fast source,我注意到它在内部使用了内置函数Internals::SvREADONLY。在Perl脚本中直接使用该函数安全吗?它似乎出现在Perl 5.8的核心中。
my $PI = 4 * atan2 1, 1;
Internals::SvREADONLY($PI => 1);
$PI = 2.718; # Modification of a read-only value attempted at ..发布于 2010-11-05 03:32:44
C:\>perldoc Internals
No documentation found for "Internals".不是的。
更具体地说,这个包被命名为“内部”是有原因的。它不适合在核心之外使用。它可能会在没有通知的情况下发生变化。
发布于 2010-11-05 01:08:15
这还没有完全回答您的问题,但我认为值得一提的是,这样其他人就不会遇到和我一样的痛苦:如果您运行的是早于5.10.1的Perl版本,请不要使用任何readonly值。考虑这个小示例:
{
package Foo;
sub foo { print "I'm in foo!\n"; }
}
use strict;
use warnings;
use Readonly;
Readonly my @classes => qw(Foo);
foreach my $class (@classes)
{
# this dies with "Can't call method "foo" without a package or object reference"
$class->foo;
}因为我的XS-fu不是很高,所以我不能很连贯地解释这里发生了什么(但是Devel::Peek在$class变量中显示了一些有趣的东西)。
https://stackoverflow.com/questions/4098816
复制相似问题