script pass manejo archivos perl command-line

pass - perl parameters argv



¿Cómo puedo pasar argumentos de línea de comandos a un programa Perl? (9)

Estoy trabajando en un script de Perl. ¿Cómo puedo pasarle los parámetros de la línea de comando?

Ejemplo:

script.pl "string1" "string2"


Alternativamente, una manera perlish más sexy .....

my ($src, $dest) = @ARGV;

"Asume" que se pasan dos valores. El código adicional puede verificar que la suposición es segura.


Depende de lo que quieras hacer. Si desea utilizar los dos argumentos como archivos de entrada, puede pasarlos y luego usar <> para leer sus contenidos.

Si tienen un significado diferente, puede usar GetOpt::Std y GetOpt::Long para procesarlos fácilmente. GetOpt::Std solo admite conmutadores de un solo carácter y GetOpt::Long es mucho más flexible. De GetOpt::Long :

use Getopt::Long; my $data = "file.dat"; my $length = 24; my $verbose; $result = GetOptions ("length=i" => /$length, # numeric "file=s" => /$data, # string "verbose" => /$verbose); # flag

Alternativamente, @ARGV es una variable especial que contiene todos los argumentos de línea de comando. $ARGV[0] es el primero (es decir, "string1" en su caso) y $ARGV[1] es el segundo argumento. No necesita un módulo especial para acceder a @ARGV .


Otra opción más es usar perl -s, por ejemplo:

#!/usr/bin/perl -s print "value of -x: $x/n"; print "value of -name: $name/n";

Entonces llámalo así:

% ./myprog -x -name=Jeff value of -x: 1 value of -name: Jeff

O vea el artículo original para más detalles:


Puede acceder a ellos directamente asignando la variable especial @ARGV a una lista de variables. Así por ejemplo:

( $st, $prod, $ar, $file, $chart, $e, $max, $flag ,$id) = @ARGV;

perl tmp.pl 1 2 3 4 5


Si los argumentos son nombres de archivo para leer, use el operador diamond (<>) para obtener sus contenidos:

while (my $line = <>) { process_line($line); }

Si los argumentos son opciones / modificadores, use GetOpt :: Std o GetOpt :: Long, como ya se mostró en slavy13.myopenid.com.

En caso de que sean otra cosa, puede acceder a ellos caminando a través de @ARGV explícitamente o con el comando shift :

while (my $arg = shift) { print "Found argument $arg/n"; }

(Tenga en cuenta que hacer esto con shift solo funcionará si se encuentra fuera de todos los sub s. Dentro de un sub , recuperará la lista de argumentos pasados ​​al sub lugar de aquellos pasados ​​al programa).


Si solo quieres algunos valores, puedes usar la matriz @ARGV. Pero si busca algo más poderoso para hacer algún procesamiento de opciones de línea de comandos, debe usar GetOpt::Long .


Usted los pasa tal como está pensando, y en su secuencia de comandos, los obtiene de la matriz @ARGV . Al igual que:

my $numArgs = $#ARGV + 1; print "thanks, you gave me $numArgs command-line arguments./n"; foreach my $argnum (0 .. $#ARGV) { print "$ARGV[$argnum]/n"; }

Desde here .


foreach my $arg (@ARGV) { print $arg, "/n"; }

imprimirá cada argumento.


my $output_file; if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i")) { $output_file= chomp($ARGV[1]) ; }