in reply to Re: Deleting first and last lines of a text file
in thread Deleting first and last TWO(2) lines of a text file

Hi Where are we specifying the filename here?. Thanks VJ
  • Comment on Re^2: Deleting first and last lines of a text file

Replies are listed 'Best First'.
Re^3: Deleting first and last lines of a text file
by AppleFritter (Vicar) on May 16, 2014 at 10:52 UTC

    You can either have the script read from STDIN, or supply a filename as an argument, i.e.:

    $ perl script.pl data.dat

    or

    $ cat data.dat | perl script.pl

    Such is the magic of the angle bracket operator when used with a null filehandle. Quoting perlop:

    The null filehandle <> is special: it can be used to emulate the behavior of sed and awk, and any other Unix filter program that takes a list of filenames, doing the same to each line of input from all of them. 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.)

    Hope this helps!