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:
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]) ;
}