Test::More/Test::Builder work VERY hard to ensure nothing inside them alters $! or $@. This is for thing like this:
ok(do_something_scary()); > is($!, 0, "expected $! val"); > is($@, undef, '$@ not changed'); Without Test::More/Builder being careful to support this, the second 2 assertions could fail because something inside ok() modifies $! or $@. *I cannot change Test::Builder/More* they must continue to protect $! and $@, otherwise things break (I have a few downstream samples to show that it does). However. It is easy enough to have Test::Builder/More protect $! and $@ without requiring Test2 to do so. Since Test2 is new, and nothing depends on any of its behaviors yet, I am considering having Test2 not care about modifying $! and $@. So far I have been taking care to preserve $! and $@, but it does add significant complexity (and minor, but noticeable slowdown) to Test2. *Reasons for dropping this promise from Test2:* - Simplifies code - $! and $@ are altered by many many things, adding { local ... } around all of them is a pain - Sometimes internals you don't expect to set $! will - Perl itself documents that you cannot depend on $! and $@ being unchanged past the immediate line after you set it. - Test::Builder will continue to protect $! and $@, so nothing will break - Test2 is new, nothing depends on it preserving these *Reasons not to drop it:* - It is helpful to people who might not realize $! and $@ are often altered unexpectedly. I am asking for input in case I missed any reasons/arguments for either side. In either case backwards compatibility will be preserved. -Chad