[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