$SIG{__WARN__} = sub { my @loc = caller(1); print STDOUT "Warning generated at line $loc[2] in $loc[1]:\n", @_, "\n"; return 1; }; #### use warnings FATAL => qw( all ); #### $SIG{__WARN__} = sub { CORE::die "Warning:\n", @_, "\n" }; #### use Carp; sub CallStack { local $@; eval { confess( '' ) }; my @stack = split m/\n/, $@; shift @stack for 1..3; # Cover our tracks. return wantarray ? @stack : join "\n", @stack; } #### sub Something { local $@; # Don't step on other code. # try eval{ local $SIG{__DIE__}; # No sigdie handler # do stuff that might die } # catch HandleEvalError( $@ ) if $@; } #### BEGIN{ $SIG{__DIE__} = \&FatalErr } # Real problem if compile fails before getting here. sub FatalErr { # do stuff, maybe print @_ or something. }