$SIG{__DIE__} = \&sig_die; sub sig_die{ my ($msg) = @_; # Do nothing if called from inside an eval block. die @_ if $^S; stack_trace(); } sub stack_trace(){ use File::Basename; print STDERR "\n-------Begin Stack Trace-----------\n"; my $i = 0; while(my ($package, $filename, $line,$sub ) = caller($i++)){ my $file = basename($filename); print STDERR "($i) $sub ${file}::${package} line $line\n"; } print STDERR "\n-------End Stack Trace-------------\n"; }