unless( $ok ) {
printf "# Failed test at line %d\n", (caller)[2];
- print "# $info" if defined $info;
+ print "# $info\n" if defined $info;
}
$test++;
return 1;
}
-print "1..46\n";
+print "1..52\n";
$Is_MSWin32 = $^O eq 'MSWin32';
$Is_NetWare = $^O eq 'NetWare';
close FOO; # just mention it, squelch used-only-once
if ($Is_MSWin32 || $Is_NetWare || $Is_Dos || $Is_MPE || $Is_MacOS) {
- skip('SIGINT not safe on this platform') for 1..2;
+ skip('SIGINT not safe on this platform') for 1..4;
}
else {
# the next tests are done in a subprocess because sh spits out a
close CMDPIPE;
- $test += 2;
+ open( CMDPIPE, "| $PERL");
+ print CMDPIPE <<'END';
+
+ { package X;
+ sub DESTROY {
+ kill "INT",$$;
+ }
+ }
+ sub x {
+ my $x=bless [], 'X';
+ return sub { $x };
+ }
+ $| = 1; # command buffering
+ $SIG{"INT"} = "ok5";
+ {
+ local $SIG{"INT"}=x();
+ print ""; # Needed to expose failure in 5.8.0 (why?)
+ }
+ sleep 1;
+ delete $SIG{"INT"};
+ kill "INT",$$; sleep 1;
+ sub ok5 {
+ print "ok 5\n";
+ }
+END
+ close CMDPIPE;
+ print $? & 0xFF ? "ok 6\n" : "not ok 6\n";
+
+ $test += 4;
}
# can we slice ENV?
}
# $?, $@, $$
-system qq[$PERL "-I../lib" -e "use vmsish qw(hushed); exit(0)"];
-ok $? == 0, $?;
-system qq[$PERL "-I../lib" -e "use vmsish qw(hushed); exit(1)"];
-ok $? != 0, $?;
+if ($Is_MacOS) {
+ skip('$? + system are broken on MacPerl') for 1..2;
+}
+else {
+ system qq[$PERL "-I../lib" -e "use vmsish qw(hushed); exit(0)"];
+ ok $? == 0, $?;
+ system qq[$PERL "-I../lib" -e "use vmsish qw(hushed); exit(1)"];
+ ok $? != 0, $?;
+}
eval { die "foo\n" };
ok $@ eq "foo\n", $@;
ok $^T > 850000000, $^T;
if ($Is_VMS || $Is_Dos || $Is_MacOS) {
- skip("%ENV manipulations fail or aren't safe on $^O") for 1..2;
+ skip("%ENV manipulations fail or aren't safe on $^O") for 1..3;
}
else {
$PATH = $ENV{PATH};
# -- Nikola Knezevic
ok ($Is_MSWin32 ? (`set __NoNeSuCh` =~ /^(?:__NoNeSuCh=)?foo$/)
: (`echo \$__NoNeSuCh` eq "foo\n") );
+ if ($^O =~ /^(linux|freebsd)$/ &&
+ open CMDLINE, "/proc/$$/cmdline") {
+ chomp(my $line = scalar <CMDLINE>);
+ my $me = (split /\0/, $line)[0];
+ ok($me eq $0, 'altering $0 is effective');
+ close CMDLINE;
+ } else {
+ skip("\$0 check only on Linux and FreeBSD with /proc");
+ }
}
{
my %errs = %{"!"}; # Cause Errno.pm to be loaded at run-time
ok ${"!"}{ENOENT};
-ok $^S == 0;
+ok $^S == 0 && defined $^S;
eval { ok $^S == 1 };
-ok $^S == 0;
+eval " BEGIN { ok ! defined \$^S } ";
+ok $^S == 0 && defined $^S;
ok ${^TAINT} == 0;
eval { ${^TAINT} = 1 };
ok "@-" eq "0 0 2 7";
ok "@+" eq "10 1 6 10";
+# Tests for the magic get of $\
+{
+ my $ok = 0;
+ # [perl #19330]
+ {
+ local $\ = undef;
+ $\++; $\++;
+ $ok = $\ eq 2;
+ }
+ ok $ok;
+ $ok = 0;
+ {
+ local $\ = "a\0b";
+ $ok = "a$\b" eq "aa\0bb";
+ }
+ ok $ok;
+}