2014-09-01 6 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', поэтому вы не можете предсказать, что делает ваш код. –

ответ

0

Существует связь между $ input и $ depth в другом месте кода.