Estoy trabajando en un script de Perl. ¿Cómo puedo pasarle los parámetros de la línea de comando?¿Cómo puedo pasar argumentos de línea de comandos a un programa Perl?
Ejemplo:
script.pl "string1" "string2"
Estoy trabajando en un script de Perl. ¿Cómo puedo pasarle los parámetros de la línea de comando?¿Cómo puedo pasar argumentos de línea de comandos a un programa Perl?
Ejemplo:
script.pl "string1" "string2"
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 comandos. $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 al @ARGV
.
$ ARGV [0] es el primer argumento; perl cuenta desde 0, y el nombre del programa está en $ 0 no @ARGV. – derobert
a pesar de la confusión $ ARGV [0] .. este es el tipo de respuesta que espero encontrar, cuando busco SO, gracias y +1 de mi parte. – lexu
variable $ ARGV es lo que usaré entonces. Gracias. – lamcro
Se pasa en al igual que lo está pensando, y en su escritura, que los reciba de la matriz @ARGV
. De esta manera:
my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";
foreach my $argnum (0 .. $#ARGV) {
print "$ARGV[$argnum]\n";
}
De here.
También vale la pena señalar que en algunos lenguajes de programación, el primer argumento (0) es el comando o la secuencia de comandos en sí ... aunque no en perl, por supuesto. – danieltalsky
En lugar de '$ # ARGV + 1' también podría haber dicho' @ ARGV' –
simplemente use 'ARGV [0]' o '$ argv [1]' si está buscando un argumento particular. – Manoj
foreach my $arg (@ARGV) {
print $arg, "\n";
}
imprimirá cada argumento.
Si no utiliza getopts, así es como recomendaría recorrer de forma no destructiva una lista de argumentos. Basado en http://www.perlmeme.org/howtos/syntax/foreach.html parece que la sintaxis es correcta; para una advertencia, consulte la sección, _Side-effects: la variable de control es un alias del elemento de lista_ – jaredor
Si los argumentos son los nombres de archivo para ser leídos desde, utilice el diamante (<>) del operador para llegar a su contenido:
while (my $line = <>) {
process_line($line);
}
Si los argumentos son opciones/interruptores, utilizar Getopt :: Std o Getopt :: Long, como ya se mostró en slavy13.myopenid.com.
En la remota posibilidad de que son algo más, se puede acceder a ellos, ya sea caminando a través de @ARGV explícita o con el comando shift
:
while (my $arg = shift) {
print "Found argument $arg\n";
}
(Tenga en cuenta que haciendo esto con shift
sólo funcionará si se encuentra fuera de todos los sub
s. Dentro de un sub
, se recuperará la lista de argumentos pasados a la sub
en lugar de los aprobados para el programa.)
Si sólo quieres algunos valores, sólo puede utilizar el @ARGV formación. Pero si busca algo más poderoso para hacer algún procesamiento de opciones de línea de comandos, debe usar Getopt::Long.
Como alternativa, una forma más atractiva perlish .....
my ($src, $dest) = @ARGV;
"supone" se pasan dos valores. El código adicional puede verificar que la suposición es segura.
No estoy seguro de cómo esta es la información nueva, pero decidí contra un voto negativo, ya que eres nuevo. –
No es más sexy. Todos los ** argumentos están disponibles a través de '@ ARGV' sin ninguna acción suya ** al igual que C/C++ los suministra a través de argv/argc –
Sin embargo, otro opciones es usar Perl -s, por ejemplo:
#!/usr/bin/perl -s
print "value of -x: $x\n";
print "value of -name: $name\n";
A continuación, llame así:
% ./myprog -x -name=Jeff
value of -x: 1
value of -name: Jeff
O ver the original article para más detalles:
¡Muy bueno y sencillo! –
Puede acceder 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
¿Y cómo se usa? –
revise el comentario actualizado, solo tiene que pasar del espacio de línea de comando separado – pkm
my $output_file;
if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i"))
{
$output_file= chomp($ARGV[1]) ;
}
Proporcione más detalles sobre su código –
las que Shell utiliza? – reinierpost
Bueno, en primer lugar, vas a necesitar que sea './Script.pl' o una gran cantidad que no pasará en tiempo de ejecución. –