Respuestas:
Depende de lo que quieras hacer. Si desea usar los dos argumentos como archivos de entrada, puede pasarlos y luego usarlos <>
para leer su contenido.
Si tienen un significado diferente, puede usarlos GetOpt::Std
y GetOpt::Long
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 la 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 @ARGV
.
Contains the name of the current file when reading from <> .
Los pasa 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";
}
A partir de aquí .
$#ARGV + 1
usted también podría haber dicho@ARGV
ARGV[0]
o $argv[1]
si está buscando un argumento particular.
foreach my $arg (@ARGV) {
print $arg, "\n";
}
imprimirá cada argumento.
Alternativamente, una manera más sexy y placentera .....
my ($src, $dest) = @ARGV;
"Asume" se pasan dos valores. Un código adicional puede verificar que la suposición sea segura.
@ARGV
sin ninguna acción suya, al igual que C / C ++ los proporciona a través de argv / argc
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 de diamante (<>) para obtener su contenido:
while (my $line = <>) {
process_line($line);
}
Si los argumentos son opciones / modificadores, use GetOpt :: Std o GetOpt :: Long, como ya se muestra en slavy13.myopenid.com.
En el caso de que sean algo más, puede acceder a ellos ya sea caminando explícitamente a través de @ARGV o con el shift
comando:
while (my $arg = shift) {
print "Found argument $arg\n";
}
(Tenga en cuenta que hacer esto con shift
solo funcionará si está fuera de todo sub
s. Dentro de a sub
, recuperará la lista de argumentos pasados al programa en sub
lugar de los pasados al programa).
my $output_file;
if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i"))
{
$output_file= chomp($ARGV[1]) ;
}
Si solo desea algunos valores, puede usar la matriz @ARGV. Pero si está buscando algo más poderoso para procesar algunas opciones de línea de comandos, debe usar Getopt :: Long .
./script.pl
o pasará mucho tiempo en el tiempo de ejecución.