Minimum
Viable
Perl
This book is a work in progress. Subscribe to get new chapters in your inbox.
Chapter 6. Debugging

6.2. Forcing stack traces

Default behavior

By default perl doesn't print a stack trace when errors occur. For example:

$ cat foo.pl
#!/usr/bin/env perl
use strict;
use warnings;
sub function3 { function4() }
sub function2 { function3() }
sub function1 { function2() }
function1();
$ perl foo.pl 
Undefined subroutine &main::function4 called at foo.pl line 5.

How to force a stack trace

If you want to see a stack trace you should use Devel::Confess.

Example on the command line:

$ perl -d:Confess foo.pl
Undefined subroutine &main::function4 called at foo.pl line 5.
 main::function3() called at foo.pl line 6
 main::function2() called at foo.pl line 7
 main::function1() called at foo.pl line 9

Example from inside your program:

#!/usr/bin/env perl
use strict;
use warnings;
use Devel::Confess 'color';
sub function3 { function4() }
sub function2 { function3() }
sub function1 { function2() }
function1();

How to force a stack trace in just one place in your code with Carp:

#!/usr/bin/env perl
use strict;
use warnings;
use Carp 'confess';
sub function3 { confess 'die with a stack trace' }
sub function2 { function3() }
sub function1 { function2() }
function1();

AltStyle によって変換されたページ (->オリジナル) /