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

perl – 局部变量保留值

发布时间:2020-12-15 21:48:07 所属栏目:大数据 来源:网络整理
导读:所以,我只是追踪了一个可以在这个简单的子程序中演示的错误: sub foo { my $bar = shift or die "Missing bar",# --- not a semicolon my @items = (); push @items,$bar; return @items;} 显然,错误是子程序的第一行以逗号结尾.这有一些相当不寻常的后果,
所以,我只是追踪了一个可以在这个简单的子程序中演示的错误:
sub foo {
    my $bar = shift or die "Missing bar",# <--- not a semicolon
    my @items = ();
    push @items,$bar;
    return @items;
}

显然,错误是子程序的第一行以逗号结尾.这有一些相当不寻常的后果,可以看出:

say foo(1); # 1
say foo(1); # 11
say foo(1); # 111
say foo(1); # 1111

现在,我知道这不是语法错误,因为逗号运算符的工作原理.我知道@items没有被设置为()因为右边的或者没有到达.我的问题是,如何用我的子程序内部声明的变量允许数据在子程序调用之间持续存在?似乎我的某种程度变成了我们.

解决方法

B::Deparse在这样的练习中非常宝贵:
$perl -MO=Deparse 31191808.pl
sub foo {
    die 'Missing bar',my(@items) = () unless my $bar = shift @_;
    push @items,$bar;
    return @items;
}

这使得它成为my $var if 0技巧/错误/好奇心的变种.它的作用是创建一个词法但静态的变量,每次调用foo时都不会重新初始化.

(编辑:李大同)

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

    推荐文章
      热点阅读