我无法用看似简单的表达式来解释 perl 的行为。我已将我的问题与这段相对较短的 perl 代码隔离开来。make_peak 返回一个函数,该函数跟踪信号 v() 的最大值并将该最大值保存在封闭变量 $max 中。
事实上,代码打印“2”。但是,如果我删除 kludgy ""。在返回语句中,$p->() 返回 uundef?
use strict;
our $i=0;
sub v($) {
$i=$i+1;
return $i;
}
sub make_peak($)
{
my $vi=$_[0];
my $max=-1e35;
return sub() {
$max=v($vi) if v($vi)>$max;
return "".$max; # ??? without the kludge returns empty line
};
}
my $p=make_peak(10);
my $m=$p->();
print $m;