| Basicos::Config - Carga de archivos de configuración y parámetros de llamada |
Basicos::Config - Carga de archivos de configuración y parámetros de llamada
use English;
use Basicos::Config;
use Pod::Usage;
use Data::Dumper;
my %values = eval {
_configure(
file => '/etc/myprogram.conf',
env => 'MYPROGRAMCONF',
perms => 0400,
croak => 0,
merge => 1,
getopt => {
help => undef,
man => sub { pod2usage(2) },
version => sub { print "myprograma - version 14.3.1\n"; }
},
variables => {
host => [ 'host=s', undef, 'server.host', 'localhost' ],
port => [ 'port=i', undef, 'server.port', '33333' ]
},
defaults => {
user => q(root),
}
)
};
if ($EVAL_ERROR) {
die $EVAL_ERROR;
}
else {
# mostramos los valores expresamente indicados
print "Server: " . $values{server};
print "Port: " . $values{port};
print "User: " . $values{user};
# y un volcado de todo junto (incluyendo el archivo de
# configuración)
print Dumper( \%values );
}
=head1 DESCRIPTION
Este módulo proporciona funciones globales para leer archivos de configuración y analizar parámetros de llamada del programa.
Este método intenta rellenar un hash con valores procedentes de varias fuentes, y en un orden concreto. Primero utiliza los parámetros de llamada mediante the Getopt::Long manpage, luego las variables de entorno, prosigue cargando un archivo de configuración con the Config::General manpage y, por último, aplica valores por defecto.
Las opciones son las siguientes:
Ruta de acceso al archivo de configuración.
Nombre de la variable de entorno que contiene el nombre del archivo de configuración.
Máscara de permisos de acceso que debe tener el archivo de configuración. En caso contrario el programa aborta la ejecución.
Si este indicador no está activo, el módulo capturará todas las llamadas a die/croak, de manera que serán necesarias varias comprobaciones más tras la llamada para saber con exactitud qué ha podido fallar (ó, en otras palabras, por qué no están los valores donde deberían :-) El valor predeterminado es uno, lo que deja en manos de esta función la terminación prematura del programa.
Este indicador determina si los valores leídos exclusivamente del archivo de configuración se incluyen en una entrada propia, bajo la clave CONFIG, ó se fusionan con todos los demás para retornar un hash único. El valor predeterminado es cero, i<no fusionar>.
Hash con diferentes valores para afinar la lectura de parámetros de llamada:
Referencia a una función que emite un mensaje de ayuda ó un texto directamente enviado a la salida estándar de errores.
Igual que el anterior pero utilizado en el caso de solicitar más información.
Idem que las anteriores pero aplicado al caso de solicitar la versión del programa.
Crea una variable que recogerá el valor de depuración tanto en la llamada al programa.
Igual que el anterior, pero para el nivel de locuacidad del programa.
Este elemento es automágicamente añadido a las opciones de the Getopt::Long manpage, por lo que no es necesario incluirlo particularmente. Sirve, como su nombre indica, para proporcionar una ruta al archivo de configuración del programa.
Este elemento también se añade a las opciones de the Getopt::Long manpage. Sirve para indicar una ruta a un directorio de plantillas. Su valor predeterminado está formado por /usr/share/NOMBRE_DEL_PROGRAMA/templates.
El nombre del programa se toma de la variable $0 ó del parámetro name si
está definido.
Es de destacar que para las opciones help, man y version, si se
proporciona una referencia a código éste será utilizado llegado el caso, en
lugar de emplear the Pod::Usage manpage automáticamente.
Hash con la definición de las variables que queremos obtener en la llamada a la función.
Cada elemento puede contener una de estas tres cosas:
Este elemento será utilizado sólo como valor por defecto para el hash producido.
En este caso se esperan cuatro elementos con el siguiente orden (si no se desea incluir uno de ellos es necesario incluir un valor nulo):
Definición para the Getopt::Long manpage.
Nombre de la variable de entorno.
Ruta de acceso dentro del archivo de configuración (the Config::General manpage). Ver más abajo la sección correspondiente.
Valor final a almacenar en caso de no encontrar ninguno de los anteriores.
El módulo acepta esta entrada, pero termina tomando los valores del hash y
ordenándolos como en la opción anterior. Las entradas del hash que se tienen
en cuenta son: getopt, env, config y default.
Referencia a un hash con valores predeterminados que se mezclarán con los del archivo de configuración cuando éste es leído. Las claves que aquí aparecen no tienen por qué estar declaradas anteriormente, y la función no las buscará en el entorno ó en los parámetros de llamada.
El módulo utiliza la librería the Config::General manpage para leer el archivo de
configuración, y deja una copia de todo su contenido en la entrada CONFIG
del hash retornado.
Para indicar que una variable debe tomar su valor de una entrada de dicho
fichero se debe utilizar la nomenclatura [seccion.]nombre como en el
siguiente ejemplo:
<server>
host = machine
</server>
localhost => [ undef, undef, "server.host", "localhost" ]
Si se habilita la opción croak en la llamada, el módulo no captura ninguna
de las posibles excepciones que surjan, por lo que pueden acontecer las
siguientes:
Se produce cuando en la definición de una variable el valor de la entrada no es un valor escalar, ni una refernencia a un hash ó a un array.
Esta es una situación que no debería producirse, pero que saltaría cuando
se llama a la función _show_info con un parámetro about que no
corresponde a version, help ó man.
No hay permisos suficientes para leer el archivo de configuración.
El archivo de configuración no tiene los permisos de acceso indicados en la
entrada perms de los parámetros de llamada. Se considera que si esta
entrada existe el riesgo de seguridad es alto, por lo que no se continúa si
los permisos no concuerdan.
Además de esta lista, es conveniente mirar la documentación de the Getopt::Long manpage y the Config::General manpage porque ambos pueden alzar excepciones por varios motivos.
There are no known bugs in this module.
Please report problems to authors.
Víctor Moral <victor@taquiones.net>, Angel Ortega <angel@triptico.com>
Copyright (c) 2005 <Venexma Europa, S.L.>. All rights reserved.
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See perlartistic.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
| Basicos::Config - Carga de archivos de configuración y parámetros de llamada |