http://qs1969.pair.com?node_id=74342


in reply to Checking the success of eval

My favourite gotcha with eval is if you set a die handler then the die handler is called even inside the eval! In fact I consider this a bug in perl - as does the author of "perldoc die"

Eg

$SIG{__DIE__} = sub { print "Caught by die handler: $_[0]"; exit }; eval { die "Oops\n"; }; print "Eval returned error: $@" if $@;
This prints Caught by die handler: Oops.

The fix goes like this :-

$SIG{__DIE__} = sub { print "Caught by die handler: $_[0]"; exit };

eval
{
    local $SIG{__DIE__};
    die "Oops\n";
};

print "Eval returned error: $@" if $@;
Which returns Eval returned error: Oops as anyone would always want.