http://qs1969.pair.com?node_id=537506


in reply to Re: eval {require module};?
in thread eval {require module};?

Many months later I now know how eval{} can fail and yet not set $@. It happens if a DESTROY method called during the stack-unwind also does an eval.
use AtExit; eval { my $q = AtExit->new(sub{eval{}}); die "Oops\n"; }; print $@; # Prints nothing

Replies are listed 'Best First'.
Re^3: eval {require module};?
by Anonymous Monk on Mar 17, 2006 at 20:17 UTC
    Which means you have to
    sub DESTROY{ local $@; eval{...} }
    if you want to use eval in DESTROY.