Jonathan Rockway <[EMAIL PROTECTED]> writes:

> I think the most sane interface would be:
>
>   my $trap = trap { ... };
>   is $trap->foo, 'foo';
>   is $trap->bar, 'bar';

  Test::Trap already provides:

trap { ... };
is $trap->foo, 'foo'; # for certain values of foo
is $trap->bar, 'bar'; # ... and bar

  Difference being in one less (explicit) assignment, and one less
headache about declarations.  (Avoiding those '"my" variable $trap
masks earlier declaration' upon cut-and-paste, as well as those
'Global symbol "$trap" requires explicit package name' upon moving
tests around.)

  I have my coworkers writing more tests that way.  In all
probability, _I_ am writing more tests that way.


> You said you're trying to emulate $@, but $@ can be changed out from
> under you rather easily, so instead of:

  It is not _quite_ as easy changing $trap out from under you.

  Yes, I'm making it harder for those that use trap {} in DESTROY etc,
but it is still possible to get it right, and I'd rather keep simple
things simple.


> Anyway, automatically setting variables should always be avoided,
> regardless of whether or not it is "perlish".  I want correct tests, not
> "perlish" tests.

  Personally, I'll take one broken along with 99 correct tests any
day, if the alternative is ten tests, be they correct or not.  But I
have yet to encounter (as opposed to deliberately construct) a _single_
test broken due to the automatic setting of $trap.


  Having said all that, it is tempting to give you this alternative
interface on an import option:

use Test::Trap qw(:return_trap);
my $trap = trap { ... };
is $trap->foo, 'foo';
is $trap->bar, 'bar';

  Tempting because it is easy, and because I'm all too fond of
interfaces and MTOWTDI.  But on the other hand, this will confuse
those that expect trap { ... } to return the last value in the block,
and those will be all that _don't_ use this import option.  So, I
don't think so.

  Perhaps a subclass though ...


Eirik
-- 
Skill without imagination is craftsmanship and gives us many useful objects
such as wickerwork picnic baskets.  Imagination without skill gives us modern
art.
                -- Tom Stoppard

Reply via email to