首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该使用Internals::SvREADONLY在Perl中创建只读变量吗?

我应该使用Internals::SvREADONLY在Perl中创建只读变量吗?
EN

Stack Overflow用户
提问于 2010-11-05 00:24:06
回答 2查看 639关注 0票数 1

查看Const::Fast source,我注意到它在内部使用了内置函数Internals::SvREADONLY。在Perl脚本中直接使用该函数安全吗?它似乎出现在Perl 5.8的核心中。

代码语言:javascript
复制
my $PI = 4 * atan2 1, 1;
Internals::SvREADONLY($PI => 1);
$PI = 2.718;   # Modification of a read-only value attempted at ..
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-05 03:32:44

代码语言:javascript
复制
C:\>perldoc Internals
No documentation found for "Internals".

不是的。

更具体地说,这个包被命名为“内部”是有原因的。它不适合在核心之外使用。它可能会在没有通知的情况下发生变化。

票数 4
EN

Stack Overflow用户

发布于 2010-11-05 01:08:15

这还没有完全回答您的问题,但我认为值得一提的是,这样其他人就不会遇到和我一样的痛苦:如果您运行的是早于5.10.1的Perl版本,请不要使用任何readonly值。考虑这个小示例:

代码语言:javascript
复制
{
    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变量中显示了一些有趣的东西)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4098816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档