[Perl] Uso de modulos de un paquete

Gunnar Wolf gwolf en gwolf.org
Sab Abr 30 22:43:47 CDT 2005


Marc Franquesa dijo [Sat, Apr 30, 2005 at 05:51:47PM +0200]:
> Buenas.
> 
> Llevo ya un tiempo programando en perl, pero soy aun novato en 'Perl
> Avanzado', aka Referencias, modulos, ..., así que entended que llevo
> un caos considerable y quizá estoy haciendo algo evidentemente mal.
> 
> Allá va mi problema:
> 
> Tengo un subdirectorio 'pkg' en el que pongo dos modulos: a.pm y b.pm.
> 
> Los modulos a.pm y b.pm siguen un esquema parecido a este:
> 
> #!/usr/bin/perl
> 
> package pkg;
> our @EXPORT = qw (funcionX)
> (...)
> No quiero tener que hacer 
> use pkg::a;
> use pkg::b;
> 
> ya que si alguna vez tengo que añadir un paquete 'c.pm', tendré que agregar
> use pkg::c; a todo el código que haya tirado.
> 
> ¿El aseo por favor? ;)
> Gracias por mostrarme la luz, voy bastante perdido.

Ummmm... Bueno, antes que nada: Hay razones perfectamente válidas para
andar exportando tan abiertamente, pero en general, mi recomendación
es: No lo hagas. Algún día vas a caer en un conflicto al importar dos
bibliotecas que exporten los mismos símbolos.

Ahora, la respuesta específica para lo que requieres: Tienes tus
archivos tal como ahora (aunque eliminando el #!/usr/bin/perl inicial
- No son archivos que vayan a ser directamente ejecutados). Elimino
tambien el @EXPORT, ahora te explico por que:

---- pkg/a.pm
package pkg;
sub funcionX { print "Hola!" }
1;
--- pkg/b.pm
package pkg;
sub funcionY { print "Adios!" }
1;
---

Aparte de estos, crea un archivo pkg.pm que llame a todos sus
componentes. Claro, si quieres exportar los símbolos que importaste,
vas a tener que declararlos ahí, ya que este archivo es el que será
invocado cuando hagas un "use pkg"Ñ

--- pkg.pm
package pkg;
use pkg::a;
use pkg::b;
our @EXPORT = qw(funcionX funcionY);
1;
---

Ahora, nuevamente, piensa _bien_ si quieres hacer esto. Es bastante
puerco. (Y sí, yo lo he hecho en algunas ocasiones)

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