[Perl] Proyectos en varios ficheros.
Gunnar Wolf
gwolf en gwolf.cx
Mar Ene 4 11:04:59 CST 2005
Rafael F. Rodríguez dijo [Tue, Jan 04, 2005 at 05:50:19PM +0100]:
> 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.
Si no nos pones ejemplos de lo que pasa, muy probablemente no podremos
ayudarte ;-) Te sugiero asomarte a 'perldoc perlmod', te explica
extensamente los detalles relativos a lo que necesitas -
específicamente relativos a cómo manejar, aprovechar y hasta abusar de
los espacios de nombres.
Ahora... Bueno, tu problema parece ser relativo al uso de
'require'. Nuevamente te refiero a la documentación oficial - Si
tienes un sistema tipo Unix, asómate a 'perldoc -f require' y 'perldoc
-f use'.
En resumen: ¿Qué necesitas para incluir una biblioteca? Básicamente
tener el archivo listo, hacer que su última evaluación de un valor
verdadero. Por ejemplo, veamos b.pl:
-----------------------------
sub suma {
my $total = 0;
map {$total += $_} @_;
return $total;
}
1;
-----------------------------
Estamos únicamente definiendo la función 'suma'. El '1;' al final es
para asegurarnos que regresó un valor verdadero. Ahora vamos a ver
a.pl:
-----------------------------
#!/usr/bin/perl
require 'b.pl';
print suma(2,2),"\n";
-----------------------------
Esto, tal como lo ves, funciona. Ahora bien, 'require' puede ser a
veces lo que buscas, pero es más bien legado de Perl 4, hoy en día es
mucho más común ver a use en vez de ésta. En este caso, requeriría que
renombraras b.pl a b.pm (pm de 'Perl Module'), y que cambiaras el
"require 'b.pl'" por un "use b". La principal diferencia a estas
alturas es que use incluye el código en la fase de compilación,
mientras que require lo hace en la fase de ejecución.
Tengo que despegarme de la pantalla. Asómate a la documentación que te
mandé para más información.
Saludos,
--
Gunnar Wolf - gwolf en gwolf.org - (+52-55)1451-2244 / 5554-9450
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973 F800 D80E F35A 8BB5 27AF
Más información sobre la lista de distribución Perl