TIMTOWTDI
Vous pouvez utiliser l'opérateur Eskimo Kiss:
perl -nwE '}{ say $.' somefile
Cet opérateur est moins magique que l'on pense, comme on le voit si nous Deparse le 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
Il pointe simplement sur un ensemble supplémentaire d'accolades, ce qui fait que le code suivant se termine en dehors de la boucle while implicite.
Ou vous pouvez vérifier la fin du fichier.
perl -nwE 'eof and say $.' somefile
Avec plusieurs fichiers, vous obtenez une somme cumulée imprimée pour chacun d'entre eux.
perl -nwE 'eof and say $.' somefile somefile somefile
10
20
30
Vous pouvez fermer le handle de fichier pour obtenir un nombre non cumulatif:
perl -nwE 'if (eof) { say $.; close ARGV }' somefile somefile somefile
10
10
10
Vous êtes le seul à avoir compris la question. Merci. –