Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

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

by jmcnamara (Monsignor)
on Aug 15, 2002 at 15:36 UTC ( [id://190432]=note: print w/replies, xml ) Need Help??


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


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.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others cooling their heels in the Monastery: (4)
As of 2024-04-18 05:33 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found