El fuente Perl lo puede encontrar en la página Web:
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:
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
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
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.plLa 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!
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 $
h
(línea 9) permite obtener ayuda.
l
(línea 35) podemos listar el programa.
n
(línea 37) nos permite ejecutar paso a paso.
A diferencia de la orden s
, en el caso de
que la instrucción sea una llamada a subrutina,
no se entra en la subrutina.
q
nos permite salir del depurador.
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).
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
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.
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.
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
.
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
h h
|h h
perldoc print
p
x
.
l
n
s
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:
-l
de perldoc
permite ver en que directorio se encuentra la documentación:
$ perldoc -l perlintro /usr/share/perl/5.8/pod/perlintro.podSi 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.pdfEn 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).
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):
-o output-formatname
especifica el formato de salida. -oman
. Usar -oformatname
hace
que se carge un módulo para ese formato.
-M module-name
Especifica el módulo que queremos usar para formatear el pod.
La clase debe proporcionar un método parse_from_file.
Por ejemplo perldoc -MPod::Perldoc::ToChecker
.
Se pueden especificar varias clases separándolas por comas o punto y coma: -MTk::SuperPod;Tk::Pod
.
-w option:value
o -w option
Especifica opciones en la llamada al formateador utilizado.
Por ejemplo -w textsize:15
llamará al objeto formateador $formatter->textsize(15)
antes de que se use para formatear. La forma -w optionname
es
una abreviación para -w optionname:TRUE
.
Véase un ejemplo que produce formato LATEX.
$ perldoc -oLaTeX -wAddPreamble:1 -f require > /tmp/require.texLa 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