• Publicidad

Función para leer variables/configuración desde un fichero

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Función para leer variables/configuración desde un fichero

Notapor Santi » 2006-11-03 12:24 @558

Hola,

Hasta ahora mis pocos mensajes en el foro han sido para pedir ayuda.. en este caso una pequeña aportación de una función para leer variables desde un fichero de configuración. Las variables tienen que estar en formato tipico VARIABLE=valor y separadas por lineas.


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
sub read_config {
        my $file = shift;
        my %conf;

        open(CONF, "$file") or die "ERROR file  \"$file\" not found!\n";
        while (<CONF>) {
                # Borramos las lineas que empiezan por comentario #
                s/^(\s)*#.*//;
                # Ignorar las lineas en blanco
                next if /^(\s)*$/;
                # Eliminar el caracter \n del final
                chomp;
                # Dividir la linea en variable y valor
                ($var, $value) = split("=", $_);
                # Pasamos a mayusculas el nombre de la variable
                $var =~ tr/[a-z]/[A-Z]/;
                # Si el valor empieza y acaba por comillas dobles las eliminanos
                $value =~ s/^\"(.+)\"$/$1/;
                # Metemos los datos en un array asociativo
                $conf{$var} = $value;
        }

        close(CONF);
        return (%conf);
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Alguna vez he usado usado algún módulo CPAN (Config::IniHash) para hacer esto mismo, pero finalmente me he decido a hacer una pequeña función para algo tan simple como esto.

Luego para acceder a los datos de las variables es muy sencillo, por ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my %conf = &read_config("/etc/pruebas.conf");
print "PRUEBAS_VARIABLE = $conf{'PRUEBAS_VARIABLE'}\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Espero que a alguien le sea de utilidad.. si tienes cualquier sugerencia/critica para mejorarlo siempre es bienvenida :-)

Saludos,
Santi Saez
Santi
Perlero nuevo
Perlero nuevo
 
Mensajes: 13
Registrado: 2006-04-07 08:56 @414

Publicidad

Notapor explorer » 2006-11-03 13:57 @623

Sugerencias:
* Si una linea es de comentario, podemos saltarla: next if /^\s*#/;
* Habría que comprobar que el split ha funcionado, no sea que el usuario haya escrito mal el fichero de configuración. Pero bueno, tampoco es tan necesario en entornos de producción pequeños.
* No es necesario escapar las comillas dentro de las expresiones regulares.

Comentarios:
* Por aquí hemos comentado hace poco otro módulo que hace lo mismo (Config::General) viewtopic.php?t=1279&highlight=config+leer
* Hacer algo, cualquier cosa, si es en beneficio de los demás, siempre es bienvenido.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Perl user » 2006-11-03 16:12 @717

Que tal,

La respuesta es Config::Tiny y Config::Simple, no es necesario reinventar la rueda.

Saludos,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 13 invitados

cron