Jueves 6 de Septiembre de 2007
Correspondencias entre constructores
Esta es la tabla de correspondencias entre ExtUtils::MakeMaker y Module::Build:
Parámetro MakeMaker | Equivalencia en Module::Build |
|
---|---|---|
NAME | module_name | |
DISTNAME | dist_name | |
ABSTRACT | dist_abstract | |
AUTHOR | dist_author | |
VERSION | dist_version | |
VERSION_FROM | dist_version_from | |
PREREQ_PM | requires | |
PL_FILES | PL_files | |
PM | pm_files | |
MAN1PODS | pod_files | |
XS | xs_files | |
INC | include_dirs | |
INSTALLDIRS | installdirs | |
DESTDIR | destdir | |
CCFLAGS | extra_compiler_flags | |
EXTRA_META | meta_add | |
SIGN | sign | |
LICENSE | license | |
clean.FILES | @add_to_cleanup |
Tomado del artículo Still More Perl Lightning Articles, de Phil Crow, Josh McAdams, Steven Schubiger y chromatic.
Como hacer ejecutable un módulo
Aunque ya he visto varias soluciones, ésta es de las más elegantes y seguras que he encontrado. En el mismo artículo citado anteriormente, concretamente en la parte de Josh McAdams, podemos ver un buen ejemplo de cómo conseguir que un módulo pueda ser llamado como ejecutable directamente.
Asumimos que tenemos lo siguiente:
1 package MyModule; 2 use strict; 3 4 sub hora { 5 print localtime(),"\n"; 6 } 7 1;
Para poder llamarlo directamente hay que hacer algo parecido a ésto:
$ perl -MMyModule -e 'MyModule::hora();'
2028116810742481
$
lo cual es algo engorroso y propenso a errores. Ahora bien, si añadimos cierto código a nuestro módulo podríamos hacer lo siguiente:
1 #!/usr/bin/perl 2 3 package MyModule; 4 use strict; 5 6 sub hora { 7 print localtime(),"\n"; 8 } 9 10 sub run { 11 hora(); 12 } 13 14 run unless caller; 15 16 1;
y usarlo directamente:
$ perl MyModule.pm
2028116810742481
$
Es decir, incluímos una función con un nombre muy concreto, run
, que será
invocada siempre que la función caller no devuelva nada, es
decir, siempre que sea una primera ejecución y no desde otro módulo.
Por supuesto siempre es posible crear un enlace simbólico hacia el módulo con un nombre más amigable:
$ ln -s MyModule.pm myhora
$ perl myhora
$ chmod u+x MyModule.pm
$ ./myhora
aunque esto es un refinamiento que depende mucho del gusto del administrador.
Ah, el módulo incorpora una línea de intérprete (una shebang) al principio para poder usarlo sin anteponer el intérprete.
Razones para usar Module::Build
Michael G Shwern tiene una divertida
charla
en la que afirma que es conveniente, necesario incluso, pasarse a Module::Build
en detrimento de ExtUtils::MakeMaker
, a pesar de ser él el que mantiene este último
paquete.
Para resumir diré que los principales defectos que tiene ExtUtils::MakeMaker
son: