It looks to me like $sigdie
is there to explictily allow the eval'd code to set $SIG{__DIE__}
, while not allowing any externally set handler to take effect during the eval.
So the localization suppresses the external value, but requires saving any set value before the end of the block and setting it in the now not-localized version after the block.
I assume $!
is localized but not $?
, $^E
, etc. for practical reasons (that is, I'd guess people complained about $!
changing, but not anything else).