加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl中的嵌套子例程和范围

发布时间:2020-12-15 21:14:23 所属栏目:大数据 来源:网络整理
导读:我现在在写Perl一段时间,总是发现新的东西,我刚刚遇到一些有趣的东西,我没有解释,也没有发现它在网络上. sub a { sub b { print "In Bn"; }}b(); 怎么可以从外面调用b(),它的作用是什么? 我知道这是一个不好的做法,我不这样做,我使用关闭等等这些情况,但只
我现在在写Perl一段时间,总是发现新的东西,我刚刚遇到一些有趣的东西,我没有解释,也没有发现它在网络上.
sub a {
   sub b {
     print "In Bn";
   }
}
b();

怎么可以从外面调用b(),它的作用是什么?

我知道这是一个不好的做法,我不这样做,我使用关闭等等这些情况,但只是看到了.

解决方法

子程序在编译时存储在全局命名空间中.在你的例子中b(); main :: b();.要将函数的可见性限制为范围,您需要为变量分配一个匿名子例程.

命名和匿名子程序都可以形成闭包,但是由于命名子程序只能编译一次,如果您将其嵌套,则它们的行为不会像许多人所期望的那样.

use warnings;
sub one {
    my $var = shift;
    sub two {
        print "var: $varn";
    }
}
one("test");
two();
one("fail");
two();
__END__
output:
Variable "$var" will not stay shared at -e line 5.
var: test
var: test

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读