• Publicidad

Cargar módulo dinámicamente con una variable

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Cargar módulo dinámicamente con una variable

Notapor monoswim » 2006-04-27 08:47 @407

Tengo una variable con el nombre del módulo que quiero usar, debería de ser algo así...
use $modulo;
$modulo->cargar()


Todos los módulos que puede tener $modulo tienen la función cargar...

Lo pruebo y no funca y la verdad no tengo idea de para donde salir corriendo...

Saludos
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Publicidad

Notapor Perl user » 2006-04-27 09:09 @423

Código: Seleccionar todo
my $module = 'Data::Dumper';
eval "use $module";
print "Couldn't load module $module: $@" and return if $@;
print Dumper( [ 1, 2, 3 ] );


Si quisieras hacer cosas como esas en tiempo de compilación necesitarías el uso de un bloque BEGIN.

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

Notapor monoswim » 2006-04-27 11:04 @502

mil gracias chaval, como siempre de 10 !!!
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor explorer » 2006-04-27 12:05 @545

Otra forma.

Supongamos que tenemos 3 ficheros así:
modulo1.pm:
Código: Seleccionar todo
package modulo1;
sub cargar {
        print "Cargando en " . __PACKAGE__ . "\n";
}
modulo2.pm:
Código: Seleccionar todo
package modulo2;
sub cargar {
        print "Cargando en " . __PACKAGE__ . "\n";
}
modulo3.pm:
Código: Seleccionar todo
package modulo3;
sub cargar {
        print "Cargando en " . __PACKAGE__ . "\n";
}

Podemos entonces hacer esto:
Código: Seleccionar todo
#!/usr/bin/perl
for $i ( 1..3 ) {
    $modulo = "modulo$i";
    do "$modulo.pm";
    &{ $modulo ."::cargar" } ();   # 1
    &{ "${modulo}::cargar" } ();   # 1a
    modulo1::cargar();             # 2
    $x = "modulo${i}::cargar";
    &$x();                         # 3
}
Última edición por explorer el 2006-05-01 09:30 @437, editado 2 veces en total
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 monoswim » 2006-04-28 12:12 @550

Gracias explorer, es bueno saber que hay otras formas de hacerlo...Igual con la de Marco (perl user) ya me funcionó...

Igual todavía estoy probando distintas variantes

Saludos
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires


Volver a Avanzado

¿Quién está conectado?

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

cron