El comportamiento de Perl puede variar ligeramente si la versión que tenemos instalada es antigua. Para ver la versión de Perl podemos hacer.
lhp@nereida:~/Lperl/src/topdown/PL0506$ perl -v This is perl, v5.8.4 built for i386-linux-thread-multi Copyright 1987-2004, Larry Wall Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5 source kit. Complete documentation for Perl, including FAQ lists, should be found on this system using `man perl' or `perldoc perl'. If you have access to the Internet, point your browser at http://www.perl.com/, the Perl Home Page.
En primer lugar, construimos la estructura para nuestro proyecto de mini-lenguaje.
La mejor forma de comenzar a escribir un módulo es usando la herramienta Perl
h2xs
. Supongamos que queremos construir un módulo PL::Tutu
.
Los nombres de los módulos siguen un esquema de identificadores separados
por una pareja de :
. Para saber más sobre el esquema de nombres
de los módulos y la forma en la que estos se asigna a ficheros del sistema
operativo, lea la sección
sobre introducción a los módulos
[10].
lhp@nereida:~/Lperl/src/topdown/PL0506$ h2xs -XA -n PL::Tutu Defaulting to backwards compatibility with perl 5.8.4 If you intend this module to be compatible with earlier perl versions, please specify a minimum perl version with the -b option. Writing PL-Tutu/lib/PL/Tutu.pm Writing PL-Tutu/Makefile.PL Writing PL-Tutu/README Writing PL-Tutu/t/PL-Tutu.t Writing PL-Tutu/Changes Writing PL-Tutu/MANIFESTLa herramienta
h2xs
fué concebida para ayudar en la transformación
de ficheros de cabecera de C en código Perl. La opción
-X
hace que se omita la creación de subrutinas externas (XS
)
La opción -A
implica que el módulo no hará uso del AutoLoader
.
La opción -n
proporciona el nombre del módulo.
La llamada a h2xs
crea la siguiente estructura de directorios y ficheros:
lhp@nereida:~/Lperl/src/topdown/PL0506$ tree . `-- PL-Tutu |-- Changes |-- MANIFEST |-- Makefile.PL |-- README |-- lib | `-- PL | `-- Tutu.pm `-- t `-- PL-Tutu.t 4 directories, 6 files
Después de esto tenemos un módulo ''funcional'' que no hace nada. Lo podríamos instalar como si lo hubieramos descargado desde CPAN (Véase [10]).
Después cambiamos al directorio PL-Tutu/
y hacemos perl Makefile.PL
.
lhp@nereida:~/Lperl/src/topdown/PL0506$ cd PL-Tutu/ lhp@nereida:~/Lperl/src/topdown/PL0506/PL-Tutu$ perl Makefile.PL Checking if your kit is complete... Looks good Writing Makefile for PL::TutuEsto crea el fichero
Makefile
necesario para actualizar
nuestra aplicación. Para saber más sobre perl Makefile.PL
lea
[10].
Pasamos ahora a trabajar en el módulo. Primero escribimos
la parte relativa a la documentación. Para ello
editamos Tutu.pm
:
lhp@nereida:~/Lperl/src/topdown/PL0506/PL-Tutu/lib/PL$ pwd /home/lhp/Lperl/src/topdown/PL0506/PL-Tutu/lib/PL lhp@nereida:~/Lperl/src/topdown/PL0506/PL-Tutu/lib/PL$ ls -l total 4 -rw-r--r-- 1 lhp lhp 2343 2005-09-28 11:16 Tutu.pmy al final del mismo insertamos la documentación. Para saber más sobre el lenguajes de marcas de Perl (pod por plain old documentation) lea [10]. En este caso escribimos:
1; __END__ =head1 NOMBRE PL::Tutu - Compilador para un lenguaje sencillo denominado "Tutu" que usaremos en la asignatura PL =head1 SINOPSIS use PL::Tutu; La subrutina PL::Tutu::compiler recibe dos argumentos: el nombre del fichero de entrada (fuente.tutu) y el nombre del fichero de salida (código ensamblador para una especie de P-máquina). =head1 DESCRIPCIÓN Este módulo tiene dos objetivos: aprender a hacer un pequeño compilador y aprender a programar modularmente en Perl, usando un buen número de los recursos que este lenguaje ofrece. El siguiente es un ejemplo de código fuente tutu: int a,b; string c; a = 2+3; b = 3*4; c = "hola"; p c; c = "mundo"; p c; p 9+2; p a+1; p b+1 supuesto que está guardado en el fichero "test2.tutu", podemos escribir un programa Perl "main.pl" para compilarlo: $ cat main.pl #!/usr/bin/perl -w -I.. #use PL::Tutu; use Tutu; PL::Tutu::compiler(@ARGV); al ejecutar "main.pl": $ ./main.pl test2.tutu test2.ok obtenemos el fichero "test2.ok" con el ensamblador: $ cat test2.ok DATA holamundo PUSH 5 PUSHADDR 0 STORE_INT PUSH 12 PUSHADDR 1 STORE_INT PUSHSTR 0 4 PUSHADDR 2 STORE_STRING LOAD_STRING 2 PRINT_STR PUSHSTR 4 5 PUSHADDR 2 STORE_STRING LOAD_STRING 2 PRINT_STR PUSH 11 PRINT_INT LOAD 0 INC PRINT_INT LOAD 1 INC PRINT_INT Para mas información consulta la página de la asignatura. ¡Buena suerte! =head2 EXPORT No se exporta nada al espacio de nombres del cliente. =head1 AUTOR Casiano Rodríguez León, E<lt>casiano@ull.esE<gt> =head1 VÉASE TAMBIÉN L<perl>. =cutLa documentación puede ser mostrada utilizando el comando
perldoc
.
El resultado de usar perldoc Tutu
La forma en la que se controla la calidad de un módulo es mediante
el desarrollo de pruebas. Las pruebas son programas perl que se sitúan en el directorio
t/
y que tienen la extensión .t
. Para ejecutar las pruebas
se escribe:
make test
Vease la sección [10] de los apuntes de LHP para ams detalles.
Responda a las siguientes preguntas:
use Este::Modulo;¿Donde busca el fichero
Modulo.pm
?
h2xs
el esqueleto para PL::Tutu
:
¿En que subdirectorio queda el fichero conteniendo el esqueleto del
módulo creado Tutu.pm
?
MANIFEST
?
Makefile.PL
? ¿Cuál es su función?
¿Que significa la frase looks good?
Makefile
para trabajar en la plataforma
actual?
pod
?
Repase
[10]
si tiene dudas.
=head1 cabecera =head2 cabecera =item texto =over N =back =cut =pod =for X =begin X =end X
t
?
make test
los reconozca como pruebas?
make dist
Casiano Rodríguez León