我现在在写Perl一段时间,总是发现新的东西,我刚刚遇到一些有趣的东西,我没有解释,也没有发现它在网络上.
sub a { sub b { print "In B\n"; } } b();
怎么可以从外面调用b(),它的作用是什么?
我知道这是一个不好的做法,我不这样做,我使用关闭等等这些情况,但只是看到了.
解决方法
子程序在编译时存储在全局命名空间中.在你的例子中b(); main :: b();.要将函数的可见性限制为范围,您需要为变量分配一个匿名子例程.
命名和匿名子程序都可以形成闭包,但是由于命名子程序只能编译一次,如果您将其嵌套,则它们的行为不会像许多人所期望的那样.
use warnings; sub one { my $var = shift; sub two { print "var: $var\n"; } } one("test"); two(); one("fail"); two(); __END__ output: Variable "$var" will not stay shared at -e line 5. var: test var: test