The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Test_Framework;

use warnings;
use strict;
use Exporter;
use vars qw(@ISA @EXPORT);

@ISA = qw(Exporter);
@EXPORT = qw(&Test &Test_Failure &Report_Results &Arrays_Equal);
my $test_no = 1;
my @results;

sub Test(&) {
    my $code = $_[0];
    push @results, test_succeeds($code);
    if ( ! $results[$#results] ) {
	print STDERR $@, "\n" if $@;
    }
}

sub Test_Failure(&) {
    my $code = $_[0];
    push @results, ! test_succeeds($code);
}

sub Report_Results() {
    print '1..', ($#results+1), "\n";
    for ( my $i = 0; $i <= $#results; $i++ ) {
	print $results[$i] ? 'ok' : 'not ok', ' ', $i+1, "\n";
    }
}

sub test_succeeds {
    my $code = $_[0];
    my $result;
    eval { $result = &$code };
    return $result && ! $@;
}

sub Arrays_Equal($$) {
    my ($a1, $a2) = @_;
    return 0 if $#$a1 != $#$a2;
    for ( my $i = 0; $i <= $#$a1; $i++ ) {
	return 0 if $$a1[$i] ne $$a2[$i];
    }
    return 1;
}

1;