cod*_*ero 2 recursion perl scope
请原谅我(可能)愚蠢的问题,但我正在搞乱这个代码(实际上是一个大型程序中的某个模型),有些东西让我失望:
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";
}
Run Code Online (Sandbox Code Playgroud)
'for'循环的第一次迭代工作正常.然而,在随后的迭代中,我遇到了一个问题.如您所见,在调用递归函数之前,全局变量$ g在'for'循环中首先被重置.使用调试器,我可以看到在调用函数之前$ g被设置回''.但是,只要输入函数'recurse',它就会返回到先前的值.我在这里错过了什么?
作为必然结果,我不喜欢在这里使用全局变量.如果没有为recurse()创建$ ga参数,那么"正确"的方法是什么?
my $g是一个局部变量,所以它与你在里面使用的变量不同recurse.删除my将解决这个问题,尽管它仍然是一个丑陋的代码.
您可以将$g第二个参数传递给该resurse函数.
注意:use strict;是你的朋友;)