According to
the docs $^S may be set inside the
die() handler even if you're not inside an
eval. So that's why it appears that
$SIG{__DIE__} has been reset. If you put a print statement before the
die() you'll see that
$^S is set within the
$SIG{__DIE__} handler.
# slightly revised die() handler
sub die_handler {
# added this line
print "\$^S is set to $^S", $/;
die @_ if $^S;
print "ERROR: $_[0]\n (Check logs for more info)\n-----\n\n";
exit(1);
}
__output__
Warn before init! at die_code.pl line 3.
WARNING: Warned at die_code.pl line 7.
(Check logs for more info)
-----
$^S is set to 1
Caught: died inside eval!
$^S is set to 1
Died for real! at die_code.pl line 28.
HTH
broquaint