wwf@doe.carleton.ca (W. Walter Fergusson) (10/15/90)
I was having problems with a perl script reading in all the files when
only one was explicitly read in. Here is a small script that mimics
the behavior.
#!/usr/local/bin/perl
#
# taken from perl info page. (Thank you Jeff!)
unshift(@ARGV, '-') if $#ARGV < $[;
$ARGV = shift;
open(ARGV, $ARGV);
print ("processing file ", $ARGV, ".\n");
while (<ARGV>) {
print;
}
This script will read from _ALL_ the files on the command line! In fact
the script will work without the first three lines.
To me this suggests that the construct <ARGV> is identical to <> (at least
in a while statement). The info page (derived from the man page) mentions
all the behind the sceen things that occur when <> is used but it implies
that the program above will not read from all files.
From the info page:
-----------------------------------------------------
... The loop
while (<>) {
... # code for each line
}
is equivalent to
unshift(@ARGV, '-') if $#ARGV < $[;
while ($ARGV = shift) {
open(ARGV, $ARGV);
while (<ARGV>) {
... # code for each line
}
}
-----------------------------------------------------
In fact the "while ($ARGV = shift) {" is completely unnecessary.
So if (<> == <ARGV>) then the documentation is confusing (or wrong), or
else there is a bug in the perl executable.
Particulars:
Running Perl 3.0@28, on Sun3s and Sun4s; SunOS 4.0.3.
Thanks for any help or clarification,
Walter Fergusson.lwall@jpl-devvax.JPL.NASA.GOV (Larry Wall) (10/16/90)
Yes, <> and <ARGV> are the same thing. The equivalent code given in the manual page isn't real Perl code, but a very Perlish pseudo-code in which ARGV doesn't have a special meaning. Larry