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";
}
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();
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;
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();
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;
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();
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();
Más información en
perlmod y
perlmodlib