如果我有一个如下所示的块:
{
say $myVar;
my $myVar=1;
}
我得到了预期的错误:
Variable '$myVar' is not declared
但是以类似的方式使用sub
{
test();
my sub test() {
say "Hello";
}
}
此命令运行时不会出现错误,并打印:
Hello
在封闭的块之外,$myVar
和test
都不可见,因此从这个意义上说,它们都是词法作用域。
由于test
在代码中的位置之前已定义并可用,因此sub
必须将其声明“提升”到块的顶部。然而,我找不到一个参考资料来支持这一点。
提出这个问题的原因是查看了perl中的词法作用域my subs
,它在上面第二种情况的perl版本中给出了一个“未定义的子例程”错误。在我对词法作用域的理解中,这是我所期望的。
我不假思索地使用它。编写一些测试代码,稍后将其包装到我的文件底部声明的sub
中,并调用文件中前面的sub。一切正常!
这确实引出了一个问题: perl6 subs真的在这种意义上限定了词法范围吗?
https://stackoverflow.com/questions/56778434
复制相似问题