>From http://use.perl.org/~Ovid/journal/39193
The latest developer release of Test::More allows subtests. Subtests are great in that they solve a lot of problems in advanced Perl testing, but they have required a change in Test::Builder. Previously you could do stuff like this: package Test::StringReverse; use base 'Test::Builder::Module'; our @EXPORT = qw(is_reversed); my $BUILDER = Test::Builder->new; sub is_reversed ($$;$) { my ( $have, $want, $name ) = @_; my $passed = $want eq scalar reverse $name; $BUILDER->ok($passed, $name); $BUILDER->diag(<<" END_DIAG") if not $passed; have: $have want: $want END_DIAG return $passed; } 1; And you've have a simple (untested;) test for whether or not strings are reversed. The reason that worked is that Test::Builder->new used to return a singleton. This is no longer true. If someone uses your test library in a subtest, the above code would break. Instead, you want to do this: sub is_reversed ($$;$) { my ( $have, $want, $name ) = @_; my $passed = $want eq scalar reverse $name; my $builder = __PACKAGE__->builder; $builder->ok($passed, $name); $builder->diag(<<" END_DIAG") if not $passed; have: $have want: $want END_DIAG return $passed; } It's a minor change, it's completely backwards-compatible and it supports subtests. Cheers, Ovid -- Buy the book - http://www.oreilly.com/catalog/perlhks/ Tech blog - http://use.perl.org/~Ovid/journal/ Twitter - http://twitter.com/OvidPerl Official Perl 6 Wiki - http://www.perlfoundation.org/perl6