Como Obtener Estos Apuntes

Este no es un curso completo de Perl (Probablemente es imposible escribir un curso completo de Perl). Es mas bien un conjunto de notas sobre como usar esta espléndida herramienta. En este curso se hace especial énfasis en su manejo durante el proceso de traducir desde un lenguaje a otro, desde un formato a otro, desde una forma de representación del conocimiento a otra.

La versión postcript de este documento puede encontrarse en

http://nereida.deioc.ull.es/~lhp/perlexamples/perlexamples.ps.

La correspondiente versión HTML en la web se encuentra en:

http://nereida.deioc.ull.es/~lhp/perlexamples/.

Casiano Rodríguez León
2010-03-03
expr|* Delete a/all watch exprs 25 |[|]db_cmd Send output to pager ![!] syscmd Run cmd in a subprocess 26 q or ^D Quit R Attempt a restart 27 Data Examination: expr Execute perl code, also see: s,n,t expr 28 x|m expr Evals expr in list context, dumps the result or lists methods. 29 p expr Print expression (uses script's current package). 30 S [[!]pat] List subroutine names [not] matching pattern 31 V [Pk [Vars]] List Variables in Package. Vars can be ~pattern or !pattern. 32 X [Vars] Same as "V current_package [Vars]". i class inheritance tree. 33 y [n [Vars]] List lexicals in higher scope <n>. Vars same as V. 34 For more help, type h cmd_letter, or run man perldebug for all docs. 35 DB<1> l 36 2==> print "hola!\n"; 37 DB<1> n 38 hola! 39 Debugged program terminated. Use q to quit or R to restart, 40 use O inhibit_exit to avoid stopping after program termination, 41 h q, h R or h O to get additional info. 42 DB<1> q 43 $

Consulte el libro de Foley y Lester [4] para saber mas sobre el depurador. También podemos consultar http://debugger.perl.org/. En http://refcards.com/docs/forda/perl-debugger/perl-debugger-refcard-a4.pdf se puede encontrar una página de referencia (PDF).

Instrucciones Para la Carga de Módulos en la ETSII

Cuando entra a una de las máquinas de los laboratorios de la ETSII encontrará montado el directorio /soft/perl5lib/ y en él algunas distribuciones de módulos Perl que he instalado.

export MANPATH=$MANPATH:/soft/perl5lib/man/
export PERL5LIB=/soft/perl5lib/lib/perl5
export PATH=.:/home/casiano/bin:$PATH:/soft/perl5lib/bin:

Visite esta página de vez en cuando. Es posible que añada algún nuevo camino de búsqueda de librerías y/o ejecutables.

Ejecución en la Línea de Comandos

La opción -e del intérprete perl nos permite ejecutar un programa dado desde la línea de comandos, en vez de usar un fichero:

$ perl -e 'print 4**2,"\n"'
16

Obsérvese como se han utilizado comillas simples para proteger el programa Perl de un posible preprocesado por el intérprete de comandos del sistema ( de la shell).

En la jerga Perl a los programas ejecutados con la opción -e se les llama one-liners.

Carga de Módulos en One-liners

La opción -M seguida del nombre de un módulo (sin espacios) permite cargar un módulo para que las funciones proveídas por el mismo estén disponibles en el one-liner. Por ejemplo, el siguiente programa:

$ perl -MLWP::Simple -e "mirror('http://www.gutenberg.org/dirs/etext99/advsh12h.htm', 'ADVENS_OF_SHERLOCK.html');"

usa la función mirror de LWP::Simple para crear un fichero ADVENS_OF_SHERLOCK.html a partir de la correspondiente página conteniendo la novela THE ADVENTURES OF SHERLOCK HOLMES en el Proyecto Gutenberg.

Uso de las Flechas en el Depurador para Navegar en la Historia

Cuando se usa el depurador, es muy cómodo que funcione el editor que permite usar las flechas para navegar en la historia de comandos. Si no le funcion pruebe a instalar el bundle Bundle::CPAN

usando el comando:

cpan Bundle::CPAN

o alternativamente este otro comando:

perl -MCPAN -e 'install Bundle::CPAN'

que carga el módulo CPAN y llama a la función install con argumento Bundle::CPAN.

Alternativamente, si se dispone de una distribución de Linux Ubuntu se puede instalar uno de los paquetes libterm-readkey-perl o libterm-readline-gnu-perl.

Uso del Depurador para Estudiar Perl

Una forma habitual de usar el depurador es utilizarlo para estudiar la sintáxis y semántica de algún constructo Perl. Para ello se combinan las opciones -d y -e en la llamada al intérprete. La opción -e se hace seguir de un programa trivial (p.ej. 0). A continuación se pasa a estudiar la conducta de las expresiones en las que estemos interesados. Veamos un ejemplo:

lhp@nereida:~/Lperl/doc$ perl -d -e 0
Loading DB routines from perl5db.pl version 1.28
Editor support available.
Enter h or `h h' for help, or `man perldebug' for more help.
main::(-e:1):   0
  DB<1> p sqrt(16)
  4
  DB<2> p "hola"x4
  holaholaholahola
  DB<3> q

Personalización del Depurador

El fichero .perldb puede ser utilizado para personalizar el comportamiento del depurador:
casiano@exthost:~$ cat .perldb
$DB::alias{'vi'}   = 's/^vi\b/!!vi /';

Usando esta definición hacemos que el comando vi ejecute el editor vi. Véase la siguiente sesión:

casiano@exthost:~$ perl -wdE 0
Loading DB routines from perl5db.pl version 1.3
Editor support available.
Enter h or `h h' for help, or `man perldebug' for more help.
main::(-e:1):   0
  DB<1> vi prueba
  DB<2> !!cat prueba
use 5.010;
my $alice = 'Bob';
say "Catastrophic crypto fail!" if $alice == 'Bob';
  DB<3> do prueba
Argument "Bob" isn't numeric in numeric eq (==) at prueba line 3.
        ...
Catastrophic crypto fail!

  DB<4> vi prueba
  DB<5> !!cat prueba
use 5.010;
my $alice = 'Bob';
say "Catastrophic crypto fail!" if $alice eq 'Bob';
  DB<6> do prueba
Catastrophic crypto fail!

Ejercicio 1.1.1   Entre en el depurador y pruebe los comandos

Ejercicio 1.1.2   Entre en el depurador y pida ayuda sobre los comandos

La Documentación en Perl

Para obtener información sobre un tópico o un módulo Perl utilize perldoc . Si tiene instalado el módulo Tk::Pod entonces puede utilizar el visualizador gráfico tkpod . Otra posibilidad es arrancar el programa podwebserver disponible en la distribución del módulo Pod::Webserver. Este programa arranca un servidor HTTP que sirve la documentación de los módulos instalados en la máquina:

$ podwebserver &
[2] 4069
$ I am process 4069 = perl Pod::Webserver v3.05
 Indexing all of @INC -- this might take a minute.
@INC = [ /soft/perl5lib/share/perl/5.8.8/ /soft/perl5lib/lib/perl/5.8.8 /soft/perl5lib/lib/perl/5.8 /soft/perl5lib/share/perl/5.8/ /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl . ]
 Done scanning @INC
You can now open your browser to http://localhost:8020/
La documentación puede ahora ser accedida usando nuestro navegador favorito:
$ firefox  http://localhost:8020/ &

La fuente de información sobre el lenguaje Perl mas fiable es la que se encuentra en la documentación .pod adjunta con su distribución. Veamos algunos de los parámetros que admite perldoc:

lhp@nereida:~$ perldoc -h
perldoc [options] PageName|ModuleName|ProgramName...
perldoc [options] -f BuiltinFunction
perldoc [options] -q FAQRegex

Options:
    -h   Display this help message
    -V   report version
    -r   Recursive search (slow)
    -i   Ignore case
    -t   Display pod using pod2text instead of pod2man and nroff
             (-t is the default on win32 unless -n is specified)
    -u   Display unformatted pod text
    -m   Display module's file in its entirety
    -n   Specify replacement for nroff
    -l   Display the module's file name
    -F   Arguments are file names, not modules
    -v   Verbosely describe what's going on
    -T   Send output to STDOUT without any pager
    -d output_filename_to_send_to
    -o output_format_name
    -M FormatterModuleNameToUse
    -w formatter_option:option_value
    -X   use index if present (looks for pod.idx at /usr/lib/perl/5.8)
    -q   Search the text of questions (not answers) in perlfaq[1-9]

PageName|ModuleName...
         is the name of a piece of documentation that you want to look at. You
         may either give a descriptive name of the page (as in the case of
         `perlfunc') the name of a module, either like `Term::Info' or like
         `Term/Info', or the name of a program, like `perldoc'.

BuiltinFunction
         is the name of a perl function.  Will extract documentation from
         `perlfunc'.

FAQRegex
         is a regex. Will search perlfaq[1-9] for and extract any
         questions that match.

Any switches in the PERLDOC environment variable will be used before the
command line arguments.  The optional pod index file contains a list of
filenames, one per line.
                                                       [Perldoc v3.14]

Hay una serie de documentos que pueden consultarse con perldoc o tkpod. Los mas básicos son:

Hay un conjunto extenso de tutoriales:

Los manuales de referencia se dividen por tópicos: Por último - solo para gurus - estan los documentos que describen las partes internas de Perl: La opción -l de perldoc permite ver en que directorio se encuentra la documentación:
$ perldoc -l perlintro
/usr/share/perl/5.8/pod/perlintro.pod
Si se desea convertir desde pod a algún formato específico, por ejemplo a LATEX basta con usar el conversor adecuado:
$ pod2latex -full `perldoc -l perlintro`
$ ls -l perlintro.tex
-rw-r--r-- 1 pp2 pp2 24333 2008-02-21 13:22 perlintro.tex
$ pdflatex perlintro.tex
This is pdfeTeX, Version 3.141592-1.30.5-2.2 (Web2C 7.5.5)
entering extended mode
....................................................................
$ ls -ltr *.pdf | tail -1
-rw-r--r-- 1 pp2 pp2 191367 2008-02-21 13:22 perlintro.pdf
En este caso hemos usado pod2latex. Para poder ejecutar la conversión de .pod a LATEX asegúrese de tener instalado el módulo Pod::LaTeX (puede obtenerlo desde CPAN).

Generando Formatos con perldoc

La utilidad perldoc dispone de opciones para llamar a un conversor y producir automáticamente el formato deseado (si los correspondientes módulos están instalados):

Véase un ejemplo que produce formato LATEX.

$ perldoc -oLaTeX -wAddPreamble:1 -f require > /tmp/require.tex
La opción AddPreamble indica al objeto formateador que se desea generar un documento completo y no una sección de un documento completo. Después de generar el fichero LaTeX podemos compilarlo con alguno de los compiladores de latex para producir un dvi o un pdf. Como LATEXno está instalado en las máquinas de las salas copiamos el fichero a uno de los servidores y compilamos con pdflatex :
casiano@tonga:~$ scp millo:/tmp/require.tex .
require.tex                          100% 6534     6.4KB/s   00:00
casiano@tonga:~$ pdflatex require.tex
This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4)
entering extended mode
....
Output written on require.pdf (4 pages, 62447 bytes).
Transcript written on require.log.
Una vez generado el .pdf podemos visualizarlo con kpdf e imprimirlo:
casiano@tonga:/tmp$
casiano@tonga:/tmp$ kpdf require.pdf &

Puede que encuentre útil usar la hoja de referencia rápida sobre Perl que se encuentra en http://johnbokma.com/perl/perl-quick-reference-card.pdf



Subsecciones
Casiano Rodríguez León
2011-02-09
n Panel-->
Casiano Rodríguez León
2011-02-10