$SIG{__DIE__} = sub { my ( $path, $line, $subr ); my $i = 0; while ( $subr = (caller($i++))[3] ) { return if $subr eq '(eval)'; } warn "died at: ", join(' line ', (caller)[1,2]), "\n"; $i = 1; while ( ($path, $line) = (caller($i++))[1,2] ) { warn "caller: $path line $line\n"; } };