1#!./perl 2 3BEGIN { 4 chdir 't' if -d 't'; 5 @INC = '../lib'; 6} 7 8require "./test.pl"; 9 10plan(tests => 22); 11 12use File::Spec; 13 14my $devnull = File::Spec->devnull; 15 16open(TRY, '>Io_argv1.tmp') || (die "Can't open temp file: $!"); 17print TRY "a line\n"; 18close TRY or die "Could not close: $!"; 19 20$x = runperl( 21 prog => 'while (<>) { print $., $_; }', 22 args => [ 'Io_argv1.tmp', 'Io_argv1.tmp' ], 23); 24is($x, "1a line\n2a line\n", '<> from two files'); 25 26{ 27 $x = runperl( 28 prog => 'while (<>) { print $_; }', 29 stdin => "foo\n", 30 args => [ 'Io_argv1.tmp', '-' ], 31 ); 32 is($x, "a line\nfoo\n", ' from a file and STDIN'); 33 34 $x = runperl( 35 prog => 'while (<>) { print $_; }', 36 stdin => "foo\n", 37 ); 38 is($x, "foo\n", ' from just STDIN'); 39} 40 41@ARGV = ('Io_argv1.tmp', 'Io_argv1.tmp', $devnull, 'Io_argv1.tmp'); 42while (<>) { 43 $y .= $. . $_; 44 if (eof()) { 45 is($., 3, '$. counts <>'); 46 } 47} 48 49is($y, "1a line\n2a line\n3a line\n", '<> from @ARGV'); 50 51 52open(TRY, '>Io_argv1.tmp') or die "Can't open temp file: $!"; 53close TRY or die "Could not close: $!"; 54open(TRY, '>Io_argv2.tmp') or die "Can't open temp file: $!"; 55close TRY or die "Could not close: $!"; 56@ARGV = ('Io_argv1.tmp', 'Io_argv2.tmp'); 57$^I = '_bak'; # not .bak which confuses VMS 58$/ = undef; 59my $i = 6; 60while (<>) { 61 s/^/ok $i\n/; 62 ++$i; 63 print; 64 next_test(); 65} 66open(TRY, '<Io_argv1.tmp') or die "Can't open temp file: $!"; 67print while <TRY>; 68open(TRY, '<Io_argv2.tmp') or die "Can't open temp file: $!"; 69print while <TRY>; 70close TRY or die "Could not close: $!"; 71undef $^I; 72 73ok( eof TRY ); 74 75ok( eof NEVEROPENED, 'eof() true on unopened filehandle' ); 76 77open STDIN, 'Io_argv1.tmp' or die $!; 78@ARGV = (); 79ok( !eof(), 'STDIN has something' ); 80 81is( <>, "ok 6\n" ); 82 83open STDIN, $devnull or die $!; 84@ARGV = (); 85ok( eof(), 'eof() true with empty @ARGV' ); 86 87@ARGV = ('Io_argv1.tmp'); 88ok( !eof() ); 89 90@ARGV = ($devnull, $devnull); 91ok( !eof() ); 92 93close ARGV or die $!; 94ok( eof(), 'eof() true after closing ARGV' ); 95 96{ 97 local $/; 98 open F, 'Io_argv1.tmp' or die "Could not open Io_argv1.tmp: $!"; 99 <F>; # set $. = 1 100 is( <F>, undef ); 101 102 open F, $devnull or die; 103 ok( defined(<F>) ); 104 105 is( <F>, undef ); 106 is( <F>, undef ); 107 108 open F, $devnull or die; # restart cycle again 109 ok( defined(<F>) ); 110 is( <F>, undef ); 111 close F or die "Could not close: $!"; 112} 113 114# This used to dump core 115fresh_perl_is( <<'**PROG**', "foobar", {}, "ARGV aliasing and eof()" ); 116open OUT, ">Io_argv3.tmp" or die "Can't open temp file: $!"; 117print OUT "foo"; 118close OUT; 119open IN, "Io_argv3.tmp" or die "Can't open temp file: $!"; 120*ARGV = *IN; 121while (<>) { 122 print; 123 print "bar" if eof(); 124} 125close IN; 126unlink "Io_argv3.tmp"; 127**PROG** 128 129END { 130 1 while unlink 'Io_argv1.tmp', 'Io_argv1.tmp_bak', 131 'Io_argv2.tmp', 'Io_argv2.tmp_bak', 'Io_argv3.tmp'; 132} 133