Re: [Hampshire] On-line Banking (Not entirely O.T.)

Top Page

Reply to this message
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.)

There is more.