Exporter
permite definir de manera precisa la interfaz
externa de nuestro módulo. Para ello deberemos escribir el siguiente
código en NuestroModulo.pm
package NuestroModulo; use strict; use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION); use Exporter; $VERSION = '1.00'; @ISA = qw(Exporter); @EXPORT = qw(...); # Símbolos a exportar @EXPORT_OK = qw(...); # Símbolos a exportar a petición %EXPORT_TAGS = ( TAG1 => [...], TAG2 => [...], ... ); ###################### Nuestro código va aqui ###################### 1;En los ficheros desde los que queremos usar nuestro módulo deberemos escribir una de estas líneas:
use NuestroModulo; # Importar los símbolos por defecto use NuestroModulo qw(...); # Importar los símbolos listados use NuestroModulo (); # No importar símbolos use NuestroModulo qw(:TAG1)# Importar el conjunto del tag
Cuando alguien escribe use NuestroModulo
, ello implica
un require "NuestroModulo.pm"
seguido de una llamada
a NuestroModulo->import()
durante la compilación.
El método import
, que es heredado del módulo
EXPORTER
usa un conjunto de variables en el paquete que gobiernan
la conducta de exportación del módulo.
Estas variables son:
$VERSION
Se usa asi:
use NuestroModulo '1.5' # Si $VERSION < 1.5 error
@EXPORT
Contiene la lista de funciones y variables que serán exportadas por defecto al espacio de nombres del cliente.
EXPORT_OK
Este vector contiene los símbolos que serán cargados únicamente si se pregunta específicamente por ellos. Si los vectores se cargan asi:
@EXPORT = qw(&F1 &F2 @List); @EXPORT_OK = qw(Op_Func %table);Y el usuario carga el módulo como sigue:
use NuestroModulo qw(Op_Func %Table F1);Entonces importamos las funciones
Op_func
y F1
y el hash %Table
pero no la función F2
y el vector @List
.
Puesto que las variables @EXPORT
,
@EXPORT_OK
y %EXPORT_TAGS
son del paquete cuyo nombre casa con el del
fichero5.1,
es necesario declararlas con ours
o bien
utilizar el pragma use vars
para
satisfacer el uso de use strict
sin que se
produzcan mensajes de error.
Casiano Rodríguez León