Supongamos que queremos que la subrutina 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 se tiene encuenta los siguientes puntos:
main
)
una entrada titi
.
titi
hay que averiguar el nombre
del paquete llamador.
La función caller
devuelve el ''package'' desde el cuál fue llamada la subrutina
(sección 1.15.10).
titi
en la tabla de símbolos
del paquete llamador hay 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
.
lhp@nereida:~/Lperl/src$ 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) = caller; 11 { 12 no strict 'refs'; 13 *{$caller_package."::titi"} = \&titi; 14 } 15 } 16 17 1;
*{"$caller_package::titi"} = \&titi;¿Seguirá funcionando?
Casiano Rodríguez León