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í:
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
package admin; # inicio del paquete
require Exporter; # requerimos la presencia del módulo Exporter
use base qw( Exporter ); # indicamos que vamos a heredar los métodos de Exporter (import() es el más importante)
our @EXPORT = qw( %acommands ); # variables a exportar por defecto
our %acommands = ( # este hash
'say' => 'doSay',
);
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
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use admin;
my $tmpCommand = 'say'; # la llave del hash
print "$acommands{$tmpCommand}\n"; # acceso al hash importado
print "$admin::acommands{$tmpCommand}\n"; # acceso directo al hash del módulo admin, sin necesidad de usar Exporter
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.