Primeros Pasos

Donde Encontrar Perl y Como Instalarlo

El fuente Perl lo puede encontrar en la página Web:

http://www.perl.com/pub/language/info/software.html.

Se encuentran disponibles los fuentes y los binarios para distintos sistemas.

Generalmente, lo que hay que hacer es descomprimir la distribución elegida y seguir las instrucciones del manual de instalación. Lea el tutorial en http://www.perl.com/download.csp para mas detalles.

Algunos enlaces sobre Perl en windows:

  1. Discusión en PerlMonks sobre el tema: Preferred Windows Perl?
  2. Strawberry Perl: http://win32.perl.org
  3. Active State Perl: http://www.activestate.com/store/
  4. Cygwin: http://www.cygwin.com/

Comprueba que perl existe en tu ordenador:

    $perl -v
    This is perl, version 5.005_03 built for i386-linux
     
    Copyright 1987-1999, Larry Wall

Donde esta Perl en Nuestra Máquina

Comprueba en que directorio se guarda el ejecutable:

    $ which perl
    /usr/bin/perl

El comando whereis puede ser usado para encontrar los binarios, fuentes y páginas del manual de Perl:

lhp@nereida:~$ whereis perl
perl: /usr/bin/perl /etc/perl /usr/lib/perl /usr/local/lib/perl 
      /usr/share/perl /usr/share/man/man1/perl.1.gz

Ejecución de un Programa Perl

Edita y guarda el fichero hola.pl. Cambia los permisos de ejecución:

    >vi hola.pl
    > ... salimos y salvamos ...
    >cat hola.pl
    #!/usr/bin/perl -w
    print "hola!\n";
    >
    >chmod a+x hola.pl
La primera línea, comenzando por #! indica al intérprete de comandos en que lugar se encuentra el interprete para este guión, esto es, donde se encuentra perl. La opción -w (la w viene de warnings) le indica al intérprete perl que debe advertirnos de cualquier potencial error que detecte. La conducta de Perl es, en general, permisiva con el usuario. Es conveniente hacer uso siempre de esta opción. Ahora ya puedes ejecutar tu primer programa Perl:

>./hola.pl

También podríamos haber escrito:

$ perl -w hola.pl
hola!

Ejecución con el Depurador

También podemos usar el depurador para ejecutar el programa paso a paso. El depurador de Perl se activa usando la opción -d del intérprete:

 1 $ perl -d hola.pl
 2 
 3 Loading DB routines from perl5db.pl version 1.25
 4 Editor support available.
 5 
 6 Enter h or `h h' for help, or `man perldebug' for more help.
 7 
 8 main::(hola.pl:2):      print "hola!\n";
 9   DB<1> h
10 List/search source lines:               Control script execution:
11   l [ln|sub]  List source code            T           Stack trace
12   - or .      List previous/current line  s [expr]    Single step [in expr]
13   v [line]    View around line            n [expr]    Next, steps over subs
14   f filename  View source in file         <CR/Enter>  Repeat last n or s
15   /pattern/ ?patt?   Search forw/backw    r           Return from subroutine
16   M           Show module versions        c [ln|sub]  Continue until position
17 Debugger controls:                        L           List break/watch/actions
18   o [...]     Set debugger options        t [expr]    Toggle trace [trace expr]
19   <[<]|{[{]|>[>] [cmd] Do pre/post-prompt b [ln|event|sub] [cnd] Set breakpoint
20   ! [N|pat]   Redo a previous command     B ln|*      Delete a/all breakpoints
21   H [-num]    Display last num commands   a [ln] cmd  Do cmd before line
22   = [a val]   Define/list an alias        A ln|*      Delete a/all actions
23   h [db_cmd]  Get help on command         w expr      Add a watch expression
24   h h         Complete help page          W 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á en /soft/perl5lib/ algunas distribuciones que he instalado.

Establezca las siguientes variables de entorno para poder acceder a las mismas:

[casiano@tonga]~/src/perl/tests/gtk2/> cat ~/bin/setperl5lib
# October 2008
# source ~/bin/setperl5lib
export PERL5LIB=/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/
export MANPATH=$MANPATH:/soft/perl5lib/man/
export PATH=$PATH:/soft/perl5lib/bin

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

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
2009-10-04