=head1 NOMBRE

perl - El intérprete del lenguaje Perl 5

=head1 SINOPSIS

B<perl> S<[ B<-sTtuUWX> ]>  S<[ B<-hv> ] [ B<-V>[:I<var_config>] ]>     S<[
B<-cw> ] [ B<-d>[B<t>][:I<depurador>] ] [ B<-D>[I<número/lista>] ]>     S<[
B<-pna> ] [ B<-F>I<patrón> ] [ B<-l>[I<octal>] ] [ B<-0>[I<octal/hexadecimal>]
]>   S<[ B<-I>I<dir> ] [ B<-m>[B<->]I<módulo> ] [ B<-M>[B<->]I<'módulo...'> ] [
B<-f> ]>     S<[ B<-C [I<número/lista>] >]>  S<[ B<-S> ]>    S<[ B<-x>[I<dir>]
]>    S<[ B<-i>[I<extensión>] ]>  S<[ [B<-e>|B<-E>] I<'comando'> ] [ B<--> ] [
I<archivo_programa> ] [ I<argumento> ]...>

=head1 CÓMO OBTENER AYUDA

El programa F<perldoc> proporciona acceso a toda la documentación incluida en
Perl.  Puede obtener más documentación, tutoriales y soporte de la comunidad en
línea en L<http://www.perl.org/>.

Si nunca ha programado en Perl, debe empezar por ejecutar C<perldoc perlintro>
para leer una introducción general para principiantes y aprender a orientarse
por la amplia documentación de Perl.  Ejecute C<perldoc perldoc> para ver qué
más puede hacer con <perldoc>.

Para facilitar el acceso, el manual de perl se ha dividido en varias secciones.

=head2 Introducción

    perl		Información general sobre Perl (esta sección)
    perlintro		Introducción a Perl para principiantes
    perltoc		Tabla de contenido de la documentación de Perl

=head2 Tutoriales

    perlreftut		Breve introducción a las referencias
    perldsc		Introducción a las estructuras de datos
    perllol		Estructuras de datos: arrays de arrays

    perlrequick 	Guía rápida de las expresiones regulares
    perlretut		Tutorial de expresiones regulares

    perlboot		Programación orientada a objetos para principiantes
    perltoot		Programación orientada a objetos, parte 1
    perltooc		Programación orientada a objetos, parte 2
    perlbot		Trucos y ejemplos de POO

    perlperf		Rendimiento y técnicas de optimización

    perlstyle		Guía de estilo

    perlcheat		Referencia rápida de Perl
    perltrap		Trampas para los incautos
    perldebtut		Tutorial de depuración

    perlfaq		Preguntas más frecuentes
      perlfaq1		Preguntas generales sobre Perl
      perlfaq2		Cómo obtener y aprender a utilizar Perl
      perlfaq3		Herramientas de programación
      perlfaq4		Manipulación de datos
      perlfaq5		Archivos y formatos
      perlfaq6		Expresiones regulares
      perlfaq7		Problemas del lenguaje Perl
      perlfaq8		Interacción con el sistema
      perlfaq9		Conexión a redes

=head2 Manual de referencia

    perlsyn		Sintaxis
    perldata		Estructuras de datos
    perlop		Operadores y precedencia
    perlsub		Subrutinas
    perlfunc		Funciones integradas
      perlopentut	Tutorial de open()
      perlpacktut	Tutorial de pack() y unpack()
    perlpod		Documentación en texto simple (POD)
    perlpodspec 	Especificación del formato POD
    perlpodstyle	Guía de estilo para POD
    perlrun		Ejecución y opciones de ejecución
    perldiag		Mensajes de diagnóstico
    perllexwarn 	Advertencias y control de advertencias
    perldebug		Depuración
    perlvar		Variables predefinidas
    perlre		Expresiones regulares: el resto de la historia
    perlrebackslash	Secuencias de escape en expresiones regulares
    perlrecharclass	Clases de caracteres en expresiones regulares
    perlreref		Referencia rápida de expresiones regulares
    perlref		Referencias: el resto de la historia
    perlform		Formatos
    perlobj		Objetos
    perltie		Objetos Perl ocultos en variables simples
      perldbmfilter	Filtros DBM

    perlipc		Comunicación entre procesos
    perlfork		Información sobre fork()
    perlnumber		Semántica de números

    perlthrtut		Tutorial de uso de hilos de ejecución

    perlport		Guía de portabilidad
    perllocale		Compatibilidad con la configuración regional
    perluniintro	Introducción a Unicode
    perlunicode 	Compatibilidad con Unicode
    perlunifaq		Preguntas más frecuentes sobre Unicode
    perluniprops	Índice de propiedades de Unicode versión 6.0.0
    perlunitut		Tutorial de Unicode
    perlebcdic		Ejecución de Perl en plataformas EBCDIC

    perlsec		Seguridad

    perlmod		Funcionamiento de un módulo Perl
    perlmodlib		Programación y utilización de módulos Perl
    perlmodstyle	Cómo programar módulos Perl con estilo
    perlmodinstall	Instalación de módulos de CPAN
    perlnewmod		Preparar la distribución de un módulo Perl nuevo
    perlpragma		Programación de un pragma de usuario

    perlutil		Utilidades empaquetadas en una distribución Perl

    perlcompile 	Herramientas de compilación de Perl

    perlfilter		Filtros de código fuente

    perlglossary	Glosario

=head2 Componentes e interfaz con el lenguaje C

    perlembed		Formas de integrar Perl en una aplicación C o C++
    perldebguts 	Componentes y consejos para la depuración
    perlxstut		Tutorial de XS
    perlxs		Interfaz de programación de aplicaciones XS
    perlclib		Sustitutos internos de la biblioteca de C estándar
    perlguts		Funciones internas para crear extensiones
    perlcall		Convenciones de llamada desde C
    perlmroapi		Interfaz de complementos: resolución de métodos
    perlreapi		Interfaz de complementos: expresiones regulares
    perlreguts		Componentes del motor de expresiones regulares

    perlapi		Lista de API
    perlintern		Funciones internas de Perl
    perliol		API en C para implementar en Perl las capas de E/S
    perlapio		Interfaz de abstracción de E/S interna

    perlhack		Guía para hackers
    perlsource		Guía del árbol de código fuente
    perlinterp		Descripción del código fuente y el funcionamiento del intérprete de Perl
    perlhacktut 	Tutorial de creación de una revisión sencilla de código C
    perlhacktips	Consejos para modificar el código C de los componentes de Perl
    perlpolicy		Directivas de desarrollo de Perl
    perlgit		Uso de git con el repositorio de Perl

=head2 Varios

    perlbook		Información de libros sobre Perl
    perlcommunity	Información sobre la comunidad Perl
    perltodo		Tareas pendientes

    perldoc		Consulta de la documentación de Perl en formato Pod

    perlhist		Registros históricos de Perl
    perldelta		Cambios con respecto a la versión anterior
    perl5140delta	Cambios en la versión 5.14.0
    perl51311delta	Cambios en la versión 5.13.11
    perl51310delta	Cambios en la versión 5.13.10
    perl5139delta	Cambios en la versión 5.13.9
    perl5138delta	Cambios en la versión 5.13.8
    perl5137delta	Cambios en la versión 5.13.7
    perl5136delta	Cambios en la versión 5.13.6
    perl5135delta	Cambios en la versión 5.13.5
    perl5134delta	Cambios en la versión 5.13.4
    perl5133delta	Cambios en la versión 5.13.3
    perl5132delta	Cambios en la versión 5.13.2
    perl5131delta	Cambios en la versión 5.13.1
    perl5130delta	Cambios en la versión 5.13.0
    perl5123delta	Cambios en la versión 5.12.3
    perl5122delta	Cambios en la versión 5.12.2
    perl5121delta	Cambios en la versión 5.12.1
    perl5120delta	Cambios en la versión 5.12.0
    perl5115delta	Cambios en la versión 5.11.5
    perl5114delta	Cambios en la versión 5.11.4
    perl5113delta	Cambios en la versión 5.11.3
    perl5112delta	Cambios en la versión 5.11.2
    perl5111delta	Cambios en la versión 5.11.1
    perl5110delta	Cambios en la versión 5.11.0
    perl5101delta	Cambios en la versión 5.10.1
    perl5100delta	Cambios en la versión 5.10.0
    perl595delta	Cambios en la versión 5.9.5
    perl594delta	Cambios en la versión 5.9.4
    perl593delta	Cambios en la versión 5.9.3
    perl592delta	Cambios en la versión 5.9.2
    perl591delta	Cambios en la versión 5.9.1
    perl590delta	Cambios en la versión 5.9.0
    perl589delta	Cambios en la versión 5.8.9
    perl588delta	Cambios en la versión 5.8.8
    perl587delta	Cambios en la versión 5.8.7
    perl586delta	Cambios en la versión 5.8.6
    perl585delta	Cambios en la versión 5.8.5
    perl584delta	Cambios en la versión 5.8.4
    perl583delta	Cambios en la versión 5.8.3
    perl582delta	Cambios en la versión 5.8.2
    perl581delta	Cambios en la versión 5.8.1
    perl58delta 	Cambios en la versión 5.8.0
    perl573delta	Cambios en la versión 5.7.3
    perl572delta	Cambios en la versión 5.7.2
    perl571delta	Cambios en la versión 5.7.1
    perl570delta	Cambios en la versión 5.7.0
    perl561delta	Cambios en la versión 5.6.1
    perl56delta 	Cambios en la versión 5.6
    perl5005delta	Cambios en la versión 5.005
    perl5004delta	Cambios en la versión 5.004

    perlartistic	Licencia Artistic de Perl
    perlgpl		Licencia GNU General Public License

=head2 Idiomas específicos

    perlcn		Perl para chino simplificado (en EUC-CN)
    perljp		Perl para japonés (en EUC-JP)
    perlko		Perl para coreano (en EUC-KR)
    perltw		Perl para chino tradicional (en Big5)

=head2 Información específica de plataformas

    perlaix		Notas para AIX
    perlamiga		Notas para AmigaOS
    perlbeos		Notas para BeOS
    perlbs2000		Notas para POSIX-BC BS2000
    perlce		Notas para WinCE
    perlcygwin		Notas para Cygwin
    perldgux		Notas para DG/UX
    perldos		Notas para DOS
    perlepoc		Notas para EPOC
    perlfreebsd 	Notas para FreeBSD
    perlhaiku		Notas para Haiku
    perlhpux		Notas para HP-UX
    perlhurd		Notas para Hurd
    perlirix		Notas para Irix
    perllinux		Notas para Linux
    perlmacos		Notas para Mac OS (Classic)
    perlmacosx		Notas para Mac OS X
    perlmpeix		Notas para MPE/iX
    perlnetware 	Notas para NetWare
    perlopenbsd 	Notas para OpenBSD
    perlos2		Notas para OS/2
    perlos390		Notas para OS/390
    perlos400		Notas para OS/400
    perlplan9		Notas para Plan 9
    perlqnx		Notas para QNX
    perlriscos		Notas para RISC OS
    perlsolaris 	Notas para Solaris
    perlsymbian 	Notas para Symbian
    perltru64		Notas para Tru64
    perluts		Notas para UTS
    perlvmesa		Notas para VM/ESA
    perlvms		Notas para VMS
    perlvos		Notas para Stratus VOS
    perlwin32		Notas para Windows


En un sistema Unix, esta documentación estará también disponible, por lo
general, en forma de páginas de manual que se pueden consultar con el programa
F<man>.

Si sucede algo raro con el programa y no está seguro de dónde debe buscar
ayuda, pruebe primero el modificador B<-w>. Normalmente le indicará dónde está
el problema.

=head1 DESCRIPCIÓN

Oficialmente, Perl significa Practical Extraction and Report Language
(I<Lenguaje práctico para la extracción de datos y creación de informes>),
salvo cuando no se usa para eso.

Perl se creó como un lenguaje optimizado para procesar archivos de texto, a fin
de extraer información y utilizarla para generar informes. Pronto se convirtió
en un lenguaje útil para muchas tareas de administración de sistemas. Con los
años, Perl se ha convertido en un lenguaje de programación de propósito
general. Se utiliza para todo tipo de desarrollos, desde "programas de una
línea" hasta aplicaciones a gran escala.

El lenguaje se diseñó para ser práctico (fácil de usar, eficaz, completo), más
que estético (reducido, elegante, minimalista).

Perl combina (en opinión del autor) algunas de las mejores características de
C, B<sed>, B<awk> y B<sh>, por lo que las personas familiarizadas con estos
lenguajes aprenderán Perl fácilmente (los historiadores de los lenguajes
también destacarán algunos vestigio de B<csh>, Pascal e incluso BASIC-PLUS). La
sintaxis de expresiones es muy parecida a la de C. A diferencia de la mayoría
de las utilidades Unix, Perl no limita de forma arbitraria el tamaño de los
datos; si el sistema dispone de memoria suficiente, puede "succionar" un
archivo completo como una sola cadena. La profundidad de recursión es
ilimitada. Y las tablas usadas por los hashes (a veces denominados "arrays
asociativos") se expanden cuando es necesario para que el rendimiento no se vea
afectado. Perl puede utilizar sofisticadas técnicas de detección de patrones
para analizar rápidamente grandes cantidades de datos. Aunque está optimizado
para el procesamiento de texto, también incluye muchas herramientas magníficas
para procesar datos binarios.

Pero esto no es todo.

En 1993 (véase L<perlhist>) se lanzó Perl 5, prácticamente una reescritura
completa del lenguaje, que proporciona las siguientes ventajas adicionales:

=over 4

=item *

modularidad y capacidad de reutilización gracias a numerosos módulos

Se describe en L<perlmod>, L<perlmodlib> y L<perlmodinstall>.

=item *

capacidad de integración y ampliación

Se describe en L<perlembed>, L<perlxstut>, L<perlxs>, L<perlcall>, L<perlguts>
y L<xsubpp>.

=item *

permite al usuario crear sus propias "variables mágicas" (incluidas varias
implementaciones simultáneas de DBM)

Se describe en L<perltie> y L<AnyDBM_File>.

=item *

subrutinas que se pueden reemplazar, cargar automáticamente y prototipar

Se describe en L<perlsub>

=item *

estructuras de datos anidadas de profundidad arbitraria y funciones anónimas

Se describe en L<perlreftut>, L<perlref>, L<perldsc> y L<perllol>.

=item *

programación orientada a objetos

Se describe en L<perlobj>, L<perlboot>, L<perltoot>, L<perltooc> y L<perlbot>.

=item *

compatibilidad con procesos ligeros (hilos de ejecución)

Se describe en L<perlthrtut> y L<threads>.

=item *

compatibilidad con Unicode, internacionalización y localización

Se describe en L<perluniintro>, L<perllocale> y L<Locale::Maketext>.

=item *

ámbito léxico

Se describe en L<perlsub>

=item *

mejoras de las expresiones regulares

Se describe en L<perlre>, con ejemplos adicionales en L<perlop>.

=item *

depurador mejorado y entorno Perl interactivo, compatible con un editor
integrado

Se describe en L<perldebtut>, L<perldebug> y L<perldebguts>.

=item *

biblioteca compatible con POSIX 1003.1

Se describe en L<POSIX>.

=back

Entre otras...

=head1 DISPONIBILIDAD

Perl está disponible para la mayoría de los sistemas operativos (incluidas
prácticamente todas las plataformas Unix). Encontrará una lista en la sección
"Plataformas compatibles" de L<perlport>.

=head1 ENTORNO

Vea L<perlrun>.

=head1 AUTOR

Larry Wall <larry@wall.org>, con la ayuda de muchas personas.

Si considera que sus éxitos con Perl y sus testimonios pueden ayudar a otros
programadores que desean utilizar Perl en sus proyectos, o si simplemente
quiere expresar su gratitud a Larry y a los demás programadores de Perl,
escriba un mensaje a la dirección perl-thanks@perl.org .

=head1 ARCHIVOS

 "@INC"			ubicación de bibliotecas de Perl

=head1 VEA TAMBIÉN

 http://www.perl.org/       página de inicio del lenguaje Perl
 http://www.perl.com/       artículos sobre Perl (O'Reilly)
 http://www.cpan.org/       Comprehensive Perl Archive Network
 http://www.pm.org/         el sitio de Perl Mongers

=head1 DIAGNÓSTICO

El pragma C<use warnings> (y el modificador B<-w>) produce algunos diagnósticos
muy interesantes.

Encontrará en L<perldiag> las descripciones de todos los diagnósticos de Perl. 
El pragma C<use diagnostics> convierte automáticamente las advertencias y
errores de Perl, normalmente escuetos, en estos mensajes más desarrollados.

Los errores de compilación le indicarán el número de línea del error, además
del siguiente símbolo o tipo de símbolo que iba a ser examinado. (En un script
pasado a Perl a través de modificadores B<-e>, cada B<-e> cuenta como una
línea.)

Los scripts setuid tienen restricciones adicionales que pueden producir
mensajes de error como "Insecure dependency" (dependencia insegura). Vea
L<perlsec>.

No olvide que es muy importante utilizar el modificador B<-w>.

=head1 ERRORES

El uso del modificador B<-w> no es obligatorio.

Perl depende de las definiciones de hardware para diversas operaciones, como la
conversión de tipos, atof() o la salida de números de punto flotante con
sprintf().

Si stdio requiere ejecutar seek o eof entre lecturas y escrituras para una
secuencia determinada, Perl también lo requerirá (esto no se aplica a
sysread() ni a syswrite()).

Aunque ninguno de los tipos de datos predefinidos tiene un límite de tamaño
(aparte del tamaño de la memoria disponible), hay algunos límites arbitrarios.
Por ejemplo, un nombre de variable no puede tener más de 251 caracteres. Por
otra parte, los números de línea especificados por los diagnósticos se
almacenan internamente como enteros cortos, por lo que están limitados a un
máximo de 65535 (cifras más altas quedarán afectadas por el desbordamiento).

Puede enviar informes de error a través de la dirección perlbug@perl.org (no
olvide incluir toda la información de configuración emitida por el programa
myconfig en el árbol de código fuente de perl, o por C<perl -V>). Si ha logrado
compilar perl, puede utilizar el script L<perlbug> del subdirectorio F<utils/>
para enviar informes de error.

En realidad Perl significa Pathologically Eclectic Rubbish Lister (Presentador
de basura patológicamente ecléctico), pero nadie debe enterarse de esto :-).

=head1 NOTAS

El lema de Perl es "Se puede hacer de varias maneras". Dejamos como ejercicio
para el lector averiguar de cuántas maneras se puede hacer :-).

Las tres virtudes principales de un buen programador son la pereza, la
impaciencia y la confianza en sí mismo. Consulte el "Libro del Camello" (en
concreto, camello arábigo, o dromedario) para averiguar por qué.


=head1 TRADUCTORES

=over

=item * Joaquín Ferrero (Tech Lead), C< explorer + POD2ES at joaquinferrero.com >

=item * Enrique Nell (Language Lead), C< blas.gordon + POD2ES at gmail.com >

=back

