0
我在Perl中遇到了一個問題,我認爲這不是我的代碼。我有這個可重入的子程序: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'函數,所以無法預測你的代碼在做什麼。 – 2014-09-01 05:05:42