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.
In reply to Re: Re: Re: Count the number of lines in a file
by jmcnamara
in thread Count the number of lines in a file
by jmcnamara
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |