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