Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

perl command line equivalent of php -E

php -R '$count++' -E 'print "$count\n";' < somefile

will print the number of lines in 'somefile' (not that I would actually do this).

I'm looking to emulate the -E switch in a perl command.

perl -ne '$count++' -???? 'print "$count\n"' somefile

Is it possible?

like image 275
Charlie Frank Avatar asked May 27 '26 14:05

Charlie Frank


1 Answers

TIMTOWTDI

You can use the Eskimo Kiss operator:

perl -nwE '}{ say $.' somefile 

This operator is less magical than one thinks, as seen if we deparse the one-liner:

$ perl -MO=Deparse -nwE '}{say $.' somefile 
BEGIN { $^W = 1; }
BEGIN {
    $^H{'feature_unicode'} = q(1);
    $^H{'feature_say'} = q(1);
    $^H{'feature_state'} = q(1);
    $^H{'feature_switch'} = q(1);
}
LINE: while (defined($_ = <ARGV>)) {
    ();
}
{
    say $.;
}
-e syntax OK

It simply tacks on an extra set of curly braces, making the following code wind up outside the implicit while loop.

Or you can check for end of file.

perl -nwE 'eof and say $.' somefile

With multiple files, you get a cumulative sum printed for each of them.

perl -nwE 'eof and say $.' somefile somefile somefile
10
20
30

You can close the file handle to get a non-cumulative count:

perl -nwE 'if (eof) { say $.; close ARGV }' somefile somefile somefile
10
10
10
like image 127
TLP Avatar answered May 30 '26 07:05

TLP



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!