note
jplindstrom
Use the Carp module to show you the stack trace, i.e. each sub routine call in the source code from which you started the program to where you are printing the debug output. Carp comes with Perl.
<code>
use Carp qw/ cluck confess longmess /;
# die of errors with stack backtrace
confess("title: ($title)")
# warn of errors with stack backtrace
cluck("Before escaping title ($title)");
$title = $self->escape($title);
cluck("After escaping title ($title)");
# longmess - return the message that cluck and confess produce
$self->log_error( "title not set: " . longmess() );
</code>
<p>
[cpan://Carp] on search.cpan.org appears to identify perl itself and doesn't provide POD for some reason, but see: <code>perldoc Carp</code>.
<p>
Another useful module is [dist://Carp::Always], which makes all dies and warns emit stack traces.
<p>
Note that this will change exception strings, so any eval BLOCK that checks for specific exception matches against $@ may fail because of this.
<p>
Enable Carp::Always with a regular "use" statement in the code, or temporarily from the command line using one of these:
<code>
perl -MCarp::Always your_program.pl
#or, depending on the shell/CMD
export PERL5OPT=-MCarp::Always
set PERL5OPT=-MCarp::Always
</code>
<p>
Or from within Emacs using the <code>M-x setenv</code> function. This is useful if you run Perl programs using the *compilation* mode.
<p>
/J
744845
744845