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

标签 perl recursion 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";
}

“for”循环的第一次迭代工作正常。然而,在随后的迭代中,我遇到了问题。如您所见,在调用递归函数之前,全局变量 $g 在“for”循环中首先被重置。使用调试器,我可以看到 $g 在调用函数之前被设置回 '' 。但是,一旦输入“recurse”函数,它就会返回到先前的值。我在这里缺少什么?

作为必然结果,我不喜欢在这里使用全局变量。在不使 $g 成为 recurse() 的参数的情况下,“正确”的方法是什么?

最佳答案

my $g 是一个局部变量,因此它与您在 recurse 中使用的变量不同。删除 my 将解决这个问题,尽管它仍然是一个丑陋的代码。

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

注意:use strict; 是你的 friend ;)

关于perl - 全局变量在子程序中重置自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7492309/

相关文章:

perl - 这个数组是散列还是标量?

perl - 是否可以在 Perl 中使用 SSH 私钥对我的数据进行签名?

algorithm - 需要木刻递归建议

javascript - 函数提升和返回语句

powershell - 从模块导出函数时,延迟绑定(bind)脚本 block 不起作用

javascript - &lt;script&gt; block 中定义的 JavaScript 函数是否可以被另一个 JS 函数访问?

perl - 这两个语句在 perl 中总是相同的吗?

perl - 限制在 Perl 脚本中执行的程序的同时实例数(>1)

java - 递归过程如何计算 BST 的高度?

c++ - 从递归模板类继承