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();