【发布时间】:2014-10-25 06:36:27
【问题描述】:
我在 Perl 中遇到了一个我认为不是我的代码的问题。我有这个重入子程序:
sub foo
{
my $depth = $_[0];
my $input = $_[1];
my $result = mymodule::do_calc($input);
if ($result) { foo($depth+1,$result); }
print "mark $depth\n";
}
该程序按原样运行良好。但是,如果我注释掉打印行,程序就会进入无限循环。
如果我在 foo 调用之前放置一个断点,我可以看到 $depth 正在获取哈希引用的值。有了打印线,它就不会了。
有人知道从这里去哪里吗?我猜我正在触发某种解释器错误?
【问题讨论】:
-
只要
$result为真foo就会调用自己,所以一切都取决于你的module::do_calc函数的作用。如果do_calc一直返回一个真值,它将导致foo在foo内的无限调用,由于堆栈深度有限,一段时间后应该以错误结束。不幸的是,您没有发布do_calc函数,因此无法预测您的代码在做什么。