It gets more interesting! I thought I would throw a SIG{DIE} in there just to see where the route goes and got a very odd result (note the double S):
perl -we "sub fail{die 'test'}; END{ print qq'\nF\n'; fail() };
$SIG{__DIE__} = sub{print qq!\nS\n!; fail()}; fail()"
S
test at -e line 1.
F
S
S
test at -e line 1.
Update
I like line numbers, so I wrote this up as little program:
#!perl -w
use strict;
my $counter = 0;
sub fail{ ++$counter; print "$counter: Fail called.\n"; die "DEATH ".
+__LINE__ ."\n" }
END{ ++$counter; print "$counter: End called.\n"; fail() }
$SIG{__DIE__} = sub{ ++$counter; print "$counter: SigDie called.\n"; f
+ail() };
fail()
and the output:
1: Fail called.
2: SigDie called.
3: Fail called.
DEATH 4
4: End called.
5: Fail called.
6: SigDie called.
7: Fail called.
8: SigDie called.
9: Fail called.
DEATH 4
|