Perl командной строки эквивалент php -E - PullRequest
2 голосов
/ 01 февраля 2012
php -R '$count++' -E 'print "$count\n";' < somefile

напечатает количество строк в 'somefile' (не то, чтобы я действительно это делал).

Я хочу эмулировать ключ -E в команде perl.

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

Возможно ли это?

Ответы [ 3 ]

10 голосов
/ 01 февраля 2012

TIMTOWTDI

Вы можете использовать оператор Eskimo Kiss :

perl -nwE '}{ say $.' somefile 

Этот оператор менее волшебен, чем кажется, как видно, если мы отбросим одно-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

Он просто привязывает дополнительный набор фигурных скобок, в результате чего следующий код оказывается за пределами неявного цикла 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
6 голосов
/ 01 февраля 2012

Вы можете использовать блок END { ... }, чтобы добавить код, который должен выполняться после цикла:

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

Вы также можете легко поместить его в свой собственный аргумент -e, если вы хотите большеразделены:

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

См. также:

6 голосов
/ 01 февраля 2012

Это должно быть то, что вы ищете:

perl -nle 'END { print $. }'  notes.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...