如何更改子程序中的变量?

时间:2014-08-19 19:36:32

标签: perl scope

以下代码

use strict;

my $var = new();
foreach (1..3){
        print $var->{val},"\t",$var->{inc}(),"\n";
    }

sub new{
    my $foo = 0;
    return {
        val => $foo,
        inc => sub {
                   # do something with $foo
                   $foo++;
                   }
    };
}

给出了输出:

0    0
0    1
0    2

因此,我们无法通过设置$foo来更改子例程$var{inc}内的$var{val}。有没有办法做到这一点?一个my $foo变量可能会在同一范围内分成两个不同的实体(?)在此计划中,my $foo在范围和持续时间方面的情况如何?

1 个答案:

答案 0 :(得分:0)

您需要在hashref中存储对$ foo的引用,即val => \$foo。目前,您只存储了该值,因此无法更新。

访问时务必取消引用,即print ${$var->{val}}