Perl中的嵌套子例程和范围

前端之家收集整理的这篇文章主要介绍了Perl中的嵌套子例程和范围前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我现在在写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

在Perl中允许嵌套命名子例程,但它几乎肯定是代码正在做错误的一个迹象.

猜你在找的Perl相关文章