El usar 'require' o 'use' es para importar variables y funciones de módulos externos a nuestro programa.
Si tienes un código muy largo, es el momento de pensar en dividirlo en módulos, claro.
Para llamar a funciones externas, hay varias formas.
Si solo te interesa saber el resultado de la ejecución de un módulo externo, lo puedes hacer con do():
Using perl Syntax Highlighting
#!/usr/bin/perl
$resultado = do 'script2.pl';
print $resultado;
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Using perl Syntax Highlighting
#!/usr/bin/perl
"Hola\n";
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
La ejecución de script1.pl es el $resultado de llamar a script2.pl.
Pero claro, esto es para cosas sencillas.
Si son varias las funciones que hay dentro del segundo archivo, las puedes llamar si usas todo el espacio de nombres:
Using perl Syntax Highlighting
#!/usr/bin/perl
package funciones;
use strict;
# variables privadas
my $var1 = "Hola";
my $var2 = "Adios";
# variables globales dentro de este archivo
our $var3 = "Que tal";
our $var4 = "Muy bien";
# funciones
sub calcula {
my $semilla = shift;
$semilla += 1_000;
}
1;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use feature 'say';
use funciones;
# Acceso a variables dentro de funciones.pm
say $funciones::var4;
# Acceso a funciones dentro de funciones.pm
say funciones::calcula(42);
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
En este caso, definimos un módulo, conteniendo variables y una función, y desde el script1.pl accedemos a ellas. Usamos la notación completa para acceder a ellas directamente.
Claro que... escribir 'funciones::' todo el tiempo es un rollo, así que lo que también se hace es importar las variables y funciones que nos interesan al espacio de nombres de nuestro programa, para poder llamarlas como si realmente estuvieran en nuestro programa.
Using perl Syntax Highlighting
#!/usr/bin/perl
package funciones;
use strict;
require Exporter; # el módulo exportador
our @ISA = 'Exporter'; # nuestro módulo es un heredero del módulo exportador
our @EXPORT = qw($var1 $var2); # lista de variables y funciones exportadas por defecto, si no importamos nada
our @EXPORT_OK = qw($var3 $var4 calcula); # lista de variables y funciones exportadas de forma opcional
our $var1 = "Hola";
our $var2 = "Adios";
our $var3 = "Que tal";
our $var4 = "Muy bien";
# funciones
sub calcula {
my $semilla = shift;
$semilla += 1_000;
}
1;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use feature 'say';
use funciones;
say $var1; # esta variable está exportada por defecto
use funciones qw(calcula $var2); # importamos una función. NOTA: $var1 no sería exportada
say calcula(42);
say $var2;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Como ves, es fácil el dividir un problema grande en varios archivos. Hay más técnicas, como la de la programación orientada a objetos, pero esto es lo básico.
Más información en
perldoc perlmod (sección
Perl Modules).