Author: Victor Churchill Date: To: Hampshire LUG Discussion List Subject: Re: [Hampshire] On-line Banking (Not entirely O.T.)
> Actually, I have no idea what the semantics of <> are. I don't even know what you call that syntactically - anonymous filehandle constant? Can you point me to documentation about the semantics of that thing?
Its a special case of a <filehandle>.
perldoc perlop
If a <FILEHANDLE> is used in a context that is looking for a list, a
list comprising all input lines is returned, one line per list
element. It's easy to grow to a rather large data space this way, so
use with care.
<FILEHANDLE> may also be spelled readline(*FILEHANDLE). See readline.
The null filehandle <> is special: it can be used to emulate the
behavior of sed and awk. Input from <> comes either from standard
input, or from each file listed on the command line. Here's how it
works: the first time <> is evaluated, the @ARGV array is checked, and
if it is empty, $ARGV[0] is set to "-", which when opened gives you
standard input. The @ARGV array is then processed as a list of
filenames. The loop
1. while (<>) {
2. ... # code for each line
3. }
is equivalent to the following Perl-like pseudo code:
1. unshift(@ARGV, '-') unless @ARGV;
2. while ($ARGV = shift) {
3. open(ARGV, $ARGV);
4. while (<ARGV>) {
5. ... # code for each line
6. }
7. }
except that it isn't so cumbersome to say, and will actually work. It
really does shift the @ARGV array and put the current filename into
the $ARGV variable. It also uses filehandle ARGV internally--<> is
just a synonym for <ARGV>, which is magical. (The pseudo code above
doesn't work because it treats <ARGV> as non-magical.)