fbpx
Wikipedia

Perl

Perl es un lenguaje de programación diseñado por Larry Wall en 1987. Perl toma características del lenguaje C, del lenguaje interpretado bourne shell (sh), AWK, sed, Lisp y, en un grado inferior, de muchos otros lenguajes de programación.

Perl
Desarrollador(es)
Larry Wall
https://www.perl.org/ y https://dev.perl.org/perl5/
Información general
Extensiones comunes pl y pm
Paradigma multiparadigma, funcional, imperativa, orientado a objetos (basado en clases), reflexiva, procedural, eventos, genérica
Apareció en 18 de diciembre de 1987 (33 años, 10 meses y 6 días)
Diseñado por Larry Wall
Última versión estable

5.34.0[1]​ / 20 de mayo de 2021 (5 meses y 4 días)

5.32.1[2]​ / 23 de enero de 2021 (9 meses y 1 día)
Última versión en pruebas 5.35.5[3](21 de octubre de 2021 (3 días))
Sistema de tipos dinámico
Implementaciones Perl, mod_perl, embperl
Dialectos Perl 5, Raku
Influido por AWK, Smalltalk 80, Lisp, C, C++, Pascal, sed, Unix shell
Ha influido a Python, PHP, Ruby, ECMAScript, LPC, Windows PowerShell, JavaScript, Falcon
Sistema operativo Multiplataforma, muchos (más de 100)
Licencia GPL, Licencia Artística

Estructuralmente, Perl está basado en un estilo de bloques como los del C o AWK, y fue ampliamente adoptado por su destreza en el procesado de texto y no tener ninguna de las limitaciones de los otros lenguajes de script.

Historia

Larry Wall comenzó a trabajar en Perl en 1987 mientras trabajaba como programador en Unisys[4]​ y anunció la versión 1.0 en el grupo de noticias comp.sources.misc el 18 de diciembre de 1987. El lenguaje se expandió rápidamente en los siguientes años. Perl 2, publicado en 1988, aportó un mejor motor de expresiones regulares. Perl 3, publicado en 1989, añadió soporte para datos binarios.

Hasta 1991 la única documentación de Perl era una simple (y cada vez más larga) página de manual Unix. En 1991 se publicó Programming Perl (el libro del camello) y se convirtió en la referencia de facto del lenguaje. Al mismo tiempo, el número de versión de Perl saltó a 4, no por marcar un gran cambio en el lenguaje, sino por identificar a la versión que estaba documentada en el libro.

Perl 4 trajo consigo una serie de lanzamientos de mantenimiento, culminando en Perl 4.036 en 1993. En este punto, Larry Wall abandonó Perl 4 para comenzar a trabajar en Perl 5. Perl 4 se quedaría en esa versión hasta hoy.

El desarrollo de Perl 5 continuó en 1994. La lista de correo perl5-porters se estableció en mayo de 1994 para coordinar el trabajo de adaptación de Perl 5 a diferentes plataformas. Es el primer foro para desarrollo, mantenimiento y adaptación de Perl 5.

Perl 5 fue publicado el 17 de octubre de 1994. Fue casi una completa reescritura del intérprete y añadió muchas nuevas características al lenguaje, incluyendo objetos, referencias, paquetes y módulos. A destacar, los módulos proveen de un mecanismo para extender el lenguaje sin modificar el intérprete. Esto permitió estabilizar su núcleo principal, además de permitir a los programadores de Perl añadirle nuevas características.

Versión[5] Actualización[6]
Versión antigua, sin servicio técnico: 5.4 1999-04-29
Versión antigua, sin servicio técnico: 5.5 1999-03-29
Versión antigua, sin servicio técnico: 5.6 2003-11-15
Versión antigua, sin servicio técnico: 5.8 2008-12-14
Versión antigua, sin servicio técnico: 5.10 2009-08-23
Versión antigua, sin servicio técnico: 5.12 2012-11-10
Versión antigua, sin servicio técnico: 5.14 2013-03-10
Versión antigua, sin servicio técnico: 5.16 2013-03-11
Versión antigua, sin servicio técnico: 5.18 2014-10-02
Versión antigua, sin servicio técnico: 5.20 2015-09-12
Versión antigua, sin servicio técnico: 5.22 2017-07-15
Versión antigua, sin servicio técnico: 5.24 2018-04-14
Versión antigua, sin servicio técnico: 5.26 2018-11-29
Versión antigua, sin servicio técnico: 5.28 2020-06-01
Versión antigua, sin servicio técnico: 5.30 2020-06-01
Versión antigua, con servicio técnico: 5.32 2021-01-23
Versión estable actual: 5.34 2021-05-20
Última versión prevista para lanzamiento: 5.35 2021-05-21
Lanzamiento futuro: 5.36 2022-05-20
Lanzamiento futuro: 7.0 ¿2022?
Leyenda:
Versión antigua
Versión antigua, con servicio técnico
Versión actual
Última versión prevista
Lanzamiento futuro

El 26 de octubre de 1995, se creó el Comprehensive Perl Archive Network (CPAN). CPAN es una colección de sitios web que almacenan y distribuyen fuentes en Perl, binarios, documentación, scripts y módulos. Originalmente, cada sitio CPAN debía ser accedido a través de su propio URL; hoy en día, http://www.cpan.org redirige automáticamente a uno de los cientos de repositorios espejo de CPAN.

En 2008, Perl 5 continúa siendo mantenido. Características importantes y algunas construcciones esenciales han sido añadidas, incluyendo soporte Unicode, hilos, un soporte importante para la programación orientada a objetos y otras mejoras.

Nombre

Perl se llamó originalmente "Pearl". Larry Wall quería darle al lenguaje un nombre corto con connotaciones positivas; asegura que miró (y rechazó) todas las combinaciones de tres y cuatro letras del diccionario. También consideró nombrarlo como su esposa Gloria. Wall descubrió antes del lanzamiento oficial que ya existía un lenguaje de programación llamado PEARL y cambió la ortografía del nombre.

El nombre normalmente comienza con mayúscula (Perl) cuando se refiere al lenguaje y con minúscula (perl) cuando se refiere al propio programa intérprete debido a que los sistemas de ficheros Unix distinguen mayúsculas y minúsculas. Antes del lanzamiento de la primera edición de Programming Perl era común referirse al lenguaje como perl; Randal L. Schwartz, sin embargo, forzó el nombre en mayúscula en el libro para que destacara mejor cuando fuera impreso. La distinción fue subsiguientemente adoptada por la comunidad.

El nombre es descrito ocasionalmente como "PERL" (por Practical Extraction and Report Language - Lenguaje Práctico para la Extracción e Informe). Aunque esta expansión ha prevalecido en muchos manuales actuales, incluyendo la página de manual de Perl, es un retroacrónimo y oficialmente el nombre no quiere decir nada. La ortografía de PERL en mayúsculas es por eso usada como jerga para detectar a individuos ajenos a la comunidad. Sin embargo, se han sugerido varios retroacrónimos, incluyendo el cómico Pathologically Eclectic Rubbish Lister (Contabilizador de Basura Patológicamente Ecléctico).

El símbolo del camello

Perl se simboliza generalmente por un camello de una sola joroba (camello arábigo o dromedario), que fue la imagen elegida por el editor O'Reilly para la cubierta de Programming Perl, que por consiguiente adquirió el nombre de El Libro del Camello.[4]​ O'Reilly es propietario de este símbolo como marca registrada, pero dice que usa sus derechos legales solo para proteger la "integridad e impacto de este símbolo".[7]​ O'Reilly permite el uso no comercial del símbolo, y ofrece logos y botones .

Desde hace unos años, y para evitar este tipo de problemas con la licencia comercial, la Fundación Perl elaboró nuevos logotipos basados en una cebolla, a raíz de las conferencias anuales que Larry Wall ofrece con el título: State of the Onion ("Estado de la Cebolla") Onion se pronuncia muy parecido a Union, por lo que suena parecido a State of the Union ("Estado de la Unión"), evento en el cual el Presidente de los Estados Unidos informa a los ciudadanos del estado en que se encuentra su país.

Descripción

La página de manual Unix perlintro(1) dice:

Perl es un lenguaje de propósito general originalmente desarrollado para la manipulación de texto y que ahora es utilizado para un amplio rango de tareas incluyendo administración de sistemas, desarrollo web, programación en red, desarrollo de GUI y más.


Se previó que fuera práctico (facilidad de uso, eficiente, completo) en lugar de hermoso (pequeño, elegante, mínimo). Sus principales características son que es fácil de usar, soporta tanto la programación estructurada como la programación orientada a objetos y la programación funcional (véase Higher-Order Perl: Transforming Programs with Programs), tiene incorporado un poderoso sistema de procesamiento de texto y una enorme colección de módulos disponibles.

Características

La estructura completa de Perl deriva ampliamente del lenguaje C. Perl es un lenguaje imperativo, con variables, expresiones, asignaciones, bloques de código delimitados por llaves, estructuras de control y subrutinas.

Perl también toma características de la programación shell. Todas las variables son marcadas con un Sigilo precedente (Sigil, en inglés). Los sigilos identifican inequívocamente los nombres de las variables, permitiendo a Perl tener una rica sintaxis. Notablemente, los sigilos permiten interpolar variables directamente dentro de las cadenas de caracteres (string). Como en los shell, Perl tiene muchas funciones integradas para tareas comunes y para acceder a los recursos del sistema.

Perl toma las listas del Lisp, hash (memoria asociativa) del AWK y expresiones regulares del sed. Todo esto simplifica y facilita todas las formas del análisis sintáctico, manejo de texto y tareas de gestión de datos.

En Perl 5, se añadieron características para soportar estructuras de datos complejas, funciones de primer orden (p. e. clausuras como valores) y un modelo de programación orientada a objetos. Estos incluyen referencias, paquetes y una ejecución de métodos basada en clases y la introducción de variables de ámbito léxico, que hizo más fácil escribir código robusto (junto con el pragma strict). Una característica principal introducida en Perl 5 fue la habilidad de empaquetar código reutilizable como módulos. Larry Wall indicó más adelante que "la intención del sistema de módulos de Perl 5 era apoyar el crecimiento de la cultura Perl en vez del núcleo de Perl".[8]

Todas las versiones de Perl hacen el tipificado automático de datos y la gestión de memoria. El intérprete conoce el tipo y requerimientos de almacenamiento de cada objeto en el programa; reserva y libera espacio para ellos según sea necesario. Las conversiones legales de tipo se hacen de forma automática en tiempo de ejecución; las conversiones ilegales son consideradas errores fatales.

Diseño

El diseño de Perl puede ser entendido como una respuesta a tres amplias tendencias de la industria informática: rebaja de los costes en el hardware, aumento de los costes laborales y las mejoras en la tecnología de compiladores. Anteriormente, muchos lenguajes de ordenador como Fortran y C, fueron diseñados para hacer un uso eficiente de un hardware caro. En contraste, Perl es diseñado para hacer un uso eficiente de los costosos programadores de ordenador.

Perl tiene muchas características que facilitan la tarea del programador a costa de unos requerimientos de CPU y memoria mayores. Estas incluyen gestión de memoria automática; tipo de dato dinámico; strings, listas y hashes; expresiones regulares; introspección y una función eval().

Larry Wall fue adiestrado como lingüista y el diseño de Perl ha sido muy aleccionado con principios lingüísticos. Ejemplos incluyen la Codificación Huffman (las construcciones más comunes deben ser las más cortas), buena distribución (la información importante debe ir primero) y una larga colección de primitivas del lenguaje. Perl favorece las construcciones del lenguaje, tan naturales, como para los humanos son la lectura y la escritura, incluso si eso hace más complicado al intérprete Perl.

La sintaxis de Perl refleja la idea de que "cosas que son diferentes deben parecer diferentes". Por ejemplo, escalares, arrays y hashes tienen diferente sigilo. Índices de array y claves hash usan diferentes clases de paréntesis. Strings y expresiones regulares tienen diferentes delimitadores estándar. Esta aproximación puede contrastarse con lenguajes como Lisp, donde la misma construcción S-expresión y sintaxis básica se usa para muchos y variados propósitos.

Perl tiene características que soportan una variedad de paradigmas de programación, como la imperativa, funcional y la orientada a objetos. Al mismo tiempo, Perl no obliga a seguir ningún paradigma en particular, ni obliga al programador a elegir alguna de ellas.

Hay un amplio sentido de lo práctico, tanto en el lenguaje Perl como en la comunidad y la cultura que lo rodean. El prefacio de Programming Perl comienza con, "Perl es un lenguaje para tener tu trabajo terminado". Una consecuencia de esto es que Perl no es un lenguaje ordenado. Incluye características si la gente las usa, tolera excepciones a las reglas y emplea la heurística para resolver ambigüedades sintácticas. Debido a la naturaleza indulgente del compilador, a veces los errores pueden ser difíciles de encontrar. Hablando del variado comportamiento de las funciones internas en los contextos de lista y escalar, la página de manual de perlfunc(1) dice "En general, hacen lo que tu quieras, siempre que quieras la coherencia."

Perl tiene varios lemas que transmiten aspectos de su diseño y uso. Uno es There's more than one way to do it (Hay más de una forma de hacerlo) (TMTOWTDI, usualmente pronunciado 'Tim Toady'). Otros son "Perl: la motosierra del ejército Suizo de los lenguajes de programación" y "Límites imprecisos". Una meta prefijada de Perl es hacer las cosas fáciles de forma fácil y las tareas difíciles, posibles. A Perl también se le ha llamado "El esparadrapo de Internet".

Aplicaciones

 
La LAMP comprende Perl (aquí con Squid)

Perl tiene muchas y variadas aplicaciones, gracias a la disponibilidad de muchos módulos estándares y de terceras partes.

Se ha usado desde los primeros días del Web para escribir guiones (scripts) CGI. Es una de las "tres Pes" (Perl, Python y PHP), que son los lenguajes más populares para la creación de aplicaciones Web, y es un componente integral de la popular solución LAMP para el desarrollo web. Grandes proyectos escritos en Perl son Slash, IMDb[9]​ y UseModWiki, un motor de Wiki. Muchos sitios web con alto tráfico, como Amazon.com y Ticketmaster.com usan Perl extensamente.

Perl se usa a menudo como un "lenguaje pegamento", ligando sistemas e interfaces que no fueron diseñados específicamente para interoperar; y para el "escarbado de datos", convirtiendo o procesando grandes cantidades de datos para tareas como por ejemplo crear informes. De hecho, estas fortalezas están íntimamente unidas. Su combinación hace a Perl una popular herramienta de propósito general para los administradores de sistemas, especialmente en programas pequeños que pueden ser escritos y ejecutados en una sola línea de comandos.

Perl es también ampliamente usado en finanzas y bioinformática, donde es apreciado por su desarrollo rápido, tanto de aplicaciones como de despliegue, así como la habilidad de manejar grandes volúmenes de datos.

Implementación

Perl está implementado como un intérprete, escrito en C, junto con una gran colección de módulos, escritos en Perl y C. La distribución fuente tiene, en 2005, 12 MB cuando se empaqueta y comprime en un fichero tar. El intérprete tiene 150.000 líneas de código C y se compila en un ejecutable de 1 MB en las arquitecturas de hardware más típicas. De forma alternativa, el intérprete puede ser compilado como una biblioteca y ser embebida en otros programas. Hay cerca de 500 módulos en la distribución, sumando 200.000 líneas de Perl y unas 350.000 líneas adicionales de código C. Mucho del código C en los módulos consiste en tablas de codificación de caracteres.

El intérprete tiene una arquitectura orientada a objetos. Todos los elementos del lenguaje Perl —escalares, listas, hashes, referencias a código, manejadores de archivo— están representados en el intérprete como estructuras C. Las operaciones sobre estas estructuras están definidas como una numerosa colección de macros, typedef y funciones; esto constituye la API C de Perl. La API Perl puede ser desconcertante para el no iniciado, pero sus puntos de entrada siguen un esquema de nombres coherente, que ayuda a los que quieran utilizarla.

La ejecución de un programa Perl se puede dividir, generosamente, en dos fases: tiempo de compilación y tiempo de ejecución.[10]​ En tiempo de compilación el intérprete parsea el texto del programa en un árbol sintáctico. En tiempo de ejecución, ejecuta el programa siguiendo el árbol. El texto es parseado solo una vez y el árbol sintáctico es optimizado antes de ser ejecutado, para que la fase de ejecución sea relativamente eficiente. Las optimizaciones del árbol sintáctico en tiempo de compilación incluyen simplificación de expresiones constantes, propagación del contexto y optimización en trozos sueltos de código. Sin embargo, las fases de compilación y ejecución pueden anidarse: un bloque BEGIN se ejecuta en tiempo de compilación, mientras que una función eval inicia una compilación durante una ejecución. Ambas operaciones están implícitas en otras -de forma notable, la cláusula use que carga bibliotecas, conocidas en Perl como módulos, implica un bloque BEGIN.

Perl es un lenguaje dinámico y tiene una gramática sensible al contexto que puede quedar afectada por el código ejecutado durante una fase de ejecución intermedia (Ver ejemplos.[11]​). Por eso Perl no puede ser parseado mediante una aplicación directa de analizadores sintácticos/parseadores Lex/Yacc. En cambio, el intérprete implementa su propio analizador léxico, que coordinado con un parseador modificado GNU bison resuelve las ambigüedades del lenguaje. Se ha dicho que "solo perl puede parsear Perl", queriendo decir que solo el intérprete Perl (perl) puede parsear el lenguaje Perl (Perl). La razón de esto se atestigua por las persistentes imperfecciones de otros programas que emprenden la tarea de parsear Perl, como los analizadores de código y los auto-indentadores, que tienen que vérselas no solo con las muchas formas de expresar inequívocamente construcciones sintácticas, sino también con el hecho de que también Perl no puede, en general, ser parseado sin antes ser ejecutado.

El mantenimiento del intérprete Perl, a lo largo de los años, se ha vuelto cada vez más difícil. El núcleo ha estado en continuo desarrollo desde 1994. El código ha sido optimizado en rendimiento a expensas de la simplicidad, claridad y unas interfaces internas más fuertes. Nuevas características han sido añadidas, manteniendo todavía, compatibilidad virtualmente completa hacia atrás con las primeras versiones. El tamaño y la complejidad del intérprete son una barrera para los desarrolladores que desean trabajar en él.

Perl es distribuido con unos 120.000 test funcionales. Estos se ejecutan como parte del proceso normal de construcción y comprueban extensamente al intérprete y a sus módulos principales. Los desarrolladores Perl confían en los test funcionales para asegurarse que los cambios en el intérprete no introducen errores; recíprocamente, los usuarios Perl que vean al intérprete pasar los test funcionales en su sistema pueden tener un alto grado de confianza de que está funcionando adecuadamente.

No hay una especificación o estándar escrito para el lenguaje Perl y no hay planes de crear uno para la versión actual de Perl. Siempre ha existido solo una implementación del intérprete. Este intérprete, junto con los test funcionales, forman la especificación de facto del lenguaje.

Disponibilidad

Perl es software libre y está licenciado bajo la Licencia Artística y la GNU General Public License. Existen distribuciones disponibles para la mayoría de sistemas operativos. Está especialmente extendido en Unix y en sistemas similares, pero ha sido portado a las plataformas más modernas (y otras más obsoletas). Con solo seis excepciones confirmadas, puede ser compilado desde el código fuente en todos los Unix, compatibles POSIX o cualquier otra plataforma Unix compatible. Sin embargo, esto no es normalmente necesario, porque Perl está incluido por defecto en la instalación de los sistemas operativos más populares.[12]

Debido a los cambios especiales necesarios para soportar al Mac OS Classic, existe una adaptación especial llamada .[13]

GNU/Linux

Perl está preinstalado en las distribuciones más populares de GNU/Linux incluyendo Gentoo, Slackware, Mandriva, Debian, RedHat y SUSE.

Windows

Los usuarios de Microsoft Windows normalmente instalan una distribución binaria de Perl.[14]​ Compilar Perl desde el código fuente bajo Windows es posible, pero la mayoría de las instalaciones no disponen del necesario compilador de C.

La capa de emulación Cygwin proporciona otra forma de correr Perl bajo Windows. Cygwin proporciona en entorno parecido al Unix en Windows que incluye gcc, por lo que compilar Perl desde el código es una opción accesible para los usuarios que prefieren esta opción.

En junio de 2006, win32.perl.org fue lanzado por Adam Kennedy en nombre de la Fundación Perl. Es una comunidad web "para todo lo relacionado con Windows y Perl".[15]

Estructura del lenguaje

Programa ejemplo

En Perl, el programa canónico "Hola mundo" es:

#!/usr/bin/perl print "¡Hola mundo!\n"; 

La primera línea contiene el shebang (par de caracteres que identifica el texto que sigue), que le indica al sistema operativo dónde encontrar el intérprete de Perl. La segunda imprime el string ¡Hola mundo! y un carácter de nueva línea.

El shebang es la forma normal para invocar al intérprete en los sistemas Unix. Los sistemas Windows pueden seguir utilizándolo o pueden asociar la extensión de archivo .pl con el intérprete Perl. Algunos editores de texto también usan la línea shebang como una pista sobre el modo de trabajo en que deben operar. Si el programa es ejecutado por perl y no invocado por el shell, la línea que empieza por el shebang es parseada para interpretar las opciones. En otro caso, es ignorada. Para ver los detalles de esto, consultar la página de manual perlrun.

Tipos de datos

Perl tiene tres tipos de datos: escalares, listas y hashes:

  • Un escalar es un solo valor; puede ser un número, un string (cadena de caracteres) o una referencia
  • Una lista es una colección ordenada de escalares (una variable que almacena una lista se llama array)
  • Un hash, o memoria asociativa, es un mapeo de strings a escalares; los strings se llaman claves y los escalares valores.

Todas las variables están precedidas por un sigilo, que identifica el tipo de dato que es accedido (no el tipo de dato de la misma variable). Se puede usar el mismo nombre para variables de diferentes tipos, sin que tengan conflictos.

$var # un escalar @var # un array %var # un hash 

Los números se escriben de la forma usual; los strings están rodeados entre comillas de varias clases.

$n = 42; $nombre = "juan"; $color = 'rojo'; 

Perl convertirá los strings en números y viceversa dependiendo del contexto en que sean usados. En el siguiente ejemplo los strings $n y $m son tratados como números cuando son argumentos del operador suma. Este código imprime el número '5', desechando cualquier información no numérica de la operación y dejando los valores de las variables intactos. (El operador de concatenación no es +, sino ..)

$n = "3 manzanas"; $m = "2 naranjas"; print $n + $m; 

Perl también tiene un contexto booleano que utiliza en la evaluación de declaraciones condicionales. Los siguientes valores en Perl evalúan todos como falso:

$falso = 0; # el número cero $falso = 0.0; # el número cero como flotante $falso = '0'; # el string cero $falso = ""; # el string vacío $falso = undef; # el valor devuelto por undef 

Todos los demás valores se evalúan a verdadero. Esto incluye el curioso string auto-descriptivo "0 pero verdadero", que de hecho es 0 como número, pero verdadero como booleano. (Cualquier string no numérico también tendrá esta propiedad, pero este string en particular es ignorado por Perl en contextos numéricos). Las expresiones booleanas evaluadas también devuelven valores escalares. Aunque la documentación no indica qué valor particular se devuelve como verdadero o falso (y por lo tanto no fiable), muchos operadores booleanos devuelven 1 por verdadero y el string vacío para falso (que evalúa a cero en contexto numérico). La función defined() le dice si la variable tiene algún valor. En el ejemplo anterior defined($falso) será verdadero con cada uno de los valores anteriores, excepto undef. Si, específicamente, quiere asegurarse de tener un resultado 1/0 (como en C), necesita realizar el cálculo siguiente:

my $resultado_real = $resultado_booleano ? 1 : 0; 

Una lista se define listando sus elementos, separados por comas y rodeados por paréntesis donde así sea requerido por la precedencia de los operadores.

@puntuaciones = (32, 45, 16, 5); 

Un hash puede ser inicializado desde una lista de pares clave/valor.

%favorito = ( joe => 'rojo', sam => 'azul', ); 

Los elementos individuales de una lista son accedidos utilizando un índice numérico, dentro de corchetes. Valores individuales en un hash son accedidos utilizando la correspondiente clave, dentro de llaves. El sigilo $ identifica que el elemento accedido es un escalar.

$puntuaciones[2] # un elemento de @puntuaciones $favorito{joe} # un valor de %favorito 

Múltiples elementos pueden ser accedidos usando en su lugar el sigilo @ (identificando el resultado como una lista).

@puntuaciones[2, 3, 1] # tres elementos de @puntuaciones @favorito{'joe', 'sam'} # dos valores de %favorito 

El número de elementos en un array puede ser obtenido evaluando el array en contexto escalar o con la ayuda del sigilo $#. Este último da el índice del último elemento dentro del array, no el número de elementos.

$numero = @amigos; $#amigos; # el índice del último elemento en @amigos $#amigos+1; # normalmente el número de elementos en @amigos,  # que es uno más que $#amigos porque el primer elemento tiene el índice 0, no 1 

Hay unas pocas funciones que operan sobre hashes enteros.

@nombres_de_clientes = keys %direcciones; # guarda en @nombres_de_clientes todas las claves de %direcciones @direcciones_de_email = values %direcciones; # guarda en @direcciones_de_email todos los valores de %direcciones 

Estructuras de control

Perl tiene varias clases de estructuras de control.

Tiene estructuras de control orientado al bloque, similar a los de los lenguajes de programación C y Java. Las condiciones están rodeadas por paréntesis y los bloques subordinados por llaves:

 ''etiqueta'' while ( ''condición'' ) {... } ''etiqueta'' while ( ''condición'' ) {... } continue {... } ''etiqueta'' for ( ''expresión inicial''; ''expresión condicional''; ''expresión incremental'' ) {... } ''etiqueta'' foreach ''var'' ( ''lista'' ) {... } ''etiqueta'' foreach ''var'' ( ''lista'' ) {... } continue {... } if ( ''condición'' ) {... } if ( ''condición'' ) {... } else {... } if ( ''condición'' ) {... } elsif ( ''condición'' ) {... } else {... } 

Cuando se controla a una sola declaración, los modificadores de declaración proporcionan una sintaxis más ligera:

 ''declaración'' if ''condición''; ''declaración'' unless ''condición''; ''declaración'' while ''condición''; ''declaración'' until ''condición''; ''declaración'' foreach ''lista''; 

Los operadores lógicos cortocircuito son normalmente usados para controlar el flujo del programa a nivel de expresión:

 ''expr'' and ''expr'' ''expr'' or ''expr'' 

Las palabras clave de control de flujo next, last, return y redo son expresiones, por lo que pueden ser usadas con los operadores cortocircuito.

Perl también tiene dos construcciones implícitas para bucles:

 ''resultados'' = grep {... } ''lista'' ''resultados'' = map {... } ''lista'' 

grep devuelve todos los elementos de lista en que el bloque subordinado evalúa a verdadero. map evalúa el bloque subordinado por cada elemento de lista y devuelve una lista de los valores resultantes. Estas construcciones permiten un estilo simple de programación funcional.

La declaración switch (llamada "given"/"when") existe desde la versión 5.10:

 use 5.10.1; # o posterior given ($variable) { when (''condición'') { ... } when (''condición'') { ... } default { ... } } 

Perl incluye una declaración goto etiqueta, pero es usada raramente. Las situaciones donde en otros lenguajes se utiliza goto no ocurren tan a menudo en Perl debido a sus amplias opciones de control de flujo.

Existe también una declaración goto &sub que realiza una llamada 'final'. Termina la subrutina actual e inmediatamente llama a la sub especificada. Esto se usa en situaciones donde una nueva subrutina puede realizar una gestión de la pila más eficiente que el propio Perl (porque típicamente no se requiere ningún cambio en la pila actual), y en una recursión muy profunda este tipo de llamadas puede tener un sustancial impacto positivo en el funcionamiento porque evita la sobrecarga de la gestión contexto/pila en el momento de retornar.

Subrutinas

Las subrutinas se definen con la palabra clave sub e invocadas simplemente nombrándolas. Si la subrutina en cuestión no ha sido todavía declarada, es necesario, para el proceso de análisis sintáctico, poner los paréntesis.

foo();  # paréntesis necesarios aquí... sub foo {... } foo;  #... pero no aquí 

Una lista de argumentos pueden ser indicados después del nombre de la subrutina. Los argumentos pueden ser escalares, listas o hashes.

foo $x, @y, %z; 

Los parámetros de una subrutina no necesitan ser declarados, ni en número ni en tipo; de hecho, pueden variar en cada llamada. Los arrays son expandidos a sus elementos, los hashes a una lista de pares clave/valor y todo el conjunto es pasado a la subrutina como una indiferenciada lista de escalares.

Cualesquiera de los argumentos pasados están disponibles para la subrutina en el array especial @_. Los elementos de @_ son asociados a los argumentos actuales; cambiando un elemento de @_ cambia el argumento correspondiente.

Los elementos de @_ pueden ser accedidos con los subíndices de la forma normal.

$_[0], $_[1] 

Sin embargo, el código resultante puede ser difícil de leer y los parámetros tener una semántica de pase por referencia, que puede resultar algo no deseable.

Un modismo común es asignar @_ a una lista de variables con nombres.

my($x, $y, $z) = @_; 

Esto afecta tanto a la mnemónica de los nombres de los parámetros como a la semántica de los valores pasados por valor. La palabra clave my indica que las siguientes variables están léxicamente embebidas en el bloque que las contienen.

Otro modismo es sacar los parámetros de @_. Esto es muy común cuando la subrutina toma un solo argumento.

my $x = shift; # Si no se dice nada, nos referimos a @_ 

Las subrutinas pueden devolver valores.

return 42, $x, @y, %z; 

Si la subrutina no sale vía declaración return, entonces devuelve la última expresión evaluada en el cuerpo de la subrutina. Arrays y hashes en el valor de retorno son expandidos a una lista de escalares, igual que si fueran argumentos de una función.

La expresión devuelta es evaluada en el contexto de la llamada de la subrutina; esto puede sorprender al desprevenido.

sub lista { (4, 5, 6) } sub array { @x = (4, 5, 6); @x } $x = lista; # devuelve 6 - último elemento de la lista $x = array; # devuelve 3 - número de elementos de la lista @x = lista; # devuelve (4, 5, 6) @x = array; # devuelve (4, 5, 6) 

Una subrutina puede descubrir su contexto de llamada con la función wantarray.

sub cualquiera { wantarray ? (1, 2) : "Naranjas" } $x = cualquiera; # devuelve "Naranjas" @x = cualquiera; # devuelve (1, 2) 

Expresiones regulares

El lenguaje Perl incluye una sintaxis especializada para escribir expresiones regulares y el intérprete contiene un motor para emparejar strings con expresiones regulares. El motor de expresiones regulares usa un algoritmo de Vuelta Atrás (backtracking), extendiendo sus capacidades desde el simple emparejamiento de patrones simples con la captura y sustitución de strings. El motor de expresiones regulares se deriva de regex, escrito por Henry Spencer.

La sintaxis de expresiones regulares fue originalmente tomada de las expresiones regulares de Unix Versión 8. Sin embargo, se diferenció ya antes del primer lanzamiento de Perl y desde entonces ha ido incorporando muchas más características. Otros lenguajes y aplicaciones están adoptando las expresiones regulares de Perl (PCRE) en vez de las expresiones regulares POSIX, incluyendo PHP, Ruby, Java y el Servidor HTTP Apache.

El operador m// (empareja) permite comprobar un emparejamiento por medio de una expresión regular. (Para abreviar, el precedente m puede ser omitido.) En el caso más simple, una expresión como:

$x =~ m/abc/ 

evalúa a verdadero si y solo si el string $x empareja con la expresión regular abc.

Partes de la expresión regular pueden ser incluidas entre paréntesis: las partes correspondientes de un string emparejado son capturadas. Los strings capturados son asignados de forma secuencial a las variables internas $1, $2, $3,... y una lista de strings capturados se devuelve como valor del emparejamiento.

$x =~ m/a(.)c/; # captura el carácter entre 'a' y 'c' y lo guarda en $1 

El operador s/// (sustitución) especifica una operación de búsqueda y reemplazo:

$x =~ s/abc/aBc/; # Convierte la b en mayúscula 

Las expresiones regulares en Perl pueden tomar unos modificadores. Son sufijos de una sola letra que modifican el significado de la expresión:

$x =~ m/abc/i; # emparejamiento independientemente de si están en mayúscula o minúscula $x =~ s/abc/aBc/g; # búsqueda y reemplazo global (a lo largo de todo el ''string'') 

Las expresiones regulares pueden ser densas y crípticas. Esto es porque la sintaxis de las expresiones regulares es extremadamente compacta, generalmente usando caracteres sueltos o pares de caracteres que representan sus operaciones. Perl alivia un poco este problema con el modificador /x que permite a los programadores poner espacio en blanco y comentarios dentro de las expresiones regulares:

$x =~ m/a  # empareja una 'a'  .  # empareja cualquier carácter  c  # empareja una 'c'  /x; 

Un uso común de las expresiones regulares es el de especificar delimitadores de campos al operador split:

@palabras = split m/,/, $línea; # divide la $línea de valores separados por comas 

El operador split complementa la captura de string. La captura de string devuelve las partes de un string que emparejan con una expresión regular; split devuelve las partes que no emparejan.

Interfaz con bases de datos

Perl está ampliamente favorecido para las aplicaciones de bases de datos. Sus facilidades de manejo de texto son buenas para generar consultas SQL; arrays, hashes y la gestión de memoria automática hace fácil recoger y procesar los datos devueltos.

En las primeras versiones de Perl, las interfaces de bases de datos fueron creadas enlazando el intérprete con una biblioteca de base de datos desde el lado del cliente. Esto era algo torpe; un problema en particular fue que el ejecutable perl resultante estaba restringido a usar solo una interfaz de base de datos, la que había sido enlazada. También, reenlazar el intérprete era lo suficientemente dificultoso que solo fue realizado para algunas de las más famosas e importantes bases de datos.

En Perl 5, las interfaces de bases de datos están implementadas por el módulo Perl DBI. El módulo DBI presenta una única interfaz a las aplicaciones Perl, independiente de las bases de datos, mientras que los módulos DBD:: (Controlador de base de datos) manejan los detalles de acceso a unas 50 bases de datos diferentes. Existen controladores DBD:: para la mayor parte de las bases de datos ANSI SQL.

Comparativa de funcionamiento

El compara el funcionamiento de implementaciones de problemas de programación típicos, en diversos lenguajes. Sus implementaciones Perl normalmente toman más memoria que las implementaciones en otros lenguajes, y esto varía los resultados de velocidad. Las prestaciones de Perl son similares a las de otros lenguajes como Python, PHP o Ruby, pero más lento que la mayor parte de lenguajes compilados.

Perl puede ser más lento que otros lenguajes haciendo lo mismo porque tiene que compilar el código fuente cada vez que corre el programa. En "A Timely Start", Jean-Louis Leroy encontró que sus scripts en Perl tardaban mucho más tiempo en correr que lo que él esperaba porque el intérprete perl perdía la mayor parte del tiempo buscando y compilando los módulos. Como Perl no puede salvar su compilación intermedia como lo hacen Java, Python y Ruby, los scripts Perl conllevan esta sobrecarga en cada ejecución. La sobrecarga no es un problema cuando la fase de ejecución es muy larga, pero puede sesgar significativamente en tiempos de ejecución muy cortos, como se encuentra a menudo en los benchmarks. Una vez que perl inicia la fase de ejecución, sin embargo, puede ser muy rápido y típicamente supera a otros lenguajes dinámicos. Tecnologías como mod perl superan esto guardando el programa compilado en memoria entre ejecuciones, o Class::Autouse que retrasa la compilación de partes del programa hasta que son necesarias.

Optimizando

Nicholas Clark, un desarrollador principal de Perl, diserta sobre algunas mejoras en el diseño con Perl y otras soluciones en . Las rutinas más críticas de un programa Perl pueden escribirse en C o incluso en lenguaje ensamblador con XS o Inline.

Optimizar Perl puede requerir un conocimiento íntimo de su funcionamiento en lugar de la destreza con el lenguaje y su sintaxis, significando que el problema está con la implementación de Perl en lugar de con el lenguaje mismo. Raku, la siguiente versión, tomará algunas de estas ideas como lecciones, que otros lenguajes ya han aprendido.

Futuro

En el año 2000, en la conferencia Perl, Jon Orwant hizo una petición para una nueva versión del lenguaje.[16]​ Esto condujo a una decisión para comenzar el trabajo del rediseño del lenguaje, que se llamaría Perl 6. Se pidieron propuestas a la comunidad Perl para las nuevas características del lenguaje, y se recibieron más de 300 RFC (del inglés Request For Comments, petición de comentarios).

Larry Wall estuvo los siguientes años digiriendo los RFC y sintetizándolos en un entorno de trabajo coherente para Perl 6. Presentó su diseño de Perl 6 en una serie de documentos llamados Apocalipsis, que se numeran para corresponderse con los capítulos de Programming Perl. La actual, inacabada especificación de Perl 6, está resumida en unos documentos de diseño llamados Sinopsis, que están numerados para corresponder a los Apocalipsis.

Perl 6 no tiene la intención de ser compatible para atrás, aunque existirá un modo de compatibilidad.

En 2001 se decidió que Perl 6 corriese en una máquina virtual llamada Parrot. Esto quiere decir que otros lenguajes que usen Parrot podrán ganar acceso nativo a CPAN y permitirá algún cierto nivel de desarrollo cruzado.

En 2005 Audrey Tang creó el proyecto pugs, una implementación de Perl 6 en Haskell. Fue y es una plataforma de testeo del lenguaje Perl 6 (separado del desarrollo actual de la implementación) permitiendo a los diseñadores explorar. El proyecto pugs engendró una activa comunidad Perl/Haskell centrada alrededor del canal irc #perl6 en Freenode.

Un cierto número de características en el lenguaje Perl 6 muestran una similitud con las de Haskell y Perl 6 ha sido acogido por la comunidad Haskell como un potencial lenguaje de scripting.

En el 2006, Perl 6, Parrot y pugs siguen estando bajo desarrollo y un nuevo módulo para Perl 5 llamado v6 permite a una parte del código Perl 6 correr directamente sobre Perl 5.

En octubre de 2019, ante la evidencia de que Perl 6 es un lenguaje muy diferente de Perl 5, y para que no se generara una confusión entre los dos lenguajes, se decidió renombrarlo a Raku.

Diversión con Perl

Como en C, las competiciones de código ofuscado son un rasgo popular de la cultura Perl. El Obfuscated Perl contest homenajea la virtud de la flexibilidad sintáctica de Perl. El programa siguiente imprime el texto "Just another Perl / Unix hacker", usando 32 procesos en paralelo coordinados con pipes. La explicación completa está disponible en el sitio web del autor.

@P=split//,".URRUU\c8R";@d=split//,"\nrekcah xinU / lreP rehtona tsuJ";sub p{ @p{"r$p","u$p"}=(P,P);pipe"r$p","u$p";++$p;($q*=2)+=$f=!fork;map{$P=$P[$f^ord ($p{$_})&6];$p{$_}=/ ^$P/ix?$P:close$_}keys%p}p;p;p;p;p;map{$p{$_}=~/^[P.]/&& close$_}%p;wait until$?;map{/^r/&&<$_>}%p;$_=$d[$q];sleep rand(2)if/\S/;print 

De forma similar al código ofuscado pero con un propósito diferente, "Poesía Perl" es la práctica de escribir poemas que puedan ser compilados como código legal de Perl (aunque generalmente sin sentido). Esta afición es más o menos única en Perl debido al gran número de palabras normales del Inglés que el lenguaje utiliza. Los nuevos poemas se publican de forma regular en el sitio Perl Monks, en la sección . Parte del saber de Perl está en Black Perl, un ejemplo infame de la poética de Perl.

Otro pasatiempo es "Perl Golf". Como con el deporte real, la meta es reducir el número de golpes necesarios para completar un objetivo, pero aquí, los "golpes" se refieren a los pulsaciones de teclado en vez de a los recorridos en un club de golf. Se propone una tarea, como "escanear un string de entrada y devolver el palíndromo más grande que contenga" y los participantes intentan batir a sus oponentes escribiendo soluciones que requieran cada vez menos caracteres de código fuente Perl.

Otra tradición entre los hacker Perl es escribir JAPH, que es una especie de pequeños programas ofuscados que imprimen la frase "Just another Perl hacker,". El "canónico" JAPH incluye la coma al final, aunque a menudo se omite, y otras muchas variantes que se han creado (ejemplo,[17]​ que imprime "Just Another Perl Pirate!").

Un módulo Perl interesante es Lingua::Romana::Perligata (en CPAN). Este módulo traduce el código fuente de un script escrito en Latín a Perl, permitiendo al programador escribir programas ejecutables en Latín.

La comunidad Perl ha reservado el espacio de nombres "Acme" para los módulos que sean divertidos o experimentales. Algunos de los módulos Acme están implementados de maneras muy entretenidas. Algunos ejemplos:

  • Acme::Bleach, uno de los , permite al código fuente de un programa ser "blanqueado" (es decir, todos los caracteres son reemplazados por el espacio en blanco) y seguir funcionando. Es un ejemplo de un filtro de código fuente. Hay también un cierto número de otros filtros de fuente en el espacio de nombres Acme.
  • Acme::Hello simplifica el proceso de escribir un programa "Hello, World!"
  • Acme::Currency permite cambiar el prefijo "$" de las variables escalares por otro carácter (por defecto usa el euro "€")
  • Acme::ProgressBar es, completamente hecho a propósito, una horrible e ineficiente forma de indicar el progreso de una tarea
  • Acme::VerySign satiriza el largamente criticado servicio Site Finder de VeriSign
  • Acme::Don't implementa el opuesto lógico de la palabra clave dodon't—, que no ejecuta el bloque de código subordinado.

Enlaces relacionados

  • Humor Perl en Wikibooks
  • Lingua::Romana::Perligata - ¡Escribe Perl en Latín!
  • Un tutorial sobre Perligata
  • Test de Pureza Perl

Comunidad Perl

La comunidad Perl está constituida por grupos que a su vez conforman Perl Mongers.[18]

En España hay tres grupos:

  • Barcelona.pm (persona de contacto: Álex Muntada)
  • Madrid.pm (persona de contacto: Diego Kuperman)
  • Granada.pm[19]​ (persona de contacto: Juan Julián Merelo Guervós

Véase también

  •   Portal:Software libre. Contenido relacionado con Software libre.
  • La Fundación Perl (en la Wikipedia en inglés)
  • POE: Entorno Objeto de Perl (en la Wikipedia en inglés)
  • Perl Data Language (en la Wikipedia en inglés)
  • herramienta de documentación para Perl (en la Wikipedia en inglés)
  • Just another Perl hacker (en la Wikipedia en inglés)
  • Obfuscated Perl contest (en la Wikipedia en inglés)
  • Perl Mongers (en la Wikipedia en inglés)
  • PerlScript (en la Wikipedia en inglés)
  • Comparison of programming languages (en la Wikipedia en inglés)
  • Programming Perl (en la Wikipedia en inglés)
  • Learning Perl (en la Wikipedia en inglés)
  • Perl Cookbook (en la Wikipedia en inglés)

Referencias

  1. «Perl 5.34.0 is now available!». www.nntp.perl.org. Consultado el 21 de mayo de 2021. 
  2. «Perl 5.32.1 is now available!». www.nntp.perl.org. Consultado el 24 de enero de 2021. 
  3. «Perl 5.35.5 is now available!». perl.org. Consultado el 23 de octubre de 2021. 
  4. . Archivado desde el original el 15 de agosto de 2006. Consultado el 20 de agosto de 2006.  (inglés)
  5. «perlhist - the Perl history records». www.cpan.org. Consultado el 21 de julio de 2020. 
  6. «Perl Source». www.cpan.org. Consultado el 21 de julio de 2020. 
  7. «Perl - O'Reilly Media». 
  8. Usenet post, May 10th 1997, with ID 199705101952.MAA00756@wall.org.
  9. «What software/hardware are you using to run the site?». 
  10. Una descripción del intérprete Perl 5 se puede encontrar en Programming Perl, 3rd Ed., (inglés)
  11. «On Parsing Perl». 
  12. Hietaniemi, Jarkko (1998). CPAN.org, ed. «Perl Ports (Binary Distributions)». 
  13. Prime Time Freeware, ed. (1997). . Archivado desde el original el 18 de enero de 2006. 
  14. Win32 Perl Wiki (ed.). «Win32 Distributions». 
  15. Kennedy, Adam (2006). «Win32 Perl Wiki». 
  16. Transcripción de la charla de Larry. Anotada el 28 de septiembre de 2006. (inglés)
  17. «Aharrr!». 
  18. «Perl Mongers». Consultado el 14 de marzo de 2016. 
  19. «Granada Perl Mongers». Consultado el 14 de marzo de 2016. 

Enlaces externos

  •   Wikimedia Commons alberga una categoría multimedia sobre Perl.
  •   Wikilibros alberga un libro o manual sobre Programación en Perl.
  • Perl.org – El directorio Perl
  • Perl.com – Perl en O'Reilly Network
  • Perldoc at Perl.org – documentación en línea sobre Perl
  • Documentación Perl en español Proyecto de traducción de las páginas del manual de Perl a español.
  • Desarrollo de Perl 5 y Perl 6
  • Parrot máquina virtual
Distribuciones
  • The CPAN – Comprehensive Perl Archive Network, distribución fuente de Perl
  • ActiveState ActivePerl – Perl para Microsoft Windows y otras plataformas
  • – otra distribución de Perl para Microsoft Windows
  • Cygwin también distribuye Perl en Windows
  • Strawberry Perl - una implementación open-source para Windows.
  • en el Open Directory Project
  •   Datos: Q42478
  •   Multimedia: Perl (programming language)
  •   Libros y manuales: Programación en Perl

perl, para, otros, usos, este, término, véase, desambiguación, lenguaje, programación, diseñado, larry, wall, 1987, toma, características, lenguaje, lenguaje, interpretado, bourne, shell, lisp, grado, inferior, muchos, otros, lenguajes, programación, desarroll. Para otros usos de este termino vease Perl desambiguacion Perl es un lenguaje de programacion disenado por Larry Wall en 1987 Perl toma caracteristicas del lenguaje C del lenguaje interpretado bourne shell sh AWK sed Lisp y en un grado inferior de muchos otros lenguajes de programacion PerlDesarrollador es Larry Wallhttps www perl org y https dev perl org perl5 Informacion generalExtensiones comunespl y pmParadigmamultiparadigma funcional imperativa orientado a objetos basado en clases reflexiva procedural eventos genericaAparecio en18 de diciembre de 1987 33 anos 10 meses y 6 dias Disenado porLarry WallUltima version estable5 34 0 1 20 de mayo de 2021 5 meses y 4 dias 5 32 1 2 23 de enero de 2021 9 meses y 1 dia Ultima version en pruebas5 35 5 3 21 de octubre de 2021 3 dias Sistema de tiposdinamicoImplementacionesPerl mod perl embperlDialectosPerl 5 RakuInfluido porAWK Smalltalk 80 Lisp C C Pascal sed Unix shellHa influido aPython PHP Ruby ECMAScript LPC Windows PowerShell JavaScript FalconSistema operativoMultiplataforma muchos mas de 100 LicenciaGPL Licencia Artistica editar datos en Wikidata Estructuralmente Perl esta basado en un estilo de bloques como los del C o AWK y fue ampliamente adoptado por su destreza en el procesado de texto y no tener ninguna de las limitaciones de los otros lenguajes de script Indice 1 Historia 1 1 Nombre 1 2 El simbolo del camello 2 Descripcion 2 1 Caracteristicas 2 2 Diseno 2 3 Aplicaciones 2 4 Implementacion 2 5 Disponibilidad 2 5 1 GNU Linux 2 5 2 Windows 3 Estructura del lenguaje 3 1 Programa ejemplo 3 2 Tipos de datos 3 3 Estructuras de control 3 4 Subrutinas 3 5 Expresiones regulares 3 6 Interfaz con bases de datos 4 Comparativa de funcionamiento 4 1 Optimizando 5 Futuro 6 Diversion con Perl 6 1 Enlaces relacionados 7 Comunidad Perl 8 Vease tambien 9 Referencias 10 Enlaces externosHistoria EditarLarry Wall comenzo a trabajar en Perl en 1987 mientras trabajaba como programador en Unisys 4 y anuncio la version 1 0 en el grupo de noticias comp sources misc el 18 de diciembre de 1987 El lenguaje se expandio rapidamente en los siguientes anos Perl 2 publicado en 1988 aporto un mejor motor de expresiones regulares Perl 3 publicado en 1989 anadio soporte para datos binarios Hasta 1991 la unica documentacion de Perl era una simple y cada vez mas larga pagina de manual Unix En 1991 se publico Programming Perl el libro del camello y se convirtio en la referencia de facto del lenguaje Al mismo tiempo el numero de version de Perl salto a 4 no por marcar un gran cambio en el lenguaje sino por identificar a la version que estaba documentada en el libro Perl 4 trajo consigo una serie de lanzamientos de mantenimiento culminando en Perl 4 036 en 1993 En este punto Larry Wall abandono Perl 4 para comenzar a trabajar en Perl 5 Perl 4 se quedaria en esa version hasta hoy El desarrollo de Perl 5 continuo en 1994 La lista de correo perl5 porters se establecio en mayo de 1994 para coordinar el trabajo de adaptacion de Perl 5 a diferentes plataformas Es el primer foro para desarrollo mantenimiento y adaptacion de Perl 5 Perl 5 fue publicado el 17 de octubre de 1994 Fue casi una completa reescritura del interprete y anadio muchas nuevas caracteristicas al lenguaje incluyendo objetos referencias paquetes y modulos A destacar los modulos proveen de un mecanismo para extender el lenguaje sin modificar el interprete Esto permitio estabilizar su nucleo principal ademas de permitir a los programadores de Perl anadirle nuevas caracteristicas Version 5 Actualizacion 6 Version antigua sin servicio tecnico 5 4 1999 04 29Version antigua sin servicio tecnico 5 5 1999 03 29Version antigua sin servicio tecnico 5 6 2003 11 15Version antigua sin servicio tecnico 5 8 2008 12 14Version antigua sin servicio tecnico 5 10 2009 08 23Version antigua sin servicio tecnico 5 12 2012 11 10Version antigua sin servicio tecnico 5 14 2013 03 10Version antigua sin servicio tecnico 5 16 2013 03 11Version antigua sin servicio tecnico 5 18 2014 10 02Version antigua sin servicio tecnico 5 20 2015 09 12Version antigua sin servicio tecnico 5 22 2017 07 15Version antigua sin servicio tecnico 5 24 2018 04 14Version antigua sin servicio tecnico 5 26 2018 11 29Version antigua sin servicio tecnico 5 28 2020 06 01Version antigua sin servicio tecnico 5 30 2020 06 01Version antigua con servicio tecnico 5 32 2021 01 23Version estable actual 5 34 2021 05 20Ultima version prevista para lanzamiento 5 35 2021 05 21Lanzamiento futuro 5 36 2022 05 20Lanzamiento futuro 7 0 2022 Leyenda Version antigua Version antigua con servicio tecnico Version actual Ultima version prevista Lanzamiento futuroEl 26 de octubre de 1995 se creo el Comprehensive Perl Archive Network CPAN CPAN es una coleccion de sitios web que almacenan y distribuyen fuentes en Perl binarios documentacion scripts y modulos Originalmente cada sitio CPAN debia ser accedido a traves de su propio URL hoy en dia http www cpan org redirige automaticamente a uno de los cientos de repositorios espejo de CPAN En 2008 Perl 5 continua siendo mantenido Caracteristicas importantes y algunas construcciones esenciales han sido anadidas incluyendo soporte Unicode hilos un soporte importante para la programacion orientada a objetos y otras mejoras Nombre Editar Perl se llamo originalmente Pearl Larry Wall queria darle al lenguaje un nombre corto con connotaciones positivas asegura que miro y rechazo todas las combinaciones de tres y cuatro letras del diccionario Tambien considero nombrarlo como su esposa Gloria Wall descubrio antes del lanzamiento oficial que ya existia un lenguaje de programacion llamado PEARL y cambio la ortografia del nombre El nombre normalmente comienza con mayuscula Perl cuando se refiere al lenguaje y con minuscula perl cuando se refiere al propio programa interprete debido a que los sistemas de ficheros Unix distinguen mayusculas y minusculas Antes del lanzamiento de la primera edicion de Programming Perl era comun referirse al lenguaje como perl Randal L Schwartz sin embargo forzo el nombre en mayuscula en el libro para que destacara mejor cuando fuera impreso La distincion fue subsiguientemente adoptada por la comunidad El nombre es descrito ocasionalmente como PERL por Practical Extraction and Report Language Lenguaje Practico para la Extraccion e Informe Aunque esta expansion ha prevalecido en muchos manuales actuales incluyendo la pagina de manual de Perl es un retroacronimo y oficialmente el nombre no quiere decir nada La ortografia de PERL en mayusculas es por eso usada como jerga para detectar a individuos ajenos a la comunidad Sin embargo se han sugerido varios retroacronimos incluyendo el comico Pathologically Eclectic Rubbish Lister Contabilizador de Basura Patologicamente Eclectico El simbolo del camello Editar Perl se simboliza generalmente por un camello de una sola joroba camello arabigo o dromedario que fue la imagen elegida por el editor O Reilly para la cubierta de Programming Perl que por consiguiente adquirio el nombre de El Libro del Camello 4 O Reilly es propietario de este simbolo como marca registrada pero dice que usa sus derechos legales solo para proteger la integridad e impacto de este simbolo 7 O Reilly permite el uso no comercial del simbolo y ofrece logos Programming Republic of Perl y botones Powered by Perl Desde hace unos anos y para evitar este tipo de problemas con la licencia comercial la Fundacion Perl elaboro nuevos logotipos basados en una cebolla a raiz de las conferencias anuales que Larry Wall ofrece con el titulo State of the Onion Estado de la Cebolla Onion se pronuncia muy parecido a Union por lo que suena parecido a State of the Union Estado de la Union evento en el cual el Presidente de los Estados Unidos informa a los ciudadanos del estado en que se encuentra su pais Descripcion EditarLa pagina de manual Unix perlintro 1 dice Perl es un lenguaje de proposito general originalmente desarrollado para la manipulacion de texto y que ahora es utilizado para un amplio rango de tareas incluyendo administracion de sistemas desarrollo web programacion en red desarrollo de GUI y mas Se previo que fuera practico facilidad de uso eficiente completo en lugar de hermoso pequeno elegante minimo Sus principales caracteristicas son que es facil de usar soporta tanto la programacion estructurada como la programacion orientada a objetos y la programacion funcional vease Higher Order Perl Transforming Programs with Programs tiene incorporado un poderoso sistema de procesamiento de texto y una enorme coleccion de modulos disponibles Caracteristicas Editar La estructura completa de Perl deriva ampliamente del lenguaje C Perl es un lenguaje imperativo con variables expresiones asignaciones bloques de codigo delimitados por llaves estructuras de control y subrutinas Perl tambien toma caracteristicas de la programacion shell Todas las variables son marcadas con un Sigilo precedente Sigil en ingles Los sigilos identifican inequivocamente los nombres de las variables permitiendo a Perl tener una rica sintaxis Notablemente los sigilos permiten interpolar variables directamente dentro de las cadenas de caracteres string Como en los shell Perl tiene muchas funciones integradas para tareas comunes y para acceder a los recursos del sistema Perl toma las listas del Lisp hash memoria asociativa del AWK y expresiones regulares del sed Todo esto simplifica y facilita todas las formas del analisis sintactico manejo de texto y tareas de gestion de datos En Perl 5 se anadieron caracteristicas para soportar estructuras de datos complejas funciones de primer orden p e clausuras como valores y un modelo de programacion orientada a objetos Estos incluyen referencias paquetes y una ejecucion de metodos basada en clases y la introduccion de variables de ambito lexico que hizo mas facil escribir codigo robusto junto con el pragma strict Una caracteristica principal introducida en Perl 5 fue la habilidad de empaquetar codigo reutilizable como modulos Larry Wall indico mas adelante que la intencion del sistema de modulos de Perl 5 era apoyar el crecimiento de la cultura Perl en vez del nucleo de Perl 8 Todas las versiones de Perl hacen el tipificado automatico de datos y la gestion de memoria El interprete conoce el tipo y requerimientos de almacenamiento de cada objeto en el programa reserva y libera espacio para ellos segun sea necesario Las conversiones legales de tipo se hacen de forma automatica en tiempo de ejecucion las conversiones ilegales son consideradas errores fatales Diseno Editar El diseno de Perl puede ser entendido como una respuesta a tres amplias tendencias de la industria informatica rebaja de los costes en el hardware aumento de los costes laborales y las mejoras en la tecnologia de compiladores Anteriormente muchos lenguajes de ordenador como Fortran y C fueron disenados para hacer un uso eficiente de un hardware caro En contraste Perl es disenado para hacer un uso eficiente de los costosos programadores de ordenador Perl tiene muchas caracteristicas que facilitan la tarea del programador a costa de unos requerimientos de CPU y memoria mayores Estas incluyen gestion de memoria automatica tipo de dato dinamico strings listas y hashes expresiones regulares introspeccion y una funcion eval Larry Wall fue adiestrado como linguista y el diseno de Perl ha sido muy aleccionado con principios linguisticos Ejemplos incluyen la Codificacion Huffman las construcciones mas comunes deben ser las mas cortas buena distribucion la informacion importante debe ir primero y una larga coleccion de primitivas del lenguaje Perl favorece las construcciones del lenguaje tan naturales como para los humanos son la lectura y la escritura incluso si eso hace mas complicado al interprete Perl La sintaxis de Perl refleja la idea de que cosas que son diferentes deben parecer diferentes Por ejemplo escalares arrays y hashes tienen diferente sigilo Indices de array y claves hash usan diferentes clases de parentesis Strings y expresiones regulares tienen diferentes delimitadores estandar Esta aproximacion puede contrastarse con lenguajes como Lisp donde la misma construccion S expresion y sintaxis basica se usa para muchos y variados propositos Perl tiene caracteristicas que soportan una variedad de paradigmas de programacion como la imperativa funcional y la orientada a objetos Al mismo tiempo Perl no obliga a seguir ningun paradigma en particular ni obliga al programador a elegir alguna de ellas Hay un amplio sentido de lo practico tanto en el lenguaje Perl como en la comunidad y la cultura que lo rodean El prefacio de Programming Perl comienza con Perl es un lenguaje para tener tu trabajo terminado Una consecuencia de esto es que Perl no es un lenguaje ordenado Incluye caracteristicas si la gente las usa tolera excepciones a las reglas y emplea la heuristica para resolver ambiguedades sintacticas Debido a la naturaleza indulgente del compilador a veces los errores pueden ser dificiles de encontrar Hablando del variado comportamiento de las funciones internas en los contextos de lista y escalar la pagina de manual de perlfunc 1 dice En general hacen lo que tu quieras siempre que quieras la coherencia Perl tiene varios lemas que transmiten aspectos de su diseno y uso Uno es There s more than one way to do it Hay mas de una forma de hacerlo TMTOWTDI usualmente pronunciado Tim Toady Otros son Perl la motosierra del ejercito Suizo de los lenguajes de programacion y Limites imprecisos Una meta prefijada de Perl es hacer las cosas faciles de forma facil y las tareas dificiles posibles A Perl tambien se le ha llamado El esparadrapo de Internet Aplicaciones Editar La LAMP comprende Perl aqui con Squid Perl tiene muchas y variadas aplicaciones gracias a la disponibilidad de muchos modulos estandares y de terceras partes Se ha usado desde los primeros dias del Web para escribir guiones scripts CGI Es una de las tres Pes Perl Python y PHP que son los lenguajes mas populares para la creacion de aplicaciones Web y es un componente integral de la popular solucion LAMP para el desarrollo web Grandes proyectos escritos en Perl son Slash IMDb 9 y UseModWiki un motor de Wiki Muchos sitios web con alto trafico como Amazon com y Ticketmaster com usan Perl extensamente Perl se usa a menudo como un lenguaje pegamento ligando sistemas e interfaces que no fueron disenados especificamente para interoperar y para el escarbado de datos convirtiendo o procesando grandes cantidades de datos para tareas como por ejemplo crear informes De hecho estas fortalezas estan intimamente unidas Su combinacion hace a Perl una popular herramienta de proposito general para los administradores de sistemas especialmente en programas pequenos que pueden ser escritos y ejecutados en una sola linea de comandos Perl es tambien ampliamente usado en finanzas y bioinformatica donde es apreciado por su desarrollo rapido tanto de aplicaciones como de despliegue asi como la habilidad de manejar grandes volumenes de datos Implementacion Editar Perl esta implementado como un interprete escrito en C junto con una gran coleccion de modulos escritos en Perl y C La distribucion fuente tiene en 2005 12 MB cuando se empaqueta y comprime en un fichero tar El interprete tiene 150 000 lineas de codigo C y se compila en un ejecutable de 1 MB en las arquitecturas de hardware mas tipicas De forma alternativa el interprete puede ser compilado como una biblioteca y ser embebida en otros programas Hay cerca de 500 modulos en la distribucion sumando 200 000 lineas de Perl y unas 350 000 lineas adicionales de codigo C Mucho del codigo C en los modulos consiste en tablas de codificacion de caracteres El interprete tiene una arquitectura orientada a objetos Todos los elementos del lenguaje Perl escalares listas hashes referencias a codigo manejadores de archivo estan representados en el interprete como estructuras C Las operaciones sobre estas estructuras estan definidas como una numerosa coleccion de macros typedef y funciones esto constituye la API C de Perl La API Perl puede ser desconcertante para el no iniciado pero sus puntos de entrada siguen un esquema de nombres coherente que ayuda a los que quieran utilizarla La ejecucion de un programa Perl se puede dividir generosamente en dos fases tiempo de compilacion y tiempo de ejecucion 10 En tiempo de compilacion el interprete parsea el texto del programa en un arbol sintactico En tiempo de ejecucion ejecuta el programa siguiendo el arbol El texto es parseado solo una vez y el arbol sintactico es optimizado antes de ser ejecutado para que la fase de ejecucion sea relativamente eficiente Las optimizaciones del arbol sintactico en tiempo de compilacion incluyen simplificacion de expresiones constantes propagacion del contexto y optimizacion en trozos sueltos de codigo Sin embargo las fases de compilacion y ejecucion pueden anidarse un bloque BEGIN se ejecuta en tiempo de compilacion mientras que una funcion eval inicia una compilacion durante una ejecucion Ambas operaciones estan implicitas en otras de forma notable la clausula use que carga bibliotecas conocidas en Perl como modulos implica un bloque BEGIN Perl es un lenguaje dinamico y tiene una gramatica sensible al contexto que puede quedar afectada por el codigo ejecutado durante una fase de ejecucion intermedia Ver ejemplos 11 Por eso Perl no puede ser parseado mediante una aplicacion directa de analizadores sintacticos parseadores Lex Yacc En cambio el interprete implementa su propio analizador lexico que coordinado con un parseador modificado GNU bison resuelve las ambiguedades del lenguaje Se ha dicho que solo perl puede parsear Perl queriendo decir que solo el interprete Perl perl puede parsear el lenguaje Perl Perl La razon de esto se atestigua por las persistentes imperfecciones de otros programas que emprenden la tarea de parsear Perl como los analizadores de codigo y los auto indentadores que tienen que verselas no solo con las muchas formas de expresar inequivocamente construcciones sintacticas sino tambien con el hecho de que tambien Perl no puede en general ser parseado sin antes ser ejecutado El mantenimiento del interprete Perl a lo largo de los anos se ha vuelto cada vez mas dificil El nucleo ha estado en continuo desarrollo desde 1994 El codigo ha sido optimizado en rendimiento a expensas de la simplicidad claridad y unas interfaces internas mas fuertes Nuevas caracteristicas han sido anadidas manteniendo todavia compatibilidad virtualmente completa hacia atras con las primeras versiones El tamano y la complejidad del interprete son una barrera para los desarrolladores que desean trabajar en el Perl es distribuido con unos 120 000 test funcionales Estos se ejecutan como parte del proceso normal de construccion y comprueban extensamente al interprete y a sus modulos principales Los desarrolladores Perl confian en los test funcionales para asegurarse que los cambios en el interprete no introducen errores reciprocamente los usuarios Perl que vean al interprete pasar los test funcionales en su sistema pueden tener un alto grado de confianza de que esta funcionando adecuadamente No hay una especificacion o estandar escrito para el lenguaje Perl y no hay planes de crear uno para la version actual de Perl Siempre ha existido solo una implementacion del interprete Este interprete junto con los test funcionales forman la especificacion de facto del lenguaje Disponibilidad Editar Perl es software libre y esta licenciado bajo la Licencia Artistica y la GNU General Public License Existen distribuciones disponibles para la mayoria de sistemas operativos Esta especialmente extendido en Unix y en sistemas similares pero ha sido portado a las plataformas mas modernas y otras mas obsoletas Con solo seis excepciones confirmadas puede ser compilado desde el codigo fuente en todos los Unix compatibles POSIX o cualquier otra plataforma Unix compatible Sin embargo esto no es normalmente necesario porque Perl esta incluido por defecto en la instalacion de los sistemas operativos mas populares 12 Debido a los cambios especiales necesarios para soportar al Mac OS Classic existe una adaptacion especial llamada MacPerl 13 GNU Linux Editar Perl esta preinstalado en las distribuciones mas populares de GNU Linux incluyendo Gentoo Slackware Mandriva Debian RedHat y SUSE Windows Editar Los usuarios de Microsoft Windows normalmente instalan una distribucion binaria de Perl 14 Compilar Perl desde el codigo fuente bajo Windows es posible pero la mayoria de las instalaciones no disponen del necesario compilador de C La capa de emulacion Cygwin proporciona otra forma de correr Perl bajo Windows Cygwin proporciona en entorno parecido al Unix en Windows que incluye gcc por lo que compilar Perl desde el codigo es una opcion accesible para los usuarios que prefieren esta opcion En junio de 2006 win32 perl org fue lanzado por Adam Kennedy en nombre de la Fundacion Perl Es una comunidad web para todo lo relacionado con Windows y Perl 15 Estructura del lenguaje EditarPrograma ejemplo Editar En Perl el programa canonico Hola mundo es usr bin perl print Hola mundo n La primera linea contiene el shebang par de caracteres que identifica el texto que sigue que le indica al sistema operativo donde encontrar el interprete de Perl La segunda imprime el string Hola mundo y un caracter de nueva linea El shebang es la forma normal para invocar al interprete en los sistemas Unix Los sistemas Windows pueden seguir utilizandolo o pueden asociar la extension de archivo pl con el interprete Perl Algunos editores de texto tambien usan la linea shebang como una pista sobre el modo de trabajo en que deben operar Si el programa es ejecutado por perl y no invocado por el shell la linea que empieza por el shebang es parseada para interpretar las opciones En otro caso es ignorada Para ver los detalles de esto consultar la pagina de manual perlrun Tipos de datos Editar Perl tiene tres tipos de datos escalares listas y hashes Un escalar es un solo valor puede ser un numero un string cadena de caracteres o una referencia Una lista es una coleccion ordenada de escalares una variable que almacena una lista se llama array Un hash o memoria asociativa es un mapeo de strings a escalares los strings se llaman claves y los escalares valores Todas las variables estan precedidas por un sigilo que identifica el tipo de dato que es accedido no el tipo de dato de la misma variable Se puede usar el mismo nombre para variables de diferentes tipos sin que tengan conflictos var un escalar var un array var un hash Los numeros se escriben de la forma usual los strings estan rodeados entre comillas de varias clases n 42 nombre juan color rojo Perl convertira los strings en numeros y viceversa dependiendo del contexto en que sean usados En el siguiente ejemplo los strings n y m son tratados como numeros cuando son argumentos del operador suma Este codigo imprime el numero 5 desechando cualquier informacion no numerica de la operacion y dejando los valores de las variables intactos El operador de concatenacion no es sino n 3 manzanas m 2 naranjas print n m Perl tambien tiene un contexto booleano que utiliza en la evaluacion de declaraciones condicionales Los siguientes valores en Perl evaluan todos como falso falso 0 el numero cero falso 0 0 el numero cero como flotante falso 0 el string cero falso el string vacio falso undef el valor devuelto por undef Todos los demas valores se evaluan a verdadero Esto incluye el curioso string auto descriptivo 0 pero verdadero que de hecho es 0 como numero pero verdadero como booleano Cualquier string no numerico tambien tendra esta propiedad pero este string en particular es ignorado por Perl en contextos numericos Las expresiones booleanas evaluadas tambien devuelven valores escalares Aunque la documentacion no indica que valor particular se devuelve como verdadero o falso y por lo tanto no fiable muchos operadores booleanos devuelven 1 por verdadero y el string vacio para falso que evalua a cero en contexto numerico La funcion defined le dice si la variable tiene algun valor En el ejemplo anterior defined falso sera verdadero con cada uno de los valores anteriores excepto undef Si especificamente quiere asegurarse de tener un resultado 1 0 como en C necesita realizar el calculo siguiente my resultado real resultado booleano 1 0 Una lista se define listando sus elementos separados por comas y rodeados por parentesis donde asi sea requerido por la precedencia de los operadores puntuaciones 32 45 16 5 Un hash puede ser inicializado desde una lista de pares clave valor favorito joe gt rojo sam gt azul Los elementos individuales de una lista son accedidos utilizando un indice numerico dentro de corchetes Valores individuales en un hash son accedidos utilizando la correspondiente clave dentro de llaves El sigilo identifica que el elemento accedido es un escalar puntuaciones 2 un elemento de puntuaciones favorito joe un valor de favorito Multiples elementos pueden ser accedidos usando en su lugar el sigilo identificando el resultado como una lista puntuaciones 2 3 1 tres elementos de puntuaciones favorito joe sam dos valores de favorito El numero de elementos en un array puede ser obtenido evaluando el array en contexto escalar o con la ayuda del sigilo Este ultimo da el indice del ultimo elemento dentro del array no el numero de elementos numero amigos amigos el indice del ultimo elemento en amigos amigos 1 normalmente el numero de elementos en amigos que es uno mas que amigos porque el primer elemento tiene el indice 0 no 1 Hay unas pocas funciones que operan sobre hashes enteros nombres de clientes keys direcciones guarda en nombres de clientes todas las claves de direcciones direcciones de email values direcciones guarda en direcciones de email todos los valores de direcciones Estructuras de control Editar Articulo principal Estructuras de control en ingles Perl tiene varias clases de estructuras de control Tiene estructuras de control orientado al bloque similar a los de los lenguajes de programacion C y Java Las condiciones estan rodeadas por parentesis y los bloques subordinados por llaves etiqueta while condicion etiqueta while condicion continue etiqueta for expresion inicial expresion condicional expresion incremental etiqueta foreach var lista etiqueta foreach var lista continue if condicion if condicion else if condicion elsif condicion else Cuando se controla a una sola declaracion los modificadores de declaracion proporcionan una sintaxis mas ligera declaracion if condicion declaracion unless condicion declaracion while condicion declaracion until condicion declaracion foreach lista Los operadores logicos cortocircuito son normalmente usados para controlar el flujo del programa a nivel de expresion expr and expr expr or expr Las palabras clave de control de flujo next last return y redo son expresiones por lo que pueden ser usadas con los operadores cortocircuito Perl tambien tiene dos construcciones implicitas para bucles resultados grep lista resultados map lista grep devuelve todos los elementos de lista en que el bloque subordinado evalua a verdadero map evalua el bloque subordinado por cada elemento de lista y devuelve una lista de los valores resultantes Estas construcciones permiten un estilo simple de programacion funcional La declaracion switch llamada given when existe desde la version 5 10 use 5 10 1 o posterior given variable when condicion when condicion default Perl incluye una declaracion goto i etiqueta i pero es usada raramente Las situaciones donde en otros lenguajes se utiliza a href GOTO html title GOTO goto a no ocurren tan a menudo en Perl debido a sus amplias opciones de control de flujo Existe tambien una declaracion goto amp i sub i que realiza una llamada final Termina la subrutina actual e inmediatamente llama a la i sub i especificada Esto se usa en situaciones donde una nueva subrutina puede realizar una gestion de la pila mas eficiente que el propio Perl porque tipicamente no se requiere ningun cambio en la pila actual y en una recursion muy profunda este tipo de llamadas puede tener un sustancial impacto positivo en el funcionamiento porque evita la sobrecarga de la gestion contexto pila en el momento de retornar Subrutinas Editar Las subrutinas se definen con la palabra clave sub e invocadas simplemente nombrandolas Si la subrutina en cuestion no ha sido todavia declarada es necesario para el proceso de analisis sintactico poner los parentesis foo parentesis necesarios aqui sub foo foo pero no aqui Una lista de argumentos pueden ser indicados despues del nombre de la subrutina Los argumentos pueden ser escalares listas o hashes foo x y z Los parametros de una subrutina no necesitan ser declarados ni en numero ni en tipo de hecho pueden variar en cada llamada Los arrays son expandidos a sus elementos los hashes a una lista de pares clave valor y todo el conjunto es pasado a la subrutina como una indiferenciada lista de escalares Cualesquiera de los argumentos pasados estan disponibles para la subrutina en el array especial Los elementos de son asociados a los argumentos actuales cambiando un elemento de cambia el argumento correspondiente Los elementos de pueden ser accedidos con los subindices de la forma normal 0 1 Sin embargo el codigo resultante puede ser dificil de leer y los parametros tener una semantica de pase por referencia que puede resultar algo no deseable Un modismo comun es asignar a una lista de variables con nombres my x y z Esto afecta tanto a la mnemonica de los nombres de los parametros como a la semantica de los valores pasados por valor La palabra clave my indica que las siguientes variables estan lexicamente embebidas en el bloque que las contienen Otro modismo es sacar los parametros de Esto es muy comun cuando la subrutina toma un solo argumento my x shift Si no se dice nada nos referimos a Las subrutinas pueden devolver valores return 42 x y z Si la subrutina no sale via declaracion return entonces devuelve la ultima expresion evaluada en el cuerpo de la subrutina Arrays y hashes en el valor de retorno son expandidos a una lista de escalares igual que si fueran argumentos de una funcion La expresion devuelta es evaluada en el contexto de la llamada de la subrutina esto puede sorprender al desprevenido sub lista 4 5 6 sub array x 4 5 6 x x lista devuelve 6 ultimo elemento de la lista x array devuelve 3 numero de elementos de la lista x lista devuelve 4 5 6 x array devuelve 4 5 6 Una subrutina puede descubrir su contexto de llamada con la funcion wantarray sub cualquiera wantarray 1 2 Naranjas x cualquiera devuelve Naranjas x cualquiera devuelve 1 2 Expresiones regulares Editar Articulo principal Expresiones regulares con Perl en ingles El lenguaje Perl incluye una sintaxis especializada para escribir expresiones regulares y el interprete contiene un motor para emparejar strings con expresiones regulares El motor de expresiones regulares usa un algoritmo de Vuelta Atras backtracking extendiendo sus capacidades desde el simple emparejamiento de patrones simples con la captura y sustitucion de strings El motor de expresiones regulares se deriva de regex escrito por Henry Spencer La sintaxis de expresiones regulares fue originalmente tomada de las expresiones regulares de Unix Version 8 Sin embargo se diferencio ya antes del primer lanzamiento de Perl y desde entonces ha ido incorporando muchas mas caracteristicas Otros lenguajes y aplicaciones estan adoptando las expresiones regulares de Perl PCRE en vez de las expresiones regulares POSIX incluyendo PHP Ruby Java y el Servidor HTTP Apache El operador m empareja permite comprobar un emparejamiento por medio de una expresion regular Para abreviar el precedente m puede ser omitido En el caso mas simple una expresion como x m abc evalua a verdadero si y solo si el string x empareja con la expresion regular abc Partes de la expresion regular pueden ser incluidas entre parentesis las partes correspondientes de un string emparejado son capturadas Los strings capturados son asignados de forma secuencial a las variables internas 1 2 3 y una lista de strings capturados se devuelve como valor del emparejamiento x m a c captura el caracter entre a y c y lo guarda en 1 El operador s sustitucion especifica una operacion de busqueda y reemplazo x s abc aBc Convierte la b en mayuscula Las expresiones regulares en Perl pueden tomar unos modificadores Son sufijos de una sola letra que modifican el significado de la expresion x m abc i emparejamiento independientemente de si estan en mayuscula o minuscula x s abc aBc g busqueda y reemplazo global a lo largo de todo el string Las expresiones regulares pueden ser densas y cripticas Esto es porque la sintaxis de las expresiones regulares es extremadamente compacta generalmente usando caracteres sueltos o pares de caracteres que representan sus operaciones Perl alivia un poco este problema con el modificador x que permite a los programadores poner espacio en blanco y comentarios dentro de las expresiones regulares x m a empareja una a empareja cualquier caracter c empareja una c x Un uso comun de las expresiones regulares es el de especificar delimitadores de campos al operador split palabras split m linea divide la linea de valores separados por comas El operador split complementa la captura de string La captura de string devuelve las partes de un string que emparejan con una expresion regular split devuelve las partes que no emparejan Interfaz con bases de datos Editar Perl esta ampliamente favorecido para las aplicaciones de bases de datos Sus facilidades de manejo de texto son buenas para generar consultas SQL arrays hashes y la gestion de memoria automatica hace facil recoger y procesar los datos devueltos En las primeras versiones de Perl las interfaces de bases de datos fueron creadas enlazando el interprete con una biblioteca de base de datos desde el lado del cliente Esto era algo torpe un problema en particular fue que el ejecutable perl resultante estaba restringido a usar solo una interfaz de base de datos la que habia sido enlazada Tambien reenlazar el interprete era lo suficientemente dificultoso que solo fue realizado para algunas de las mas famosas e importantes bases de datos En Perl 5 las interfaces de bases de datos estan implementadas por el modulo Perl DBI El modulo DBI presenta una unica interfaz a las aplicaciones Perl independiente de las bases de datos mientras que los modulos DBD Controlador de base de datos manejan los detalles de acceso a unas 50 bases de datos diferentes Existen controladores DBD para la mayor parte de las bases de datos ANSI SQL Comparativa de funcionamiento EditarEl Computer Language Shootout Benchmarks compara el funcionamiento de implementaciones de problemas de programacion tipicos en diversos lenguajes Sus implementaciones Perl normalmente toman mas memoria que las implementaciones en otros lenguajes y esto varia los resultados de velocidad Las prestaciones de Perl son similares a las de otros lenguajes como Python PHP o Ruby pero mas lento que la mayor parte de lenguajes compilados Perl puede ser mas lento que otros lenguajes haciendo lo mismo porque tiene que compilar el codigo fuente cada vez que corre el programa En A Timely Start Jean Louis Leroy encontro que sus scripts en Perl tardaban mucho mas tiempo en correr que lo que el esperaba porque el interprete perl perdia la mayor parte del tiempo buscando y compilando los modulos Como Perl no puede salvar su compilacion intermedia como lo hacen Java Python y Ruby los scripts Perl conllevan esta sobrecarga en cada ejecucion La sobrecarga no es un problema cuando la fase de ejecucion es muy larga pero puede sesgar significativamente en tiempos de ejecucion muy cortos como se encuentra a menudo en los benchmarks Una vez que perl inicia la fase de ejecucion sin embargo puede ser muy rapido y tipicamente supera a otros lenguajes dinamicos Tecnologias como mod perl superan esto guardando el programa compilado en memoria entre ejecuciones o Class Autouse que retrasa la compilacion de partes del programa hasta que son necesarias Optimizando Editar Nicholas Clark un desarrollador principal de Perl diserta sobre algunas mejoras en el diseno con Perl y otras soluciones en When perl is not quite fast enough Las rutinas mas criticas de un programa Perl pueden escribirse en C o incluso en lenguaje ensamblador con XS o Inline Optimizar Perl puede requerir un conocimiento intimo de su funcionamiento en lugar de la destreza con el lenguaje y su sintaxis significando que el problema esta con la implementacion de Perl en lugar de con el lenguaje mismo Raku la siguiente version tomara algunas de estas ideas como lecciones que otros lenguajes ya han aprendido Futuro EditarArticulo principal Raku lenguaje de programacion En el ano 2000 en la conferencia Perl Jon Orwant hizo una peticion para una nueva version del lenguaje 16 Esto condujo a una decision para comenzar el trabajo del rediseno del lenguaje que se llamaria Perl 6 Se pidieron propuestas a la comunidad Perl para las nuevas caracteristicas del lenguaje y se recibieron mas de 300 RFC del ingles Request For Comments peticion de comentarios Larry Wall estuvo los siguientes anos digiriendo los RFC y sintetizandolos en un entorno de trabajo coherente para Perl 6 Presento su diseno de Perl 6 en una serie de documentos llamados Apocalipsis que se numeran para corresponderse con los capitulos de Programming Perl La actual inacabada especificacion de Perl 6 esta resumida en unos documentos de diseno llamados Sinopsis que estan numerados para corresponder a los Apocalipsis Perl 6 no tiene la intencion de ser compatible para atras aunque existira un modo de compatibilidad En 2001 se decidio que Perl 6 corriese en una maquina virtual llamada Parrot Esto quiere decir que otros lenguajes que usen Parrot podran ganar acceso nativo a CPAN y permitira algun cierto nivel de desarrollo cruzado En 2005 Audrey Tang creo el proyecto pugs una implementacion de Perl 6 en Haskell Fue y es una plataforma de testeo del lenguaje Perl 6 separado del desarrollo actual de la implementacion permitiendo a los disenadores explorar El proyecto pugs engendro una activa comunidad Perl Haskell centrada alrededor del canal irc perl6 en Freenode Un cierto numero de caracteristicas en el lenguaje Perl 6 muestran una similitud con las de Haskell y Perl 6 ha sido acogido por la comunidad Haskell como un potencial lenguaje de scripting En el 2006 Perl 6 Parrot y pugs siguen estando bajo desarrollo y un nuevo modulo para Perl 5 llamado v6 permite a una parte del codigo Perl 6 correr directamente sobre Perl 5 En octubre de 2019 ante la evidencia de que Perl 6 es un lenguaje muy diferente de Perl 5 y para que no se generara una confusion entre los dos lenguajes se decidio renombrarlo a Raku Diversion con Perl EditarComo en C las competiciones de codigo ofuscado son un rasgo popular de la cultura Perl El Obfuscated Perl contest homenajea la virtud de la flexibilidad sintactica de Perl El programa siguiente imprime el texto Just another Perl Unix hacker usando 32 procesos en paralelo coordinados con pipes La explicacion completa esta disponible en el sitio web del autor P split URRUU c8R d split nrekcah xinU lreP rehtona tsuJ sub p p r p u p P P pipe r p u p p q 2 f fork map P P f ord p amp 6 p P ix P close keys p p p p p p map p P amp amp close p wait until map r amp amp lt gt p d q sleep rand 2 if S print De forma similar al codigo ofuscado pero con un proposito diferente Poesia Perl es la practica de escribir poemas que puedan ser compilados como codigo legal de Perl aunque generalmente sin sentido Esta aficion es mas o menos unica en Perl debido al gran numero de palabras normales del Ingles que el lenguaje utiliza Los nuevos poemas se publican de forma regular en el sitio Perl Monks en la seccion Poesia Perl Parte del saber de Perl esta en Black Perl un ejemplo infame de la poetica de Perl Otro pasatiempo es Perl Golf Como con el deporte real la meta es reducir el numero de golpes necesarios para completar un objetivo pero aqui los golpes se refieren a los pulsaciones de teclado en vez de a los recorridos en un club de golf Se propone una tarea como escanear un string de entrada y devolver el palindromo mas grande que contenga y los participantes intentan batir a sus oponentes escribiendo soluciones que requieran cada vez menos caracteres de codigo fuente Perl Otra tradicion entre los hacker Perl es escribir JAPH que es una especie de pequenos programas ofuscados que imprimen la frase Just another Perl hacker El canonico JAPH incluye la coma al final aunque a menudo se omite y otras muchas variantes que se han creado ejemplo 17 que imprime Just Another Perl Pirate Un modulo Perl interesante es Lingua Romana Perligata en CPAN Este modulo traduce el codigo fuente de un script escrito en Latin a Perl permitiendo al programador escribir programas ejecutables en Latin La comunidad Perl ha reservado el espacio de nombres Acme para los modulos que sean divertidos o experimentales Algunos de los modulos Acme estan implementados de maneras muy entretenidas Algunos ejemplos Acme Bleach uno de los primeros modulos en Acme permite al codigo fuente de un programa ser blanqueado es decir todos los caracteres son reemplazados por el espacio en blanco y seguir funcionando Es un ejemplo de un filtro de codigo fuente Hay tambien un cierto numero de otros filtros de fuente en el espacio de nombres Acme Acme Hello simplifica el proceso de escribir un programa Hello World Acme Currency permite cambiar el prefijo de las variables escalares por otro caracter por defecto usa el euro Acme ProgressBar es completamente hecho a proposito una horrible e ineficiente forma de indicar el progreso de una tarea Acme VerySign satiriza el largamente criticado servicio Site Finder de VeriSign Acme Don t implementa el opuesto logico de la palabra clave do don t que no ejecuta el bloque de codigo subordinado Enlaces relacionados Editar Humor Perl en Wikibooks Lingua Romana Perligata Escribe Perl en Latin Un tutorial sobre Perligata Test de Pureza PerlComunidad Perl EditarLa comunidad Perl esta constituida por grupos que a su vez conforman Perl Mongers 18 En Espana hay tres grupos Barcelona pm persona de contacto Alex Muntada Madrid pm persona de contacto Diego Kuperman Granada pm 19 persona de contacto Juan Julian Merelo GuervosVease tambien Editar Portal Software libre Contenido relacionado con Software libre La Fundacion Perl en la Wikipedia en ingles POE Entorno Objeto de Perl en la Wikipedia en ingles Perl Data Language en la Wikipedia en ingles herramienta de documentacion para Perl en la Wikipedia en ingles Just another Perl hacker en la Wikipedia en ingles Obfuscated Perl contest en la Wikipedia en ingles Perl Mongers en la Wikipedia en ingles PerlScript en la Wikipedia en ingles Comparison of programming languages en la Wikipedia en ingles Programming Perl en la Wikipedia en ingles Learning Perl en la Wikipedia en ingles Perl Cookbook en la Wikipedia en ingles Referencias Editar Perl 5 34 0 is now available www nntp perl org Consultado el 21 de mayo de 2021 Perl 5 32 1 is now available www nntp perl org Consultado el 24 de enero de 2021 Perl 5 35 5 is now available perl org Consultado el 23 de octubre de 2021 a b Larry Wall Archivado desde el original el 15 de agosto de 2006 Consultado el 20 de agosto de 2006 ingles perlhist the Perl history records www cpan org Consultado el 21 de julio de 2020 Perl Source www cpan org Consultado el 21 de julio de 2020 Perl O Reilly Media Usenet post May 10th 1997 with ID 199705101952 MAA00756 wall org What software hardware are you using to run the site Una descripcion del interprete Perl 5 se puede encontrar en Programming Perl 3rd Ed capitulo 18 ingles On Parsing Perl Hietaniemi Jarkko 1998 CPAN org ed Perl Ports Binary Distributions Prime Time Freeware ed 1997 The MacPerl Pages Archivado desde el original el 18 de enero de 2006 Win32 Perl Wiki ed Win32 Distributions Kennedy Adam 2006 Win32 Perl Wiki Transcripcion de la charla de Larry Anotada el 28 de septiembre de 2006 ingles Aharrr Perl Mongers Consultado el 14 de marzo de 2016 Granada Perl Mongers Consultado el 14 de marzo de 2016 Enlaces externos Editar Wikimedia Commons alberga una categoria multimedia sobre Perl Wikilibros alberga un libro o manual sobre Programacion en Perl Perl org El directorio Perl Perl com Perl en O Reilly Network Perldoc at Perl org documentacion en linea sobre Perl Documentacion Perl en espanol Proyecto de traduccion de las paginas del manual de Perl a espanol Desarrollo de Perl 5 y Perl 6 Parrot maquina virtualDistribucionesThe CPAN Comprehensive Perl Archive Network distribucion fuente de Perl ActiveState ActivePerl Perl para Microsoft Windows y otras plataformas IndigoPerl otra distribucion de Perl para Microsoft Windows Cygwin tambien distribuye Perl en Windows Strawberry Perl una implementacion open source para Windows sitios web sobre Perl en el Open Directory Project Datos Q42478 Multimedia Perl programming language Libros y manuales Programacion en Perl Obtenido de https es wikipedia org w index php title Perl amp oldid 139224052, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos