perl命令行相当于php -E

时间:2012-02-01 14:19:43

标签: perl command-line

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

将打印'somefile'中的行数(不是我实际上会这样做)。

我想在perl命令中模拟-E开关。

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

有可能吗?

3 个答案:

答案 0 :(得分:10)

TIMTOWTDI

您可以使用Eskimo Kiss运算符:

perl -nwE '}{ say $.' somefile 

这个算子不像人们想象的那么神奇,如果我们去掉单行的话就会看到:

$ 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

它只是添加了一组额外的花括号,使得以下代码在隐式while循环之外结束。

或者您可以检查文件的结尾。

perl -nwE 'eof and say $.' somefile

对于多个文件,您将获得每个文件的累计总和。

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

您可以关闭文件句柄以获取非累积计数:

perl -nwE 'if (eof) { say $.; close ARGV }' somefile somefile somefile
10
10
10

答案 1 :(得分:6)

这应该是你要找的东西:

perl -nle 'END { print $. }'  notes.txt

答案 2 :(得分:6)

您可以使用END { ... }块添加应在循环后执行的代码:

perl -ne '$count++; END { print "$count\n"; }' somefile

如果你想让它更加分离,你也可以轻松地将它放在自己的-e参数中:

perl -ne '$count++;' -e 'END { print "$count\n"; }' somefile

另见: