in reply to about redifining $SIG{'__DIE__'}

I noticed that you tried to use the eval BLOCk form, not the the eval STRING form.

Those two uses of eval are two quite different beasts, and I guess that $^S refers to the string form, not to the block form.

Update Ok I tried it, I was wrong. Here's what's happening:

use strict; use warnings; use Data::Dumper; print "in main: ", Dumper $^S; eval 'BEGIN { print "In eval STRING BEGIN: ", Dumper $^S; } print "in +eval STRING: ", Dumper $^S'; eval { BEGIN { print "in eval BLOCK BEGIN: ", Dumper $^S;} print "in eval BLOCK: ", Dumper $^S; }; __END__ in eval BLOCK BEGIN: $VAR1 = undef; in main: $VAR1 = '0'; In eval STRING BEGIN: $VAR1 = undef; in eval STRING: $VAR1 = '1'; in eval BLOCK: $VAR1 = '1';

It turns out that $^S doesn't distinguish between BLOCK and STRING eval at all.