línea de comando perl equivalente a php -E

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

imprimirá el número de líneas en 'algún archivo' (no es que realmente haría esto).

Estoy buscando emular el modificador -E en un comando de perl.

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

¿Es posible?

preguntado el 01 de febrero de 12 a las 14:02

3 Respuestas

TIMTOWTDI

Puede utilizar el Beso esquimal operador:

perl -nwE '}{ say $.' somefile 

Este operador es menos mágico de lo que uno piensa, como se ve si analizamos la frase de una sola línea:

$ 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

Simplemente agrega un conjunto adicional de llaves, haciendo que el siguiente código termine fuera del ciclo while implícito.

O puede verificar el final del archivo.

perl -nwE 'eof and say $.' somefile

Con varios archivos, se imprime una suma acumulativa para cada uno de ellos.

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

Puede cerrar el identificador del archivo para obtener un recuento no acumulativo:

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

contestado el 23 de mayo de 17 a las 15:05

@Zaid Es un buen truco, gracias por compartirlo. Me acabo de dar cuenta de que en realidad no funcionará con el -p cambiar, como dice en la pregunta a la que me vinculé, solo -n. Con -p Se convertirá while (<>) { (); } { code } continue { print }. - TLP

Puede utilizar una END { ... } bloque para agregar código que debe ejecutarse después del ciclo:

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

También puede ponerlo fácilmente en su propio -e argumento, si lo quieres más separado:

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

Ver también:

Respondido 01 Feb 12, 18:02

Eres el único que entendió la pregunta. Gracias. - Charlie Frank

Esto debería ser lo que estás buscando:

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

Respondido 01 Feb 12, 18:02

Ahh, eso es todo. Gracias. Gracias por la '-l' también. Yo tampoco sabía nada de eso. - Charlie Frank

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.