Как я могу получить трассировку в Perl?

Возможный дубликат:
Как принудительно выполнить трассировку стека для всех фатальных ошибок в Perl?

Одна из вещей, которые мне нравятся в Python, это то, что когда сценарий завершается из-за ошибки, он выдает обратную трассировку. Мне интересно, есть ли способ заставить Perl делать это?


person Incognito    schedule 22.02.2010    source источник
comment
Dupe: stackoverflow.com/questions/738628. Кроме того, stackoverflow.com/questions/1877638 и stackoverflow.com/questions/971273   -  person mob    schedule 22.02.2010


Ответы (2)


Добавьте это в начало вашего скрипта:

use Carp 'verbose';
$SIG{ __DIE__ } = sub { Carp::confess( @_ ) };

Он создаст трассировку стека для всех фатальных ошибок.

person Gavin Brock    schedule 22.02.2010
comment
Вы также можете сделать это $SIG{__DIE__} = \&Carp::confess; - person Leon Timmermans; 22.02.2010
comment
Этот ответ действительно намного лучше, чем вопрос, который считается дубликатом этого. - person EMiller; 20.08.2014

Изучите модуль Carp :: Always.

person tsee    schedule 22.02.2010
comment
Carp::Always - гораздо лучший метод, чем возиться с sigdie, потому что вы можете включить его из командной строки. perl -MCarp::Always my_script Очень-очень приятно. - person daotoad; 22.02.2010
comment
Я поставил #!/c/Perl/bin/perl -MCarp::Always -w в качестве первой строки в скрипте. И он сказал Too late for "-MCarp::Always" option at ... line 1. - person Evgeni Sergeev; 28.12.2013