Parámetros Línea de Comandos. Perl
SOLUCIONARIO
Parámetros Línea de Comandos. Perl
2025-09-21
Por
Occam's Razor

#!/usr/bin/perl

$n_par = $#ARGV + 1;
print "$n_par Parameters\n";

for ($i = 0; $i < $n_par; $i++)
{
    print "Parameter $i : " . [$i] . "\n"
}

if ($n_par != 1)
{
    print "Just one parameter please\n";
    exit -1;
}

print "Hello " . [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 array ARGV que contiene los parámetros, el script dispone de las variables de entorno en el array ENV que 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:

  • --help o -h que mostrará el mensaje Ayuda 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.
  • --output o -o que acepta un parámetro de tipo cadena (s)
  • --input o -i que 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 s para recibir cadenas de caracteres como argumentos, Perl soporta los tipos i para valores enteros, o también enteros, pero nos permite introducir valores hexadecimales (0xAA), octales (0123 o 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
  • #ARGV es un array de cadenas
  • $0 es una variable especial que contiene el nombre del programa. Esta variable se puede modificar
  • El módulo Getopt::Long permite procesar los argumentos de la línea de comandos de forma fácil y sencilla.

SOBRE Occam's Razor
Somos una revista libre que intenta explicar de forma sencilla conceptos tecnológicos y científicos de los que no podemos escapar. Al final, todo es más fácil de lo que parece!

 
Tu publicidad aquí :)