in reply to Re^6: Question on "Effective Perl Programming" (intervene)
in thread Question on "Effective Perl Programming"

girarde is correct in concluding that Anonymous Monk is completely off base in writing "If it takes so much to check that an eval worked". Adding a 1 and checking directly is a trivial amount of work.

But there is truth to "maybe something should be fixed".

Certainly, any module with a DESTROY that uses eval w/o localizing $@ should be fixed. But that also doesn't mean I'll stop protecting myself from such mistakes because fixing them when you find them doesn't mean they won't crop up again in future.

A patch to Perl that prevented a DESTROY method from clearing $@ would seem prudent to me (you probably want to allow a DESTROY to change but not clear $@ in case someone does that intentionally).

On a somewhat related point, I'd like to have @@ so that dieing inside of a DESTROY doesn't get lost:

sub DESTROY { die "No disassemble!" } print "($_)\n" for eval { my $x= bless {}; 1 }, $@; __END__ (1) ()

- tye