[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