以下代码
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
在范围和持续时间方面的情况如何?
答案 0 :(得分:0)
您需要在hashref中存储对$ foo的引用,即val => \$foo
。目前,您只存储了该值,因此无法更新。
访问时务必取消引用,即print ${$var->{val}}