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 perlruntiene 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:
-p: coloca un bucle de impresión alrededor de su comando para que actúe en cada línea de entrada estándar. Se usa principalmente para que Perl pueda vencer pantalones off awk en términos de potencia Y simplicidad :-) -n: coloca un bucle sin impresión alrededor de su comando. -e: le permite proporcionar el programa como un argumento en lugar de que en un archivo. No quieres tener que crear un script archivo para cada pequeño texto de una sola línea de Perl. -i: modifica su archivo de entrada en el lugar (haciendo una copia de seguridad del original). Útil para modificar archivos sin la {copia, borrar-original, renombrar} proceso. -w: Activa algunas advertencias. Cualquier buen codificador de Perl usará esto. -d: se ejecuta en el depurador de Perl. Para depurar su código Perl, obviamente. -t: trata cierto código "contaminado" (dudoso) como advertencias (adecuado el modo de contaminación producirá un error en este código dudoso). Acostumbrado a la carne mejorar la seguridad de Perl, especialmente cuando se ejecuta código para otros usuarios, como scripts de setuid o material web.fuente
perldoc perlrun. He eliminado mi respuesta. :-)-wen 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.-wgeneralmente se evita, pero debe reemplazarse conuse warningssu propio código.use warningsen mi propio código, pero -w tiene un uso - ayuda a eliminar los módulos CPAN mal escritos. :-)-itoma una extensión para la copia de seguridad.-etoma un comando de perl. En-0eple está diciendo a Perl que 'p' es un comando perl en lugar de un argumento. Eso no funcionará nada bien.La
-pbandera básicamente ejecuta el script con-ele permite pasar un script aSTDIN-iindica al intérprete que todos los datos transmitidosSTDINpor el script en ejecución deben realizarse en el lugar.-wes lo mismo queuse warnings;, pero en un ámbito global en lugar de local-dejecuta el depurador de Perlfuente
-wno 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
-nque no se menciona en la lista.-nfunciona 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 | seden una sola línea.Por ejemplo:
perl -ne 'print "$1\n" if /Messages read: (\d+)/' <my_input.txtImprimirá cada valor entero encontrado después de "Mensajes leídos:", y nada más.
fuente
print $1es lo mismo queprint(print $_).echo abc | perl -nw -e "print if (1)"imprimiráabc. No necesita la$1referencia.