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.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!
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á montado el directorio /soft/perl5lib/ y en
él algunas distribuciones de módulos Perl que he instalado.
Para usar los módulos instalados por el profesor con perl5.8.*
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/binEn una
bash ejecute:
$ source ~/bin/setperl5libpara establecer las variables de entorno. También puede añadir estas líneas en su fichero
~/.profile
casiano@millo:~$ cat bin/setperl5_10lib # October 2008 # source ~/bin/setperl5_10lib export PERL5LIB=/soft/perl5lib/perl5_10_1/lib/:/soft/perl5lib/perl5_10_1/lib/perl5 export MANPATH=$MANPATH:/soft/perl5lib/perl5_10_1/man/ # /soft/perl5lib/perl5_10_1/bin/ must be after ... export PATH=$PATH:/soft/perl5lib/perl5_10_1/bin/
No es buena idea sustituir el intérprete nativo de perl por otra versión.
La distribución de Linux instalada depende de la versión del intérprete
Perl. No cambie el PATH de manera que el intérprete perl5.10.1
se ejecute antes que el nativo.
En general, para acceder a la documentación de un módulo use perldoc en vez de man.
Para ejecutar perl5.10 escriba el nombre seguido de la versión:
casiano@millo:~$ perl5.10.1 -V
Summary of my perl5 (revision 5 version 10 subversion 1) configuration:
Platform:
osname=linux, osvers=2.6.24-21-generic, archname=i686-linux-thread-multi
uname='linux millo 2.6.24-21-generic #1 smp tue oct 21 23:43:45 utc 2008 i686 gnulinux '
config_args='-de -Dprefix=/soft/perl5lib/perl5_10_1/ -Dusethreads'
hint=recommended, useposix=true, d_sigaction=define
useithreads=define, usemultiplicity=define
useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
use64bitint=undef, use64bitall=undef, uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
optimize='-O2',
cppflags='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
ccversion='', gccversion='4.2.4 (Ubuntu 4.2.4-1ubuntu4)', gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
alignbytes=4, prototype=define
Linker and Libraries:
ld='cc', ldflags =' -fstack-protector -L/usr/local/lib'
libpth=/usr/local/lib /lib /usr/lib
libs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
perllibs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
libc=/lib/libc-2.7.so, so=so, useshrplib=false, libperl=libperl.a
gnulibc_version='2.7'
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
cccdlflags='-fPIC', lddlflags='-shared -O2 -L/usr/local/lib -fstack-protector'
Characteristics of this binary (from libperl):
Compile-time options: MULTIPLICITY PERL_DONT_CREATE_GVSV
PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP USE_ITHREADS
USE_LARGE_FILES USE_PERLIO USE_REENTRANT_API
Built under linux
Compiled at Aug 30 2009 09:34:30
%ENV:
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/"
@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/
/soft/perl5lib/perl5_10_1/lib/5.10.1/i686-linux-thread-multi
/soft/perl5lib/perl5_10_1/lib/5.10.1
/soft/perl5lib/perl5_10_1/lib/site_perl/5.10.1/i686-linux-thread-multi
/soft/perl5lib/perl5_10_1/lib/site_perl/5.10.1
Para acceder a la documentación relacionada con Perl 5.10 use el script perl5.10.1.doc:
casiano@millo:~$ perl5.10.1.doc -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
-L translation_code Choose doc translation (if any)
-X use index if present (looks for pod.idx at /soft/perl5lib/perl5_10_1/lib/5.10.1/i686-linux-thread-multi)
-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_04]
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