Un ejemplo sencillo con do(). Si tenemos este código que almacena la subrutinas
Using perl Syntax Highlighting
#!/usr/bin/perl
sub getHTML
{
return "<html><body>Hola</body></body>\n";
}Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
podemos importarlo a nuestro programa con do():
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict
;
use warnings
;
use diagnostics
;
do 'subrutinas.pl';
print getHTML
();Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Si lo hiciéramos como un módulo, sería
Using perl Syntax Highlighting
#!/usr/bin/perl
package subrutinas
;
sub getHTML
{
return "<html><body>Hola</body></body>\n";
}
1;Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Ahora, el espacio de nombres está dentro de "subrutinas", así que debemos cambiar la forma de hacer la llamada:
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict
;
use warnings
;
use diagnostics
;
use subrutinas
;
print subrutinas
::getHTML();Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Pero claro, eso es escribir mucho. Nosotros quisiéramos escribir solamente getHTML. Para eso, debemos importar ese nombre de función a nuestro espacio de nombres. El proceso lleva varios pasos (crear una función llamada import() y más cosas), por lo que lo más cómodo es usar el módulo
Exporter:
Using perl Syntax Highlighting
#!/usr/bin/perl
package subrutinas
;
require Exporter
;
@ISA = qw(Exporter
); # Estos dos líneas equivalen a: use Exporter 'import';
@EXPORT = ('&getHTML');
sub getHTML
{
return "<html><body>Hola</body></body>\n";
}
1;Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Y ahora ya podemos llamar a nuestra función directamente:
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict
;
use warnings
;
use diagnostics
;
use subrutinas
;
print getHTML
();Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
En el caso de que no queramos que esta importación suceda en tiempo de compilación, usaremos
require:
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict
;
use warnings
;
use diagnostics
;
require subrutinas
;
subrutinas
->import('getHTML');
print getHTML
();Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Más información en
perlmod y
perlmodlib