• Publicidad

Exportar hash desde módulo

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

Exportar hash desde módulo

Notapor primitivo » 2014-04-26 19:22 @849

Hola, amigos, una consulta.

Resulta que quiero exportar un hash desde un módulo llamado 'admin.pm'
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. package admin;
  4. use Exporter;
  5. our @EXPORT = qw(%acommands);
  6.  
  7. our %acommands = {
  8.     say => 'doSay' #Valor
  9. };
  10.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Pero, no logro acceder a este desde el script principal 'start.pl':
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $tmpCommand = 'say'; #la llave del hash
  2. print qq($acommands{$tmpCommand}\n); #debería mostrarme el valor de esa llave correspondiente al hash
  3.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Gracias de antemano.
primitivo
Perlero nuevo
Perlero nuevo
 
Mensajes: 80
Registrado: 2013-03-22 23:05 @004

Publicidad

Re: Exportar hash desde módulo

Notapor explorer » 2014-04-26 21:20 @930

Hay algunos fallos...

En la parte del módulo:
  • Habías puesto llaves, en lugar de paréntesis, en la definición/declaración de %acommands
  • Faltaba indicar, dentro de admin.pm, que el módulo heredaba los métodos de Exporter. Eso se resuelve con una línea @ISA = qw(Exporter); o con use base 'Exporter'; o con use parent 'Exporter';
Recomendable la presencia del 1; al final del módulo.

En la parte del programa:
  • Faltaba (o no se ve) la línea del use admin;
Queda así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. package admin;                  # inicio del paquete
  6. require Exporter;               # requerimos la presencia del módulo Exporter
  7. use base qw( Exporter );        # indicamos que vamos a heredar los métodos de Exporter (import() es el más importante)
  8.  
  9. our @EXPORT = qw( %acommands ); # variables a exportar por defecto
  10.  
  11. our %acommands = (              # este hash
  12.     'say' => 'doSay',
  13. );
  14.  
  15. 1;                              # los módulos deben terminar con un valor 'true', o no se cargarán
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. use admin;
  6.  
  7. my $tmpCommand = 'say';                         # la llave del hash
  8. print "$acommands{$tmpCommand}\n";              # acceso al hash importado
  9. print "$admin::acommands{$tmpCommand}\n";       # acceso directo al hash del módulo admin, sin necesidad de usar Exporter
  10.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Sin la parte de 'use base', solo funcionaría el segundo método de acceso al hash. Y lo que dice el comentario es cierto: no necesitas el módulo Exporter si indicas la ruta completa: $admin::acommands{...

Cuidado con usar 'say'... es una palabra reservada de los nuevos Perl (desde hace 6 años, creo).

Tienes más ejemplos y explicaciones en otro sitio de estos foros.
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

Re: Exportar hash desde módulo

Notapor primitivo » 2014-04-27 12:01 @542

Muchas gracias, explorer, como siempre, oportuno.

Cabe anotar que lo que busco en el hash es usar cada llave para almacenar una subrutina.

En el caso que comento:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my %acommands = (
  2.    'aSay' => 'DoaSay' # DoaSay sería la subrutina que sería invocada al seleccionar la llave
  3.                       # 'aSay' (hay que seguir consejos, por eso la cambié)
  4. );
  5.  
  6. sub DoaSay
  7. {
  8.    print "OK\n";
  9. }
  10.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
primitivo
Perlero nuevo
Perlero nuevo
 
Mensajes: 80
Registrado: 2013-03-22 23:05 @004


Volver a Básico

¿Quién está conectado?

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