#!/usr/bin/perl
$n_par = $#ARGV + 1;
print "$n_par Parameters\n";
for ($i = 0; $i < $n_par; $i++)
{
print "Parameter $i : " . $ARGV[$i] . "\n"
}
if ($n_par != 1)
{
print "Just one parameter please\n";
exit -1;
}
print "Hello " . $ARGV[0] . "\n";Perl expone los parámetros que pasamos en la línea de comandos como
un array llamado @ARGV. Puesto que Perl nos permite
determinar el tamaño de cualquier array fácilmente, no necesitamos más
información para poder acceder a todos los parámetros de la línea de
comandos.
SOY NOVATO
Una forma rápida y sencilla de obtener el tamaño de un array es usando la forma
$#ARRAY.
A diferencia de C, el array @ARV no almacena en la
posición cero, el nombre del programa/script que estamos ejecutando,
sino el primer parámetro que se le pasa al script.
Perl nos proporciona el nombre del programa que ejecutamos en las
variables especiales $0 y que puedes cambiar el nombre del
proceso que aparece con ps reasignando esta variable?. Esta
variable también se puede utilizar para implementar scripts multicall en
Perl
SABÍAS QUE
Además del arrayARGVque contiene los parámetros, el script dispone de las variables de entorno en el arrayENVque está igualmente disponible.
En general, la potencia expresiva de Perl, nos permite procesar los
comandos muy fácilmente. Sin embargo, al igual que ocurre con C, Perl
ofrece módulos con los que hacer de este proceso un juego de niños. Uno
de los módulos más conocidos para ello es Getopt::Long que
es equivalente a las funciones que vimos para C, pero procesando
parámetros largos. C también dispone de esta funcionalidad, pero para
usar es necesario declarar una estructura más compleja y por eso no lo
mostramos en la entrega
sobre lenguaje C.
Un ejemplo del uso del módulo Getopt::Long se muestra a
continuación:
#!/usr/bin/env perl
use Getopt::Long;
my $ofile = "output.txt";
my $ifile = "input.txt";
$result = GetOptions ("output=s" => \$ofile,
"input=s" => \$ifile,
"help" => sub {print "Ayuda para el programa\n"; exit})
|| die "parametros incorrectos";
print "input : $ifile output : $ofile\n";El código anterior procesa tres flags:
--helpo-hque mostrará el mensajeAyuda para este programa. Esta función declara un función anónima para mostrar el mensaje, pero podemos poner el mensaje en una función normal o usar el sistema de documentación POD para que Perl genere un mensaje automáticamente.--outputo-oque acepta un parámetro de tipo cadena (s)--inputo-ique acepta un parámetro de tipo cadena (s)
Como podéis ver, para los argumentos con parámetros pasamos a la función una referencia a la variable que queremos que se actualice en caso de que se pase el parámetro.
SOY NOVATO
Además del tipo
spara recibir cadenas de caracteres como argumentos, Perl soporta los tiposipara valores enteros,otambién enteros, pero nos permite introducir valores hexadecimales (0xAA), octales (0123o binarios (0b10101)
La función GetOptions retorna TRUE si los
parámetros se procesaron con éxito o FALSE en caso de que
se produjera algún error.
El módulo Getopt::Long es muy potente y ofrece muchas
más opciones de las que os hemos hablado aquí. Consultad la documentación oficial del
paquete para más detalles.
Resumen
- Perl recibe los argumentos de la línea de comandos en el array
#ARGV #ARGVes un array de cadenas$0es una variable especial que contiene el nombre del programa. Esta variable se puede modificar- El módulo
Getopt::Longpermite procesar los argumentos de la línea de comandos de forma fácil y sencilla.
■
