BTW, one should generally also local'ize $@ in any code, at least like in:
sub DESTROY { ... local $@; eval { ... }; if ($@) ....
}
eval in destructors is particularly nasty, since those without 'local' wipe out $@ without giving you any chance to look at the error (short of abusing $SIG{__DIE__}):
sub Foo::DESTROY { eval { } }
eval { my $a= bless {},"Foo"; die "Hell is loose"; print "Heaven\n"; }; if ($@) { print "Heaven not achieved: [EMAIL PROTECTED]"; }
will print nothing at all.
=> always, always (*) localize $@ before entering eval, or alternatively localize it in all destructors that use eval directly or might use it indirectly.
Christian.
(* at least theoretically)
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]