This gives a simpler implementation of ok() that also includes descriptive names.
--- pod/perlhack.pod 2001/08/28 13:54:34 1.1 +++ pod/perlhack.pod 2001/08/30 21:00:31 @@ -1481,13 +1481,12 @@ my $test = 1; sub ok { - my($ok) = @_; + my($ok, $name) = @_; # You have to do it this way or VMS will get confused. - my $out = ''; - $out = "not " unless $ok; - $out .= "ok $test\n"; - print $out; + print $ok ? "ok $test - $name\n" : "not ok $test - $name\n"; + + printf "# Failed test at line %d\n", (caller)[2] unless $ok; $test++; return $ok; @@ -1500,16 +1499,19 @@ we can write the (somewhat) more sensible: - ok( "1.20.300.4000" eq sprintf "%vd", pack("U*",1,20,300,4000) ); + ok( "1.20.300.4000" eq sprintf "%vd", pack("U*",1,20,300,4000), + "U* produces unicode" ); Now we'll test that we got that space-at-the-beginning business right: - ok( "1.20.300.4000" eq sprintf "%vd", pack(" U*",1,20,300,4000) ); + ok( "1.20.300.4000" eq sprintf "%vd", pack(" U*",1,20,300,4000), + " with spaces at the beginning" ); And finally we'll test that we don't make Unicode strings if C<U> is B<not> the first active format: - ok( v1.20.300.4000 ne sprintf "%vd", pack("C0U*",1,20,300,4000) ); + ok( v1.20.300.4000 ne sprintf "%vd", pack("C0U*",1,20,300,4000), + "U* not first isn't unicode" ); Mustn't forget to change the number of tests which appears at the top, or else the automated tester will get confused: -- Michael G. Schwern <[EMAIL PROTECTED]> http://www.pobox.com/~schwern/ Perl6 Quality Assurance <[EMAIL PROTECTED]> Kwalitee Is Job One Well, my work here is done. If you need me again, just admit that you're screwed and die.