2014-09-01 64 views
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取值爲散列引用。在打印線不存在的情況下。

有誰知道該從哪裏出發?我猜我正在觸發某種解釋器錯誤?

+2

只要'$ result'爲真'foo'會自行調用,所以全部取決於'module :: do_calc'函數的作用。如果'do_calc'始終返回一個真值,它會在'foo'內產生無限的'foo'調用,一段時間後應該由於堆棧深度有限而導致錯誤結束。不幸的是,你沒有發佈'do_calc'函數,所以無法預測你的代碼在做什麼。 – 2014-09-01 05:05:42

回答

0

代碼中的$ input和$ depth之間有一個關係。