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.