$| = 1;
use warnings;
use Config;
-$Is_VMS = $^O eq 'VMS';
$Is_MacOS = $^O eq 'MacOS';
-plan tests => 105;
+plan tests => 108;
my $Perl = which_perl();
unlink("afile");
}
-
-SKIP: {
- skip "open -| busted and noisy on VMS", 3 if $Is_VMS;
-
+{
ok( open(my $f, '-|', <<EOC), 'open -|' );
$Perl -e "print qq(a row\\n); print qq(another row\\n)"
EOC
is( scalar @rows, 2, ' readline, list context' );
ok( close($f), ' close' );
}
-
SKIP: {
skip "Output for |- doesn't go to shell on MacOS", 5 if $Is_MacOS;
unlink("afile");
}
-SKIP: {
- skip "open -| busted and noisy on VMS", 3 if $Is_VMS;
-
+{
ok( open(local $f, '-|', <<EOC), 'open local $f, "-|", ...' );
$Perl -e "print qq(a row\\n); print qq(another row\\n)"
EOC
}
# used to try to open a file [perl #17830]
- ok( open(my $stdin, "<&", fileno STDIN), 'dup fileno(STDIN) into lexical fh');
+ ok( open(my $stdin, "<&", fileno STDIN), 'dup fileno(STDIN) into lexical fh') or _diag $!;
}
SKIP: {
skip "This perl uses perlio", 1 if $Config{useperlio};
- skip "This system doesn't understand EINVAL", 1 unless exists $!{EINVAL};
+ skip "miniperl cannot be relied on to load %Errno"
+ if $ENV{PERL_CORE_MINITEST};
+ # Force the reference to %! to be run time by writing ! as {"!"}
+ skip "This system doesn't understand EINVAL", 1
+ unless exists ${"!"}{EINVAL};
no warnings 'io';
- ok( !open(F,'>',\my $s) && $!{EINVAL}, 'open(reference) raises EINVAL' );
+ ok(!open(F,'>',\my $s) && ${"!"}{EINVAL}, 'open(reference) raises EINVAL');
}
{
'bad layer ":c" failure');
}
+# [perl #28986] "open m" crashes Perl
+
+fresh_perl_like('open m', qr/^Search pattern not terminated at/,
+ { stderr => 1 }, 'open m test');
+
+fresh_perl_is(
+ 'sub f { open(my $fh, "xxx"); $fh = "f"; } f; f;print "ok"',
+ 'ok', { stderr => 1 },
+ '#29102: Crash on assignment to lexical filehandle');
+
+# [perl #31767] Using $1 as a filehandle via open $1, "file" doesn't raise
+# an exception
+
+eval { open $99, "foo" };
+like($@, qr/Modification of a read-only value attempted/, "readonly fh");