Perl是否不是词法范围的设计缺陷?
发布时间:2020-12-15 21:41:54 所属栏目:大数据 来源:网络整理
导读:{ sub a { print 1; }}a; 一个bug,是吗 a不应该从外面提供. 它在Perl 6 *中工作吗? 对不起,我还没有安装 解决方法 你问为什么这个sub在块之外可见?如果是这样,那么因为编译时间子关键字将sub放在主命名空间中(除非你使用package关键字来创建一个新的命名空
{ sub a { print 1; } } a; 一个bug,是吗 a不应该从外面提供. 它在Perl 6 *中工作吗? 对不起,我还没有安装 解决方法
你问为什么这个sub在块之外可见?如果是这样,那么因为编译时间子关键字将sub放在主命名空间中(除非你使用package关键字来创建一个新的命名空间).你可以试试一下
{ my $a = sub { print 1; }; $a->(); # works } $a->(); # fails 在这种情况下,子关键字不是创建一个sub并将其放在主命名空间中,而是创建一个匿名子例程并将其存储在词法范围的变量中.当变量超出范围时,它不再可用(通常). 阅读更多退房 此外,您是否知道您可以检查Perl解析器查看代码的方式?使用标记-MO = Deparse运行perl,如perl -MO = Deparse yourscript.pl.您的原始代码解析为: sub a { print 1; } {;}; a ; 子编译首先,然后一个块在其中没有代码运行,然后调用一个. 对于Perl 6中的示例,请参阅:Success,Failure.请注意,在Perl 6中,取消引用.不 – > 编辑:我已经添加了another answer关于预期为Perl 5.18的词汇子程序的新的实验支持. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |