sqrt
y no math::sqrt
.
Una vez que un módulo ha sido localizado y compilado dentro de un programa Perl como consecuencia
de una declaración use
, el siguiente paso es la ejecución de la subrutina import
de ese módulo. De hecho, la sentencia use module List
es equivalente a:
BEGIN {require module; import module List; }La conducta por defecto de
import
es vacía, pero podemos cambiar dicha conducta
creando en nuestro módulo nuestra propia subrutina import
.
Es decir, el módulo en cuestión tiene que estar preparado para exportar
esos identificadores al código cliente que los utiliza.
El uso de BEGIN
implica que require
e import
se ejecuten en el momento de
la compilación.
Cuando es llamada import
recibe como argumentos cualesquiera argumentos que aparezcan
despues de la sentencia use
. Por ejemplo, si un programa incluye una línea como:
use Technique::DandC::FFT ("sample");entonces, una vez localizado y compilado el módulo
Technique::DandC::FFT
se procede a la llamada de import
:
Technique::DandC::FFT::import("Technique::DandC::FFT", "sample");
Existe una declaración no que puede ser usada para desechar las importaciones realizadas
mediante use
:
no integer; no strict 'refs';La desactivación se mantendrá en el ámbito léxico de la declaración
no
.
import
del módulo myimport.pm
que se define mas abajo
exporte su función titi
al espacio de nombres
del package llamador, de manera que cuando se ejecute el
siguiente programa usemyimport.pl
:
$ cat -n ./usemyimport.pl 1 #!/usr/bin/perl -w -I. 2 use strict; 3 use myimport; 4 5 my $titi = 4; 6 my @titi = (1,2,3); 7 &titi(); 8 9 print"$titi\n"; 10 print"@titi\n";
de lugar a la salida:
$ ./usemyimport.pl Hola 4 1 2 3para ello, deberás escribir el código que ha sido sustituido por las líneas de puntos en el listado de
myimport.pm
.
$ cat -n ./myimport.pm 1 package myimport; 2 use strict; 3 4 sub titi { 5 print "Hola\n"; 6 } 7 8 sub import { 9 10 my ($caller_package) = ....; # averiguar paquete llamador 11 { 12 ................; # desactivar strict 13 ................; # instalar identificador 14 } 15 } 16 17 1;SUGERENCIA:
main
)
una entrada titi
.
titi
tiene que averiguar el nombre
del paquete llamador.
Recuerde que el módulo Carp
provee funciones
que nos permiten localizar quién
llamo a la rutina actual. En concreto, la función caller
devuelve el ``package'' desde el cuál fue llamada la subrutina.
titi
en la tabla de símbolos
del paquete llamador tendrá que usar typeglobs y referenciado
simbólico.
no strict 'refs'
).
-I.
en la primera línea
del programa cliente usemyimport.pl
:
garantiza que el intérprete perl encontrará el módulo ./myimport.pm
.