#!/usr/bin/perl use strict; use warnings; # create a die handler - this will have stack trace # and global var dump in RL local $SIG{__DIE__} = sub { print "REAL DIE CAPTURED @_\n"; exit(0); }; # localize the die handler (works as expected) print "eval die with local __DIE__ sig handler:\n"; eval { local $SIG{__DIE__}; die "OMG - someone killed kenny"; }; if ($@) { print "Eval die captured: $@\n"; } # no local die triggers handler above - expected, but unwanted. print "eval die without local __DIE__ sig handler:\n"; eval { die "OMG - someone killed kenny"; }; if ($@) { print "Eval die captured: $@\n"; } # real die, works as expected when previous case commented out print "REAL die:\n"; die("This is a real error"); print "\nDie failed...\n";