@INC = '../lib';
}
-require "./test.pl";
+BEGIN { require "./test.pl"; }
-plan(tests => 21);
+plan(tests => 23);
use File::Spec;
open(TRY, '>Io_argv1.tmp') || (die "Can't open temp file: $!");
print TRY "a line\n";
-close TRY;
+close TRY or die "Could not close: $!";
$x = runperl(
prog => 'while (<>) { print $., $_; }',
is($x, "foo\n", ' from just STDIN');
}
+{
+ # 5.10 stopped autovivifying scalars in globs leading to a
+ # segfault when $ARGV is written to.
+ runperl( prog => 'eof()', stdin => "nothing\n" );
+ is( 0+$?, 0, q(eof() doesn't segfault) );
+}
+
@ARGV = ('Io_argv1.tmp', 'Io_argv1.tmp', $devnull, 'Io_argv1.tmp');
while (<>) {
$y .= $. . $_;
open(TRY, '>Io_argv1.tmp') or die "Can't open temp file: $!";
-close TRY;
+close TRY or die "Could not close: $!";
open(TRY, '>Io_argv2.tmp') or die "Can't open temp file: $!";
-close TRY;
+close TRY or die "Could not close: $!";
@ARGV = ('Io_argv1.tmp', 'Io_argv2.tmp');
$^I = '_bak'; # not .bak which confuses VMS
$/ = undef;
-my $i = 6;
+my $i = 7;
while (<>) {
s/^/ok $i\n/;
++$i;
print while <TRY>;
open(TRY, '<Io_argv2.tmp') or die "Can't open temp file: $!";
print while <TRY>;
-close TRY;
+close TRY or die "Could not close: $!";
undef $^I;
ok( eof TRY );
-ok( eof NEVEROPENED, 'eof() true on unopened filehandle' );
+{
+ no warnings 'once';
+ ok( eof NEVEROPENED, 'eof() true on unopened filehandle' );
+}
open STDIN, 'Io_argv1.tmp' or die $!;
@ARGV = ();
ok( !eof(), 'STDIN has something' );
-is( <>, "ok 6\n" );
+is( <>, "ok 7\n" );
open STDIN, $devnull or die $!;
@ARGV = ();
{
local $/;
- open F, 'Io_argv1.tmp' or die;
+ open F, 'Io_argv1.tmp' or die "Could not open Io_argv1.tmp: $!";
<F>; # set $. = 1
is( <F>, undef );
open F, $devnull or die; # restart cycle again
ok( defined(<F>) );
is( <F>, undef );
- close F;
+ close F or die "Could not close: $!";
}
-END { unlink 'Io_argv1.tmp', 'Io_argv1.tmp_bak', 'Io_argv2.tmp', 'Io_argv2.tmp_bak' }
+# This used to dump core
+fresh_perl_is( <<'**PROG**', "foobar", {}, "ARGV aliasing and eof()" );
+open OUT, ">Io_argv3.tmp" or die "Can't open temp file: $!";
+print OUT "foo";
+close OUT;
+open IN, "Io_argv3.tmp" or die "Can't open temp file: $!";
+*ARGV = *IN;
+while (<>) {
+ print;
+ print "bar" if eof();
+}
+close IN;
+unlink "Io_argv3.tmp";
+**PROG**
+
+END {
+ 1 while unlink 'Io_argv1.tmp', 'Io_argv1.tmp_bak',
+ 'Io_argv2.tmp', 'Io_argv2.tmp_bak', 'Io_argv3.tmp';
+}