[Perl] Proyectos en varios ficheros.
Ivan Chavero
ichavero en uach.mx
Mar Ene 4 17:48:20 CST 2005
Lo más recomendable es que conviertas tus módulos en paquetes, esto te
servirá manejar la memoria de una manera más eficiente y más ordenada ya
que cada paquete es un espacio de memoria separada y las funciones y las
variables que se encuentran dentro de este se están aparte de las de los
demás paquetes. De hecho en perl siempre estás dentro de un paquete,
cuando no lo especificas, te encuentras dentro del paquete main.
para crear un paquete en perl es muy sencillo, solamente utilizas la
instrucción package.
package mipaquete;
tu código ....
te recomiendo que utilizes my antes de cada variable para que le digas
que pertenece al paquete, de hecho con my puedes decir que la variable
pertenece a un bloque {}, así puedes decirle a perl que una variable
nomás existe dentro del bloque de un if digamos:
if($a>$b){
my $aux = $b * $a;
print "$aux\n";
}
## $aux existe solamente dentro del bloque if
entonces para que una variable se vea nadamás en el paquete haces esto:
package mipaquete;
# se recomienda que el nombre de tu paquete sea el nombre del archivo
# que lo contiene por ejemplo nuestro paquete se llamaría mipaquete.pm
my $variable_de_paquete = "lalalala";
sub mi_funcion_de_paquete{
lalalala...
}
1;
es importante que el paquete tenga un 1; en la última línea porque el
paquete tiene que regresar verdadero y el darle ese valor en la última
línea es una manera de asegurarse de esto.
Si se desea accesar las variables desde fuera del paquete, se antepone
our al declarar la variable.
Para accesar a las funciones y a las variables de un paquete hay que
hacer esto en tu programa:
use mipaquete;
#para ver el contenido de la variable
print $mipaquete::variable_de_paquete;
para usar la funcón
mipaquete::mi_funcion_de_paquete();
si no deseas estar anteponiendo el nombre del paquete antes de cada
elemento del mismo puedes hacerlo modificando el paquete de esta manera:
mipaquete.pm :
package mipaquete;
# se recomienda que el nombre de tu paquete sea el nombre del archivo
# que lo contiene por ejemplo nuestro paquete se llamaría mipaquete.pm
use strict;
BEGIN {
use Exporter;
@mipaquete::ISA = qw(Exporter);
@mipaquete::EXPORT = qw(mi_funcion_de_paquete
mi_funcion_de_paquete_2 $variable_de_paquete);
}
our $variable_de_paquete = "lalallaa";
sub mi_funcion_de_paquete{
print "mi funcion 1\n";
}
sub mi_funcion_de_paquete_2{
print "mi funcion 2\n";
}
1;
y para usar el paquete:
miejemplo.pl:
#!/bin/perl
use strict;
use mipaquete;
print "Variable de paquete: ".$variable_de_paquete."\n";
mi_funcion_de_paquete();
mi_funcion_de_paquete_2();
Si usas las variables del paquete en tu programa te recomiendo que mejor
les antepongas el nombre del paquete seguido del operador de pertenencia
(mipaquete::) para que sea más explcícito de donde vienen esas
variables, o mejor aún utiliza una subrutina que las muestre.
aquí viene más intensivamente explicado este cotorreo de los paquetes:
http://perl.about.com/library/weekly/aa092700a.htm
también puedes teclear esto en tu línea de comando.
$ perldoc perlmod
para ver el manual de módulos que viene con perl.
espero que esto te sirva de algo.
El mar, 04-01-2005 a las 17:50 +0100, Rafael F. Rodríguez escribió:
> Hola Lista y Feliz Año Nuevo.
>
> Tengo una duda sobre como preparar un programa. La cuestión es que quiero
> dividir el código fuente en varios archivos, cada archivo con unas funciones
> específicas, así por ejemplo el archivo xml.pl tendrán todas las funciones
> relacionadas con el tratamiento de xml, db.pl con funciones de acceso a la
> base de datos.
>
> La cuestión es que he estado haciendo pruebas poniendo en el archivo
> principal includes pero no funcionan, es como si no me reconocen las
> funciones, evidentemente algo estoy haciendo mal, pero he buscado en google
> pero no consigo localizar nada.
>
> ¿Alguna sugerencia? muchas gracias.
>
> _______________________________________________
> Perl mailing list
> Perl en tlali.iztacala.unam.mx
> http://tlali.iztacala.unam.mx/cgi-bin/mailman/listinfo/perl
--
Más información sobre la lista de distribución Perl