He visto muchas formas de ejecutar código o scripts Perl, con diferentes banderas. Sin embargo, cuando trato de buscar en Google lo que significa cada bandera, obtengo resultados principalmente en sitios de Perl genéricos y no se encuentra información específica sobre las banderas o su uso.
A continuación se muestran las banderas que encuentro con más frecuencia, y no tengo ni idea de lo que significan:
- perl -pe
- perl -pi
- perl -p
- perl -w
- perl -d
- perl -i
- perl -t
Estaré muy agradecido si me dice qué significa cada uno de ellos y algunos casos de uso para ellos, o al menos me dice una forma de averiguar su significado.
perl
command-line
flags
Tudor Constantin
fuente
fuente
perldoc perlrun
tiene una lista de todas las opciones de línea de comandos que acepta Perl.Respuestas:
Sí, Google es notoriamente difícil para levantar la puntuacion y, por desgracia, Perl no parecen ser en su mayoría compuesta de puntuacion :-)
Los interruptores de la línea de comando se detallan en perlrun . (disponible desde la línea de comando llamando
perldoc perlrun
)Entrando en las opciones brevemente, una por una:
fuente
perldoc perlrun
. He eliminado mi respuesta. :-)-w
en general, debe evitarse, ya que habilita advertencias para todo el código, incluidos los módulos CPAN que no se escribieron teniendo en cuenta las advertencias. Los resultados son en general bastante ruidosos, además de bastante inútiles.-w
generalmente se evita, pero debe reemplazarse conuse warnings
su propio código.use warnings
en mi propio código, pero -w tiene un uso - ayuda a eliminar los módulos CPAN mal escritos. :-)-i
toma una extensión para la copia de seguridad.-e
toma un comando de perl. En-0ep
le está diciendo a Perl que 'p' es un comando perl en lugar de un argumento. Eso no funcionará nada bien.La
-p
bandera básicamente ejecuta el script con-e
le permite pasar un script aSTDIN
-i
indica al intérprete que todos los datos transmitidosSTDIN
por el script en ejecución deben realizarse en el lugar.-w
es lo mismo queuse warnings;
, pero en un ámbito global en lugar de local-d
ejecuta el depurador de Perlfuente
-w
no es exactamente lo mismo queuse warnings
, este último tiene el alcance del archivo localOtros han mencionado perlrun. Si usa B :: Deparse, puede ver lo que significa (para la mayoría de las cosas):
1 está representado por '???', porque está optimizado.
-i establece $ ^ I, como
Pero recuerde, <ARGV> usa 2 argumentos abiertos, así que no tenga nombres de archivo que comiencen con
> <
o comiencen / terminen con|
.fuente
También hay una bandera importante
-n
que no se menciona en la lista.-n
funciona igual que-p
, solo que no imprime$_
por defecto. Esto puede resultar muy útil para filtrar archivos de texto.De esta manera, Perl puede reemplazar
grep | sed
en una sola línea.Por ejemplo:
perl -ne 'print "$1\n" if /Messages read: (\d+)/' <my_input.txt
Imprimirá cada valor entero encontrado después de "Mensajes leídos:", y nada más.
fuente
print $1
es lo mismo queprint
(print $_
).echo abc | perl -nw -e "print if (1)"
imprimiráabc
. No necesita la$1
referencia.