{ package Foo; sub new { bless({}, $_[0]) } DESTROY { eval { die "Woof\n"; }; } } eval { my $foo = Foo->new(); die "Meow\n"; }; print($@); # Woof #### $@=undef; { local $@; ... } # $@ is undef here, no matter what "..." is.