全局变量在子程序中重置自身

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参数,那么"正确"的方法是什么?

Kar*_*ath 7

my $g是一个局部变量,所以它与你在里面使用的变量不同recurse.删除my将解决这个问题,尽管它仍然是一个丑陋的代码.

您可以将$g第二个参数传递给该resurse函数.

注意:use strict;是你的朋友;)