Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: Re: Count the number of lines in a file

by Molt (Chaplain)
on Aug 15, 2002 at 14:45 UTC ( [id://190416]=note: print w/replies, xml ) Need Help??


in reply to Re: Count the number of lines in a file
in thread Count the number of lines in a file

Okay, this hurts my brain.

Any chance of a few pointers as to how this works in order to relieve this brain pain?

  • Comment on Re: Re: Count the number of lines in a file

Replies are listed 'Best First'.
Re: Re: Re: Count the number of lines in a file
by jmcnamara (Monsignor) on Aug 15, 2002 at 15:36 UTC

    Horizontally, Abigail-II's code looks like this:     perl -lpe '}{*_=*.}{' file

    Which is really quite beautiful.

    Anyway, it (ab)uses the way that the -p command line option works. Consider the following output from deparse:

    $ perl -MO=Deparse -lpe '' file LINE: while (defined($_ = <ARGV>)) { chomp $_; } continue { print $_; }

    So for a simple bare -p you get all of that extra and useful code.

    Now if we deparse Abigail-II's code:

    $ perl -MO=Deparse -lpe '}{*_=*.}{' file LINE: while (defined($_ = <ARGV>)) { chomp $_; } { *_ = *.; } { (); } continue { die "-p destination: $!\n" unless print $_; }

    The addition of the extra braces has created a while loop that loops through the file(s), a block with an assignment and a block with an empty statement and a continue. In effect it has disassociated the continue from the while.

    The typeglob assignment *_ = *. has the effect, among other things, of setting $_ = $.. Since the while has already looped through the file(s) $. is now the number of lines in the file(s).

    The last action of the program will be to enter the continue and print $_ so that the number of lines is output. The -l command line option helpfully appends a newline.

    Update: Abigail-II's own explanation is here


    John.

Re: Count the number of lines in a file
by Abigail-II (Bishop) on Aug 15, 2002 at 14:49 UTC
    You could always use the deparser....

    Abigail

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://190416]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (4)
As of 2024-04-25 13:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found