[Omaha.pm] bad perl - need help - dispatch table

Jay Hannah jay at jays.net
Thu Aug 26 18:01:06 CDT 2004


On Aug 26, 2004, at 11:01 AM, Miller, Scott L (Omaha Networks) wrote:
> Otherwise the (<>) will either ignore <STDIN> because there are 
> filename
> on ARGV, or ignore the filenames because it's got stuff to process on
> <STDIN>.  It's been too long since I ran into the problem to remember
> which...

If does one or the other, depending.  -grin-

perldoc perlop:

        The null filehandle <> is special: it can be used to emulate the 
behav-
        ior 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

            while (<>) {
                ...                     # code for each line
            }

        is equivalent to the following Perl-like pseudo code:

            unshift(@ARGV, '-') unless @ARGV;
            while ($ARGV = shift) {
                open(ARGV, $ARGV);
                while (<ARGV>) {
                    ...         # code for each line
                }
            }

        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.)

        You can modify @ARGV before the first <> as long as the array 
ends up
        containing the list of filenames you really want.  Line numbers 
($.)
        continue as though the input were one big happy file.  See the 
example
        in "eof" in perlfunc for how to reset line numbers on each file.

I've always wanted what <> does -- files *or* wait for STDIN. I suppose 
you could kludge up something to do files, then wait for STDIN...? 
You'd always *have to* have STDIN, though...

j



More information about the Omaha-pm mailing list