7 my ($got, $expected, $name) = @_;
9 print "not ok $test - $name\n";
10 my @caller = caller(1);
11 print "# Failed test at $caller[1] line $caller[2]\n";
13 print "# Got '$got'\n";
15 print "# Got undef\n";
17 print "# Expected $expected\n";
22 my ($got, $pattern) = @_;
24 if (defined $got && $got =~ $pattern) {
26 # Principle of least surprise - maintain the expected interface, even
27 # though we aren't using it here (yet).
30 failed($got, $pattern, $name);
34 my ($got, $expect) = @_;
36 if (defined $expect) {
37 if (defined $got && $got eq $expect) {
41 failed($got, "'$expect'", $name);
47 failed($got, 'undef', $name);
51 sub f($$_) { my $x = shift; is("@_", $x) }
57 f("FOO xy", $foo, "xy");
58 f("BAR zt", $bar, "zt");
61 f("y 42", substr("xy",1,1));
62 f("1 42", ("abcdef" =~ /abc/));
63 f("not undef 42", $undef || "not undef");
64 f(" 42", -f "no_such_file");
65 f("FOOBAR 42", ($foo . $bar));
66 f("FOOBAR 42", ($foo .= $bar));
70 like( $@, qr/Not enough arguments for main::f at/ );
72 like( $@, qr/Too many arguments for main::f at/ );
75 my $_ = "quarante-deux";
78 f("FOO quarante-deux", $foo);
79 f("BAR quarante-deux", $bar);
80 f("y quarante-deux", substr("xy",1,1));
81 f("1 quarante-deux", ("abcdef" =~ /abc/));
82 f("not undef quarante-deux", $undef || "not undef");
83 f(" quarante-deux", -f "no_such_file");
84 f("FOOBAR quarante-deux", ($foo . $bar));
85 f("FOOBAR quarante-deux", ($foo .= $bar));
86 f("FOOBAR quarante-deux", $foo);
91 sub g(_) { is(shift, $expected) }
99 undef $expected; &g; # $_ not passed
100 { $expected = my $_ = "bar"; g() }
102 eval q{ sub wrong1 (_$); wrong1(1,2) };
103 like( $@, qr/Malformed prototype for main::wrong1/, 'wrong1' );
105 eval q{ sub wrong2 ($__); wrong2(1,2) };
106 like( $@, qr/Malformed prototype for main::wrong2/, 'wrong2' );
110 is($_[1], undef, "; has precedence over _");
115 sub unop (_) { is($_[0], 11, "unary op") }
116 unop 11, 22; # takes only the first parameter into account
118 sub mymkdir (_;$) { is("@_", $expected, "mymkdir") }
119 $expected = $_ = "mydir"; mymkdir();
120 mymkdir($expected = "foo");
121 $expected = "foo 493"; mymkdir foo => 0755;
123 # $_ says modifiable, it's not passed by copy
125 sub double(_) { $_[0] *= 2 }
128 is( $_, 42, '$_ is modifiable' );
132 is( $_, 44, 'my $_ is modifiable' );