#! perl use strict; use warnings; use Test::More tests => 21; -d 't' && chdir 't'; my $id = "01-ref"; open(my $f, '>', "$id.tmp") or die("$id.tmp: $!\n"); print { $f } "Hello, World!\n"; close($f); @ARGV = ( "$id.tmp" ); # @ARGV = ( "$id.tmp", "/dev/null" ); # $ARGV will not be set until an IO op (either <> or eof(), not eof) is done. ok(!defined $ARGV, "\$ARGV not set yet"); ok(@ARGV != 0, "\@ARGV pristine"); # Initially, eof is false, $ARGV and @ARGV untouched. ok(eof, "eof at start"); ok(!defined $ARGV, "\$ARGV not set yet"); ok(@ARGV != 0, "\@ARGV pristine"); # Testing eof() will set things going. ok(!eof(), "has next at start"); is($ARGV, "$id.tmp", "\$ARGV"); ok(@ARGV == 0, "\@ARGV exhausted"); my $line = <>; is($line, "Hello, World!\n", "line1"); is($ARGV, "$id.tmp", "\$ARGV"); ok(eof, "eof"); ok(eof(), "no next"); $line = <>; ok(!defined $line, "nothing left"); undef $f; open($f, '>', "$id.tmp") or die("$id.tmp: $!\n"); print { $f } "Hello, World1!\n"; print { $f } "Hello, World2!\n"; print { $f } "Hello, World3!\n"; close($f); @ARGV = ( "$id.tmp" ); $line = <>; is($line, "Hello, World1!\n", "line1"); is($ARGV, "$id.tmp", "\$ARGV"); ok(@ARGV == 0, "\@ARGV exhausted"); ok(!eof, "!eof"); ok(!eof(), "has next"); my @lines = <>; is($lines[0], "Hello, World2!\n", "line2"); is($lines[1], "Hello, World3!\n", "line3"); # NOTE <> is reset, since all lines were read and the EOF was sensed # once, ok(eof, "eof"); # Anything more will restart, and use STDIN as input... unlink( "$id.tmp" );