请原谅我这个(可能)愚蠢的问题,但我正在弄乱这段代码(实际上是一个更大程序中的某个模型),有些东西让我失望:
sub recurse {
my $m = shift;
$g .= "::" . $m;
if ($m == 0) { return $g; }
else { $m--; recurse ($m); }
}
for ($i = 0; $i < 3; $i++)
{
my $g = '';
$str = recurse (10);
print $str . "\n";
}
“for”循环的第一次迭代工作正常。然而,在随后的迭代中,我遇到了问题。如您所见,在调用递归函数之前,全局变量 $g 在“for”循环中首先被重置。使用调试器,我可以看到 $g 在调用函数之前被设置回 '' 。但是,一旦输入“recurse”函数,它就会返回到先前的值。我在这里缺少什么?
作为必然结果,我不喜欢在这里使用全局变量。在不使 $g 成为 recurse() 的参数的情况下,“正确”的方法是什么?
最佳答案
my $g
是一个局部变量,因此它与您在 recurse
中使用的变量不同。删除 my
将解决这个问题,尽管它仍然是一个丑陋的代码。
您可以将 $g
的第二个参数传递给 resurse
函数。
注意:use strict;
是你的 friend ;)
关于perl - 全局变量在子程序中重置自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7492309/