Hi Dave,

On 2 Feb 2007, at 12:30, David Golden wrote:
[snip]
There is a different case that needs to be considered.  Module Fribble
uses an eval in it's DESTROY method without error and thus Foo's fatal
error in an eval vanishes.
[snip]

Good point.

Because Perl normally warns but doesn't die on exceptions in DESTROY,
I would agree that T::E also shouldn't care about such exceptions.

I agree.

Extending that argument, T::E also shouldn't introduce capabilities
that wouldn't exist for an ordinary programmer using eval {} on
similar code in production.  Consider:

 dies_ok{ my $foo = Foo->new; die "Fatal Error" };
 lives_ok{ my $foo = Foo->new; die "Fatal Error" };

I think a good case should be made that *both* of these should fail if
a DESTROY block with an eval is swallowing up [EMAIL PROTECTED]  A good 
diagnostic
that describes this unexpected result would help programmers realize
that some strange action at a distance is happening.

 not ok 1
 # Code died, but appeared to live because $@ was reset
 # unexpectedly by a DESTROY method called during cleanup
 not ok 2
 # Code died, but appeared to live because $@ was reset
 # unexpectedly by a DESTROY method called during cleanup

I quite like this. The problem would then be managing folk who get around these sorts of problems by the:

  eval { something(); 1 } ? "lived" : "died"

convention....maybe have variants of the subroutines... hmmm...

Ta,

Adrian

Reply via email to