gpt4 book ai didi

perl - Perl subs 没有词法作用域是一个设计缺陷吗?

转载 作者:行者123 更新时间:2023-12-03 01:17:44 26 4
gpt4 key购买 nike

{
sub a {
print 1;
}
}
a;

一个错误,是吗?

a 不应该从外部获得。

它在 Perl 6* 中工作吗?

* 抱歉,我还没有安装它。

最佳答案

您是否在问为什么子在 block 外可见?如果是这样,那么它是因为编译时 sub 关键字将 sub 放在 main 命名空间中(除非您使用 package 关键字创建新的命名空间)。你可以尝试类似的东西

{
my $a = sub {
print 1;
};
$a->(); # works
}
$a->(); # fails

在这种情况下,sub 关键字不会创建子并将其放入 main 命名空间中,而是创建一个匿名子例程并将其存储在词法作用域变量中。当变量超出范围时,它不再可用(通常)。

要了解更多信息,请查看 perldoc perlsub

此外,您是否知道可以检查 Perl 解析器查看代码的方式?使用标志 -MO=Deparse 运行 perl,如 perl -MO=Deparse yourscript.pl 中所示。您的原始代码解析为:

sub a {
print 1;
}
{;};
a ;

首先编译子程序,然后运行一个没有代码的 block ,然后调用 a

对于我在 Perl 6 中的示例,请参阅: Success , Failure 。请注意,在 Perl 6 中,取消引用是 . 而不是 ->

编辑:我添加了 another answer关于 Perl 5.18 预计对词汇子例程的新实验支持。

关于perl - Perl subs 没有词法作用域是一个设计缺陷吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7523757/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com