Perl/Getopt
Módulo | Getopt::Long |
---|---|
Versión | 2.38 |
Uso | Programas de consola |
Propósito | Manipulación de parámetros de llamada a un programa. |
Sumario
Referencia rápida
Cuando con el parámetro se incluye un valor debemos emplear
- el signo igual (=) si es obligatorio
- el signo dos puntos (:) si es opcional
y según el tipo de valor añadir
- s para textos
- i para números enteros
- f para números con decimales
Ejemplo:
Para este tipo de parámetro | se debe emplear esta definición |
---|---|
--nombre_obligatorio victor | 'nombre_obligatorio=s' => \$nombre |
--alias_opcional meloncete | 'alias_opcional:s' => \$alias |
--edad 42 | 'edad=i' => \$edad |
--peso 78.6 | 'peso=f' => \$peso |
Cuando un parámetro acepta valores múltiples se debe añadir
- Una arroba (@) cuando queremos guardarlo en una lista sencilla
- Un porcentaje (%) cuando existen pares variable = valor y queremos que se guarden en una lista indexada.
Para este tipo de parámetro | se debe emplear esta definición |
---|---|
--imagen una.jpg --imagen dos.jpg |
|
--atrib color=negro --atrib talla=marron |
|
Ejemplos de uso
Programa con un parámetro conmutador
En este caso el parámetro $verbose se controla desde un par de parámetros en línea:
use Getopt::Long;
my $verbose = 0;
GetOptions( 'V|verbose' => \$verbose,
'quiet' => sub { $verbose = 0; },
) or die ;
Programa con ayuda incorporada
En este caso empleamos el módulo Pod::Usage para generar un texto de ayuda, sencillo si los parámetros en línea tienen algún error (GetOptions retorna con un valor cero) o más completo si lo solicita activando el parámetro de ayuda (--help);
use Getopt::Long;
use Pod::Usage;
my $help = 0;
GetOptions( 'help:s' => \$help )
or pod2usage ( 1 );
pod2usage( 2 ) if $help;
Configuración
Para cambiar el comportamiento del módulo existe una función global llamada Getopt::Long::Configure que acepta una lista de nombres de opciones de configuración que pueden estar prefijadas con la partícula no_ para desactivarlas. Dicha función puede llamarse cuantas veces sea preciso para activar o desactivar posibilidades.
Algunos de los parámetros importantes son:
Parámetro | Valor predeterminado | Uso |
---|---|---|
debug | Desactivado | Mensajes de depuración y trazas varias |
ignore_case | Activado | No distinguir mayúsculas de minúsculas en los nombres largos de parámetros |
auto_version | Desactivado | Activa soporte para mostrar la versión cuando encuentra el parámetro --version. |
Depuración
Para activar la depuración se puede emplear la función de configuración con el parámetro debug, en cuyo caso el módulo mostrará un montón de información sobre cómo recibe los parámetros y qué entiende cuando lo hace:
use Getopt::Long;
Getopt::Long::Configure( q(debug) );
if (Getopt::Long( ... )) {
$ perl mblp -d im5 Getopt::Long 2.38 ($Revision: 2.76 $) called from package "main". argv: (-d im5) autoabbrev=1,bundling=0,getopt_compat=1,gnu_compat=0,order=1, ignorecase=0,requested_version=0,passthrough=0,genprefix="(--|-|\+)",longprefix="(--)". => link "d" to SCALAR(0x2144998) => link "p" to SCALAR(0x21449e0) => link "l" to SCALAR(0x2144878) => link "t" to SCALAR(0x2144a28) => link "f" to SCALAR(0x2144a70) => link "D" to SCALAR(0x2144938) => $opctl{l} = ARRAY(0x2734420) ["i","l","<undef>",$,1,1] $opctl{p} = ARRAY(0x257bad0) ["s","p","<undef>",$,1,1] $opctl{D} = ARRAY(0x2733ef8) ["","D","<undef>",$,,] $opctl{d} = ARRAY(0x2725f30) ["s","d","<undef>",$,1,1] $opctl{f} = ARRAY(0x27273f8) ["i","f","<undef>",$,1,1] $opctl{t} = ARRAY(0x27269f0) ["s","t","<undef>",$,1,1] => arg "-d" => find "-d" => split "-"+"d" => 1 hits (d) with "d" out of 6 => found ["s","d","<undef>",$,1,1] for "d" => cname for "d" is "d" => ref($L{d}) -> SCALAR => $$L{d} = "im5"
Recetario
Parámetros automáticos
Algunos parámetros de llamada tienen el mismo tratamiento una y otra vez y, afortunadamente, éste módulo tiene algún soporte para ello. Para activar dicha funcionalidad es necesario emplear la configuración del programa con los parámetros adecuados.
- Versión del programa
- Con la opción auto_version activa y el parámetro --version recibido, el módulo finaliza la ejecución del programa con un valor de salida 0 tras mostrar la información solicitada. La versión del programa precisa que la variable
$main::VERSION
exista y sea accesible desde la librería.
$ mblp --version mblp version 2011-03-24 (Getopt::Long::GetOptions version 2.38; Perl version 5.10.1)
Parámetros negables
Cuando se emplean parámetros booleanos tenemos la opción de definir que reciben un parámetro numérico y luego comprobar por código si éste es verdadero o falso o algún otro valor que así nos lo indique como en el ejemplo:
my $duplex_mode = 0;
GetOptions( "duplex=i" => \$duplex_mode );
$ myprogram --duplex=1
o emplear la posibilidad de definir este parámetro como negable de manera que cuando se emplee el prefijo no con el nombre se almacene automáticamente un valor falso en la variable:
my $duplex_mode = 0;
my $quiet = 1;
GetOptions( "duplex!" => \$duplex_mode, "verbose!" => \$quiet );
$ myprogram --noduplex --verbose $ myprograma --duplex --noverbose