$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.
}