stringtranslate.com

Perl

Perl es un lenguaje de programación dinámico , interpretado , de propósito general y de alto nivel . Aunque Perl no es oficialmente un acrónimo, [9] existen varios acrónimos en uso, incluido "Practical Extraction and Reporting Language" [10] .

Perl fue desarrollado por Larry Wall en 1987 [11] como un lenguaje de programación Unix de propósito general para facilitar el procesamiento de informes. [12] [11] [13] Desde entonces, ha sufrido muchos cambios y revisiones. Perl originalmente no se escribía con mayúscula y el nombre se cambió a mayúscula cuando se lanzó Perl 4. [13] La última versión es Perl 5, lanzada por primera vez en 1994. Desde 2000 hasta octubre de 2019, se desarrolló una sexta versión de Perl; el nombre de la sexta versión se cambió a Raku . [14] [15] Ambos lenguajes continúan siendo desarrollados de forma independiente por diferentes equipos de desarrollo que toman prestadas ideas libremente entre sí.

Perl toma prestadas características de otros lenguajes de programación, incluidos C , sh , AWK y sed . [1] Proporciona facilidades de procesamiento de texto sin los límites arbitrarios de longitud de datos de muchas herramientas de línea de comandos de Unix contemporáneas . [16] Perl es un lenguaje de programación altamente expresivo : el código fuente para un algoritmo dado puede ser corto y altamente comprimible. [17] [18]

Perl ganó popularidad generalizada a mediados de la década de 1990 como lenguaje de programación CGI , en parte debido a sus potentes capacidades de análisis de cadenas y expresiones regulares . [19] [20] [21] [22] Además de CGI, Perl 5 se utiliza para administración de sistemas , programación de redes , finanzas, bioinformática y otras aplicaciones, como interfaces gráficas de usuario (GUI). Se le ha apodado "la motosierra suiza de los lenguajes de programación" debido a su flexibilidad y potencia. [23] En 1998, también se lo denominó la " cinta adhesiva que mantiene unida a Internet ", en referencia tanto a su uso ubicuo como lenguaje pegamento como a su aparente falta de elegancia. [24]

Nombre y logotipos

Perl se llamó originalmente "Pearl". Wall quería darle al lenguaje un nombre corto con connotaciones positivas. También es una referencia cristiana a la Parábola de la Perla del Evangelio de Mateo. [11] [25] Sin embargo, Wall descubrió el lenguaje PEARL existente antes del lanzamiento oficial de Perl y eliminó la "a" del nombre. [26] [11]

El nombre se expande ocasionalmente como acrónimo : Practical Extraction and Report Language [27] y el propio Pathologically Eclectic Rubbish Lister de Wall , que se encuentra en la página del manual de Perl. [28]

Programming Perl , publicado por O'Reilly Media , presenta una imagen de un camello dromedario en la portada y se lo conoce comúnmente como el "Libro del Camello". [29] Esta imagen se ha convertido en un símbolo no oficial de Perl. O'Reilly posee la imagen como marca registrada , pero la licencia para uso no comercial , requiriendo solo un reconocimiento y un enlace a www.perl.com. La licencia para uso comercial se decide caso por caso. [30] O'Reilly también proporciona logotipos de "Programming Republic of Perl" para sitios no comerciales y botones "Powered by Perl" para cualquier sitio que use Perl. [30]

La Fundación Perl posee un símbolo alternativo, una cebolla, que licencia a sus subsidiarias, Perl Mongers , PerlMonks , Perl.org y otras. [31] El símbolo es un juego de palabras visual con cebolla perlada . [32]

Historia

Primeras versiones

Larry Wall comenzó a trabajar en Perl en 1987, mientras trabajaba como programador en Unisys ; [16] lanzó la versión 1.0 el 18 de diciembre de 1987. [1] [11] Wall basó el Perl inicial en algunos métodos que los lenguajes existentes usaban para la manipulación de texto. [11]

Perl 2, publicado en junio de 1988, [33] [34] incluía un motor de expresiones regulares mejorado. Perl 3, publicado en octubre de 1989, [33] añadió compatibilidad con flujos de datos binarios . [35]

Década de 1990

Originalmente, la única documentación de Perl era una única y extensa página de manual . En 1991, se publicó Programming Perl , conocido por muchos programadores de Perl como el "Libro del Camello" debido a su portada, y se convirtió en la referencia de facto para el lenguaje. [36] Al mismo tiempo, el número de versión de Perl se incrementó a 4, no para marcar un cambio importante en el lenguaje sino para identificar la versión que estaba bien documentada por el libro. [37] Perl 4 se lanzó en marzo de 1991. [33]

Perl 4 pasó por una serie de versiones de mantenimiento , que culminaron en Perl 4.036 en 1993, momento en el que Wall abandonó Perl 4 para comenzar a trabajar en Perl 5. El diseño inicial de Perl 5 continuó hasta 1994. La lista de correo perl5-porters se creó en mayo de 1994 para coordinar el trabajo de adaptación de Perl 5 a diferentes plataformas. Sigue siendo el foro principal para el desarrollo, mantenimiento y adaptación de Perl 5. [38]

Perl 5.000 fue lanzado el 17 de octubre de 1994. [39] Fue una reescritura casi completa del intérprete y agregó muchas características nuevas al lenguaje, incluyendo objetos , referencias , variables léxicas (my) y módulos . Es importante destacar que los módulos proporcionaron un mecanismo para extender el lenguaje sin modificar el intérprete. Esto permitió que el intérprete central se estabilizara, al mismo tiempo que permitía a los programadores comunes de Perl agregar nuevas características del lenguaje. Perl 5 ha estado en desarrollo activo desde entonces.

Perl 5.001 se publicó el 13 de marzo de 1995. Perl 5.002 se publicó el 29 de febrero de 1996 con la nueva característica de prototipos. Esto permitió a los autores de módulos crear subrutinas que se comportaran como las instrucciones integradas de Perl . Perl 5.003 se publicó el 25 de junio de 1996 como una versión de seguridad. [40]

Uno de los eventos más importantes en la historia de Perl 5 tuvo lugar fuera del lenguaje propiamente dicho y fue consecuencia de su soporte de módulos. El 26 de octubre de 1995, se estableció la Red Integral de Archivos de Perl (CPAN, por sus siglas en inglés) como repositorio para el lenguaje Perl y los módulos de Perl ; a diciembre de 2022 , contiene más de 211.850 módulos en 43.865 distribuciones, escritos por más de 14.324 autores, y está reflejado en todo el mundo en más de 245 ubicaciones. [41]

Perl 5.004 se publicó el 15 de mayo de 1997 e incluía, entre otras cosas, el paquete UNIVERSAL, que proporcionaba a Perl un objeto base del que se derivaban automáticamente todas las clases y la capacidad de requerir versiones de módulos. Otro desarrollo significativo fue la inclusión del módulo CGI.pm , [42] que contribuyó a la popularidad de Perl como lenguaje de programación CGI . [43]

Perl 5.004 agregó soporte para Microsoft Windows , Plan 9 , QNX y AmigaOS . [42]

Perl 5.005 fue lanzado el 22 de julio de 1998. Esta versión incluyó varias mejoras al motor de expresiones regulares , nuevos enlaces al backend a través de los B::*módulos, el qr//operador de comillas de expresiones regulares, una gran selección de otros nuevos módulos centrales y soporte agregado para varios sistemas operativos más, incluido BeOS . [44]

2000–2020

Perl 5.6 fue lanzado el 22 de marzo de 2000. Los cambios principales incluyeron soporte de 64 bits , representación de cadenas Unicode , soporte para archivos de más de 2 GiB y la palabra clave "our". [46] [47] Al desarrollar Perl 5.6, se tomó la decisión de cambiar el esquema de versiones a uno más similar a otros proyectos de código abierto; después de 5.005_63, la siguiente versión se convirtió en 5.5.640, con planes para que las versiones de desarrollo tuvieran números impares y las versiones estables tuvieran números pares. [48]

En 2000, Wall hizo un llamamiento a la comunidad para que formulara sugerencias sobre una nueva versión de Perl. El proceso dio como resultado 361 documentos RFC ( Request for Comments ) que se utilizarían para guiar el desarrollo de Perl 6. En 2001, [49] se empezó a trabajar en los "Apocalipsis" para Perl 6, una serie de documentos destinados a resumir las solicitudes de cambio y presentar el diseño de la próxima generación de Perl. Se presentaron como un compendio de los RFC, en lugar de un documento formal. En ese momento, Perl 6 existía solo como una descripción de un lenguaje. [ cita requerida ]

Perl 5.8 se lanzó por primera vez el 18 de julio de 2002 y desde entonces se han lanzado más versiones 5.X aproximadamente cada año. Perl 5.8 mejoró el soporte Unicode, agregó una nueva implementación de E/S, agregó una nueva implementación de subprocesos, mejoró la precisión numérica y agregó varios módulos nuevos. [50] En 2013, esta versión seguía siendo la versión más popular de Perl y la usaban Red Hat Linux 5, SUSE Linux 10, Solaris 10, HP-UX 11.31 y AIX 5.

En 2004, se comenzó a trabajar en las "Sinopsis", documentos que originalmente resumían los Apocalipsis, pero que se convirtieron en la especificación para el lenguaje Perl 6. En febrero de 2005, Audrey Tang comenzó a trabajar en Pugs , un intérprete de Perl 6 escrito en Haskell . [51] Este fue el primer esfuerzo concertado para hacer realidad Perl 6. Este esfuerzo se estancó en 2006. [52]

El proyecto Perl On New Internal Engine (PONIE) existió desde 2003 hasta 2006. Debía ser un puente entre Perl 5 y 6, y un esfuerzo por reescribir el intérprete de Perl 5 para que se ejecutara en la máquina virtual Perl 6 Parrot . El objetivo era asegurar el futuro de los millones de líneas de código Perl 5 en miles de empresas de todo el mundo. [53] El proyecto PONIE finalizó en 2006 y ya no se desarrolla activamente. Algunas de las mejoras realizadas al intérprete de Perl 5 como parte de PONIE se incorporaron a ese proyecto. [54]

El 18 de diciembre de 2007, el 20 aniversario de Perl 1.0, se lanzó Perl 5.10.0. Perl 5.10.0 incluía nuevas características notables, que lo acercaban a Perl 6. Estas incluían una declaración switch (llamada "given"/"when"), actualizaciones de expresiones regulares y el operador de coincidencia inteligente (~~). [55] [56] Alrededor de esta misma época, comenzó el desarrollo en serio de otra implementación de Perl 6 conocida como Rakudo Perl, desarrollada en conjunto con la máquina virtual Parrot . A partir de noviembre de 2009, Rakudo Perl ha tenido lanzamientos mensuales regulares y ahora es la implementación más completa de Perl 6.

Con Perl 5.11 se produjo un cambio importante en el proceso de desarrollo de Perl 5: la comunidad de desarrollo ha adoptado un ciclo de lanzamiento mensual de versiones de desarrollo, con un programa anual de lanzamientos estables. Según ese plan, los lanzamientos puntuales de corrección de errores seguirán a los lanzamientos estables cada tres meses. [ cita requerida ]

El 12 de abril de 2010 se publicó Perl 5.12.0. Entre las mejoras más importantes se incluyen una nueva package NAME VERSIONsintaxis, el operador yada yada (destinado a marcar código de marcador de posición que aún no se ha implementado), restricciones implícitas, compatibilidad total con Y2038 , sobrecarga de conversión de expresiones regulares, compatibilidad con DTrace y Unicode 5.2. [57]

El 14 de mayo de 2011, se lanzó Perl 5.14 con soporte JSON incorporado. [58]

El 20 de mayo de 2012 se publicó Perl 5.16. Entre las novedades más destacadas se encuentra la posibilidad de especificar una versión determinada de Perl que se desea emular, lo que permite a los usuarios actualizar su versión de Perl, pero seguir ejecutando scripts antiguos que normalmente serían incompatibles. [59] [ verificación fallida ] Perl 5.16 también actualiza el núcleo para que sea compatible con Unicode 6.1. [59]

El 18 de mayo de 2013 se publicó Perl 5.18. Entre las nuevas características más destacadas se incluyen los nuevos ganchos dtrace, subs léxicos, más subs CORE::, una revisión del hash por razones de seguridad y compatibilidad con Unicode 6.2. [60]

El 27 de mayo de 2014 se publicó Perl 5.20. Entre las nuevas características más destacadas se incluyen firmas de subrutinas, segmentos hash/sintaxis de segmentos nuevos, desreferenciación de sufijos (experimental), Unicode 6.3 y una función rand() que utiliza un generador de números aleatorios consistente. [61]

Algunos observadores atribuyen al lanzamiento de Perl 5.10 el inicio del movimiento Modern Perl. [62] En particular, esta frase describe un estilo de desarrollo que adopta el uso del CPAN, aprovecha los desarrollos recientes en el lenguaje y es riguroso en la creación de código de alta calidad. [63] Si bien el libro Modern Perl [64] puede ser el abanderado más visible de esta idea, otros grupos como la Enlightened Perl Organization [65] han asumido la causa.

A finales de 2012 y 2013, comenzaron varios proyectos para implementaciones alternativas de Perl 5: Perl5 en Perl6 por el equipo Rakudo Perl, [66] moe por Stevan Little y amigos, [67] p2 [68] por el equipo Perl11 bajo Reini Urban, gperl por goccy, [69] y rperl, un proyecto Kickstarter dirigido por Will Braswell y afiliado al proyecto Perl11. [70]

Perl 6 y Raku

Camelia , el logotipo del proyecto Perl 6 [71]

En la Conferencia Perl de 2000 , Jon Orwant defendió la necesidad de una importante iniciativa para un nuevo lenguaje. [72] Esto llevó a la decisión de comenzar a trabajar en un rediseño del lenguaje, que se llamaría Perl 6. Se solicitaron propuestas para nuevas características del lenguaje a la comunidad Perl en general, que presentó más de 300 RFC . [73]

Wall pasó los siguientes años digiriendo los RFC y sintetizándolos en un marco coherente para Perl 6. Presentó su diseño para Perl 6 en una serie de documentos llamados "apocalipsis" - numerados para corresponder a los capítulos de Programming Perl . A partir de enero de 2011 , la especificación en desarrollo de Perl 6 fue encapsulada en documentos de diseño llamados Sinopsis - numerados para corresponder a Apocalipsis. [74]

El trabajo de tesis de Bradley M. Kuhn , supervisado por Wall, consideró el posible uso de la máquina virtual de Java como entorno de ejecución para Perl. [75] La tesis de Kuhn demostró que este enfoque era problemático. En 2001, se decidió que Perl 6 se ejecutaría en una máquina virtual multilenguaje llamada Parrot .

En 2005, Audrey Tang creó el proyecto Pugs , una implementación de Perl 6 en Haskell . Éste actuó, y sigue actuando, como una plataforma de prueba para el lenguaje Perl 6 (separada del desarrollo de la implementación real), permitiendo a los diseñadores del lenguaje explorar. El proyecto Pugs generó una activa comunidad multilingüe de Perl/Haskell centrada en el canal de IRC Libera Chat #raku. El equipo de diseño de Perl 6 absorbió muchas influencias de la programación funcional . [76]

En 2012, el desarrollo de Perl 6 se centró principalmente en dos compiladores: [77]

  1. Rakudo , una implementación que se ejecuta en la máquina virtual Parrot y la máquina virtual Java. [78]
  2. Niecza , que tiene como objetivo el Common Language Runtime .

En 2013, se anunció MoarVM ("Metamodel On A Runtime"), una máquina virtual basada en lenguaje C diseñada principalmente para Rakudo. [79]

En octubre de 2019, Perl 6 pasó a llamarse Raku. [80]

A partir de 2017, solo la implementación de Rakudo y MoarVM están bajo desarrollo activo, y se admiten otras máquinas virtuales, como Java Virtual Machine y JavaScript . [81]

Perl 7

En junio de 2020, se anunció Perl 7 como el sucesor de Perl 5. [82] Perl 7 se basaría inicialmente en Perl 5.32 con un lanzamiento esperado en la primera mitad de 2021, y candidatos a lanzamiento antes. [83]

Este plan se revisó en mayo de 2021, sin especificar ningún plazo de lanzamiento ni una versión de Perl 5 para utilizar como base. [84] Cuando se lanzara Perl 7, Perl 5 habría entrado en mantenimiento a largo plazo. Sin embargo, las versiones compatibles de Perl 5 seguirían recibiendo importantes correcciones de errores y de seguridad. [85]

Perl 7 se anunció el 24 de junio de 2020 en "La Conferencia Perl en la Nube" como el sucesor de Perl 5. [83] [82] Basado en Perl 5.32, Perl 7 fue planeado para ser compatible con versiones anteriores del código Perl 5 moderno; el código Perl 5, sin encabezado repetitivouse compat::perl5; (pragma), necesita ser agregado para seguir siendo compatible, pero el código moderno puede eliminar parte del texto repetitivo.

Sin embargo, el plan de pasar a Perl 7 generó más debate y el Comité Directivo de Perl lo canceló para evitar problemas de compatibilidad con versiones anteriores de scripts que no estaban escritos para los pragmas y módulos que se convertirían en los predeterminados en Perl 7. Perl 7 solo saldrá cuando los desarrolladores agreguen suficientes características para justificar una importante actualización de lanzamiento. [86]

Diseño

Filosofía

Según Wall, Perl tiene dos lemas. El primero es "Hay más de una manera de hacerlo", conocido comúnmente como TMTOWTDI (se pronuncia Tim Toady ). Como argumentan los defensores de este lema, esta filosofía facilita la redacción de declaraciones concisas. [87] [88] [89]

El segundo lema es “Las cosas fáciles deberían ser fáciles y las cosas difíciles deberían ser posibles”. [16]

El diseño de Perl puede entenderse como una respuesta a tres grandes tendencias en la industria informática: la caída de los costes del hardware, el aumento de los costes laborales y las mejoras en la tecnología de compilación . Muchos lenguajes informáticos anteriores, como Fortran y C, apuntaban a hacer un uso eficiente del costoso hardware informático. En cambio, Perl fue diseñado para que los programadores informáticos pudieran escribir programas de forma más rápida y sencilla. [90]

Perl tiene muchas características que facilitan la tarea del programador a costa de mayores requisitos de CPU y memoria. Estas incluyen administración automática de memoria; tipado dinámico ; cadenas, listas y hashes; expresiones regulares; introspección ; y una eval()función. Perl sigue la teoría de "sin límites incorporados", [29] una idea similar a la regla de Cero Uno Infinito .

Wall se formó como lingüista y el diseño de Perl está muy basado en principios lingüísticos . Algunos ejemplos son la codificación Huffman (las construcciones comunes deben ser breves), una buena ponderación final (la información importante debe aparecer primero) y una gran colección de primitivos del lenguaje . Perl favorece las construcciones del lenguaje que son concisas y naturales para que las escriban los humanos, incluso cuando complican el intérprete de Perl. [91]

La sintaxis de Perl refleja la idea de que "las cosas que son diferentes deberían verse diferentes". [92] Por ejemplo, los escalares, las matrices y los hashes tienen diferentes sigilos iniciales. Los índices de matrices y las claves hash utilizan diferentes tipos de llaves. Las cadenas y las expresiones regulares tienen diferentes delimitadores estándar.

Tanto el lenguaje Perl como la comunidad y cultura que lo rodean tienen una amplia inclinación práctica. El prefacio de Programming Perl comienza diciendo: "Perl es un lenguaje para hacer tu trabajo". [16] Una consecuencia de esto es que Perl no es un lenguaje ordenado. Incluye muchas características, tolera excepciones a sus reglas y emplea heurística para resolver ambigüedades sintácticas. Debido a la naturaleza indulgente del compilador, a veces puede ser difícil encontrar errores. La documentación de funciones de Perl comenta el comportamiento variable de las funciones integradas en contextos de lista y escalar diciendo: "En general, hacen lo que quieres, a menos que quieras consistencia". [93]

Características

La estructura general de Perl deriva en gran medida de C. Perl es de naturaleza procedimental , con variables , expresiones , declaraciones de asignación , bloques delimitados por llaves , estructuras de control y subrutinas . [94]

Perl también toma características de la programación en shell. Todas las variables están marcadas con sigilos iniciales , que permiten que las variables se interpolen directamente en cadenas . Sin embargo, a diferencia del shell, Perl usa sigilos en todos los accesos a las variables, y a diferencia de la mayoría de los otros lenguajes de programación que usan sigilos, el sigilo no denota el tipo de la variable sino el tipo de la expresión. Así, por ejemplo, mientras que una matriz se denota con el sigilo "@" (por ejemplo @arrayname), un miembro individual de la matriz se denota con el sigilo escalar "$" (por ejemplo $arrayname[3]). Perl también tiene muchas funciones integradas que proporcionan herramientas que se usan a menudo en la programación en shell (aunque muchas de estas herramientas son implementadas por programas externos al shell) como ordenar y llamar a las funciones del sistema operativo . [ cita requerida ]

Perl toma hashes ("matrices asociativas") de AWK y expresiones regulares de sed . Esto simplifica muchas tareas de análisis, manejo de texto y administración de datos. Con Lisp se comparte el retorno implícito del último valor de un bloque, y todas las declaraciones son también expresiones que pueden usarse en expresiones más grandes. [ cita requerida ]

Perl 5 agregó características que admiten estructuras de datos complejas , funciones de primera clase (es decir, cierres como valores) y un modelo de programación orientado a objetos. Estas incluyen referencias , paquetes, métodos basados ​​en clases dispatch y variables con alcance léxico , junto con directivas de compilador (por ejemplo, strict pragma ). Una característica adicional importante introducida con Perl 5 fue la capacidad de empaquetar código como módulos reutilizables. Wall declaró más tarde que "la intención del sistema de módulos de Perl 5 era fomentar el crecimiento de la cultura de Perl en lugar del núcleo de Perl". [95]

Todas las versiones de Perl realizan la tipificación automática de datos y la gestión automática de memoria . El intérprete conoce el tipo y los requisitos de almacenamiento de cada objeto de datos en el programa; asigna y libera almacenamiento para ellos según sea necesario utilizando el conteo de referencias (por lo que no puede desasignar estructuras de datos circulares sin intervención manual). Las conversiones de tipos legales (por ejemplo, conversiones de números a cadenas) se realizan automáticamente en tiempo de ejecución ; las conversiones de tipos ilegales son errores fatales. [ cita requerida ]

Sintaxis

Los críticos de Perl se han referido a él como "ruido de línea" y "lenguaje de sólo escritura". Randal L. Schwartz, en la primera edición del libro Learning Perl [96] , en el primer capítulo afirma: "Sí, a veces Perl parece ruido de línea para los no iniciados, pero para el programador de Perl experimentado, parece ruido de línea con suma de comprobación y una misión en la vida". [97] También afirmó que la acusación de que Perl es un lenguaje de sólo escritura podría evitarse si se programa con el "cuidado adecuado". [97] El documento de descripción general de Perl perlintro afirma que los nombres de las variables escalares "mágicas" integradas "parecen puntuación o ruido de línea". [98] Sin embargo, el módulo de inglés proporciona alternativas en inglés tanto largas como cortas. El documento perlstyle afirma que el ruido de línea en las expresiones regulares podría mitigarse utilizando el /xmodificador para agregar espacios en blanco. [99]

Según las FAQ de Perl 6 , Perl 6 fue diseñado para mitigar "los sospechosos habituales" que provocan la afirmación de "ruido de línea" de los críticos de Perl 5, incluida la eliminación de "la mayoría de las variables de puntuación" y la limpieza de la sintaxis de expresiones regulares. [100] Las FAQ de Perl 6 también afirman que lo que a veces se denomina ruido de línea de Perl es "la sintaxis real del lenguaje", así como los gerundios y las preposiciones son parte del idioma inglés . [100] En una publicación de blog de diciembre de 2012, a pesar de afirmar que "Rakudo Perl 6 ha fallado y seguirá fallando a menos que reciba alguna supervisión adulta", chromatic afirmó que el diseño de Perl 6 tiene una "gramática bien definida", un "sistema de tipos mejorado, un sistema de objetos unificado con un metamodelo inteligente, metaoperadores y un sistema de contexto más claro que proporciona sutilezas como la pereza generalizada". [101] También afirmó que "Perl 6 tiene una coherencia y una consistencia de las que carece Perl 5". [101]

En Perl, uno podría escribir el programa "¡Hola, mundo!" como:

imprimir "Hola, mundo!\n" ; 

A continuación se muestra un programa Perl más complejo, que cuenta los segundos a partir de un valor inicial dado:

#!/usr/bin/perl use strict ; use advertencias ;  mi ( $restante , $total );    $restante = $total = turno ( @ARGV );STDOUT -> vaciado automático ( 1 );mientras ( $restante ) { printf ( "Restantes %s/%s \r" , $restante -- , $total ); dormir 1 ; }            imprimir "\n" ; 

El intérprete de Perl también se puede utilizar para scripts puntuales en la línea de comandos. El siguiente ejemplo (invocado desde un shell compatible con sh, como Bash ) traduce la cadena "Bob" en todos los archivos que terminan en .txt en el directorio actual a "Robert":

$ perl  -i.bak  -lp  -e 's/Bob/Robert/g' *.txt  

Implementación

No existe ninguna especificación escrita o estándar para el lenguaje Perl para las versiones de Perl hasta Perl 5, y no hay planes para crear uno para la versión actual de Perl. Sólo ha habido una implementación del intérprete, y el lenguaje ha evolucionado junto con él. Ese intérprete, junto con sus pruebas funcionales, se mantiene como una especificación de facto del lenguaje. Perl 6, sin embargo, comenzó con una especificación [102], y varios proyectos [103] apuntan a implementar parte o toda la especificación. [ cita requerida ]

Perl se implementa como un intérprete central, escrito en C, junto con una gran colección de módulos, escritos en Perl y C. A partir de 2010 , el intérprete consta de 150.000 líneas de código C y se compila en un ejecutable de 1 MB en arquitecturas de máquinas típicas. Alternativamente, el intérprete se puede compilar en una biblioteca de enlaces e integrar en otros programas. Hay casi 500 módulos en la distribución, que comprenden 200.000 líneas de Perl y 350.000 líneas adicionales de código C (gran parte del código C en los módulos consiste en tablas de codificación de caracteres ). [ cita requerida ]

El intérprete tiene una arquitectura orientada a objetos. Todos los elementos del lenguaje Perl (escalares, matrices, hashes, coderefs, manejadores de archivos ) están representados en el intérprete por estructuras C. Las operaciones en estas estructuras están definidas por una gran colección de macros , definiciones de tipos y funciones; estas constituyen la API C de Perl. La API de Perl puede resultar desconcertante para los no iniciados, pero sus puntos de entrada siguen un esquema de nombres coherente , que proporciona orientación a quienes la utilizan. [ cita requerida ]

La vida de un intérprete de Perl se divide, en líneas generales, en una fase de compilación y una fase de ejecución. [104] En Perl, las fases son las etapas principales del ciclo de vida del intérprete. Cada intérprete pasa por cada fase solo una vez, y las fases se suceden en una secuencia fija. [ cita requerida ]

La mayor parte de lo que ocurre en la fase de compilación de Perl es compilación, y la mayor parte de lo que ocurre en la fase de ejecución de Perl es ejecución, pero hay excepciones significativas. Perl hace un uso importante de su capacidad para ejecutar código Perl durante la fase de compilación. Perl también retrasará la compilación hasta la fase de ejecución. Los términos que indican el tipo de procesamiento que está ocurriendo realmente en cualquier momento son tiempo de compilación y tiempo de ejecución . Perl está en tiempo de compilación en la mayoría de los puntos durante la fase de compilación, pero el tiempo de compilación también puede entrarse durante la fase de ejecución. El tiempo de compilación para el código en un argumento de cadena pasado al evalincorporado ocurre durante la fase de ejecución. Perl a menudo está en tiempo de ejecución durante la fase de compilación y pasa la mayor parte de la fase de ejecución en tiempo de ejecución. El código en BEGINbloques se ejecuta en tiempo de ejecución pero en la fase de compilación.

En tiempo de compilación, el intérprete analiza el código Perl en un árbol sintáctico . En tiempo de ejecución, ejecuta el programa recorriendo el árbol . El texto se analiza solo una vez y el árbol sintáctico se somete a optimización antes de ejecutarse, de modo que la ejecución es relativamente eficiente. Las optimizaciones en tiempo de compilación en el árbol sintáctico incluyen el plegado constante y la propagación del contexto, pero también se realiza la optimización de mirilla . [105]

Perl tiene una gramática Turing-completa porque el análisis puede verse afectado por el código en tiempo de ejecución ejecutado durante la fase de compilación. [106] Por lo tanto, Perl no puede analizarse mediante una combinación directa de analizador léxico / analizador Lex / Yacc . En cambio, el intérprete implementa su propio analizador léxico, que se coordina con un analizador léxico GNU bison modificado para resolver ambigüedades en el lenguaje. [ cita requerida ]

A menudo se dice que "Sólo Perl puede analizar Perl", [107] lo que significa que sólo el intérprete de Perl ( perl) puede analizar el lenguaje Perl ( Perl ), pero incluso esto no es, en general, cierto. Debido a que el intérprete de Perl puede simular una máquina de Turing durante su fase de compilación, necesitaría decidir el problema de detención para completar el análisis en todos los casos. Es un resultado de larga data que el problema de detención es indecidible y, por lo tanto, ni siquiera Perl puede analizar siempre Perl. Perl toma la inusual decisión de dar al usuario acceso a su poder de programación completo en su propia fase de compilación. El costo en términos de pureza teórica es alto, pero los inconvenientes prácticos parecen ser poco frecuentes. [108]

Otros programas que se dedican a analizar Perl, como los analizadores de código fuente y los autoindentadores , tienen que lidiar no sólo con construcciones sintácticas ambiguas , sino también con la indecidibilidad del análisis de Perl en el caso general. El proyecto PPI de Adam Kennedy se centró en analizar el código Perl como un documento (manteniendo su integridad como documento), en lugar de analizar Perl como código ejecutable (algo que ni siquiera el propio Perl puede hacer siempre). Fue Kennedy quien primero conjeturó que "el análisis de Perl sufre del 'problema de detención'", [109] lo que se demostró más tarde. [110]

Perl se distribuye con más de 250.000 pruebas funcionales para el lenguaje Perl básico y más de 250.000 pruebas funcionales para los módulos básicos. Estas pruebas se ejecutan como parte del proceso de compilación normal y ejercitan ampliamente el intérprete y sus módulos básicos. Los desarrolladores de Perl confían en las pruebas funcionales para garantizar que los cambios en el intérprete no introduzcan errores de software ; además, los usuarios de Perl que ven que el intérprete pasa las pruebas funcionales en su sistema pueden tener un alto grado de confianza en que está funcionando correctamente. [ cita requerida ]

Puertos

Perl tiene licencia dual, bajo la Licencia Artística 1.0 [5] [6] y la Licencia Pública General GNU [7] . Existen distribuciones para la mayoría de los sistemas operativos . Es particularmente común en sistemas Unix y similares , pero ha sido adaptado a la mayoría de las plataformas modernas (y muchas obsoletas). Con solo seis [ cita requerida ] excepciones reportadas, Perl puede compilarse a partir del código fuente en todas las plataformas compatibles con POSIX o compatibles con Unix. [111]

Debido a los cambios inusuales necesarios para el entorno clásico de Mac OS , se envió de forma independiente un puerto especial llamado MacPerl. [112]

La Red Integral de Archivos Perl contiene una lista completa de plataformas compatibles con enlaces a las distribuciones disponibles en cada una de ellas. [113] CPAN también es la fuente de módulos Perl disponibles públicamente que no forman parte de la distribución principal de Perl. [ cita requerida ]

ActivePerl es una distribución de código cerrado de ActiveState que tiene lanzamientos regulares que siguen los lanzamientos principales de Perl. [114] La distribución incluía anteriormente el administrador de paquetes Perl (PPM), [115] una herramienta popular para instalar, eliminar, actualizar y administrar el uso de módulos Perl comunes; sin embargo, esta herramienta se discontinuó a partir de ActivePerl 5.28. [116] También se incluye PerlScript , un motor Windows Script Host (WSH) que implementa el lenguaje Perl. Visual Perl es una herramienta de ActiveState que agrega Perl a la suite de desarrollo Visual Studio .NET . Esta compañía también ha producido un convertidor de VBScript a Perl, un compilador de Perl para Windows y convertidores de AWK y sed a Perl, que se incluyen en el CD de ActiveState para Windows , que incluye todas sus distribuciones más el IDE Komodo y todas menos la primera en la variante Unix–Linux–POSIX de las mismas en 2002 y posteriormente. [117]

Actuación

El juego de evaluación comparativa de lenguajes informáticos compara el rendimiento de las implementaciones de problemas de programación típicos en varios lenguajes de programación. [118] Las implementaciones de Perl presentadas suelen tener un rendimiento cercano al extremo superior del espectro de uso de memoria y arrojan resultados de velocidad variados. El rendimiento de Perl en el juego de evaluación comparativa es típico para lenguajes interpretados. [119]

Los programas Perl de gran tamaño se inician más lentamente que los programas similares en lenguajes compilados porque Perl tiene que compilar el código fuente cada vez que se ejecuta. En una charla en la conferencia YAPC::Europe 2005 y en el artículo posterior "Un comienzo oportuno", Jean-Louis Leroy descubrió que sus programas Perl tardaban mucho más de lo esperado en ejecutarse porque el intérprete de Perl dedicaba un tiempo significativo a encontrar módulos dentro de su ruta de inclusión demasiado grande. [120] A diferencia de Java, Python y Ruby, Perl sólo tiene soporte experimental para la precompilación. [121] Por lo tanto, los programas Perl pagan esta penalización de sobrecarga en cada ejecución. La fase de ejecución de los programas típicos es lo suficientemente larga como para que el tiempo de inicio amortizado no sea sustancial, pero los puntos de referencia que miden tiempos de ejecución muy cortos probablemente estén sesgados debido a esta sobrecarga. [122]

Se han introducido varias herramientas para mejorar esta situación. La primera de ellas fue mod_perl de Apache , que buscaba abordar una de las razones más comunes por las que se invocaban rápidamente pequeños programas Perl: el desarrollo web CGI . ActivePerl , a través de Microsoft ISAPI , proporciona mejoras de rendimiento similares. [123]

Una vez compilado el código Perl, se produce una sobrecarga adicional durante la fase de ejecución que normalmente no existe en los programas escritos en lenguajes compilados como C o C++. Algunos ejemplos de dicha sobrecarga son la interpretación del código de bytes , la gestión de la memoria de recuento de referencias y la comprobación dinámica de tipos. [124]

Las rutinas más críticas se pueden escribir en otros lenguajes (como C ), que se pueden conectar a Perl a través de módulos Inline simples o el mecanismo XS , más complejo pero flexible . [125]

Aplicaciones

Perl tiene muchas y variadas aplicaciones, a las que se suma la disponibilidad de numerosos módulos estándar y de terceros.

Perl se ha utilizado principalmente para escribir scripts CGI : entre los proyectos grandes escritos en Perl se incluyen cPanel , Slash , Bugzilla , RT , TWiki y Movable Type ; entre los sitios web de alto tráfico que utilizan Perl de forma extensiva se incluyen Priceline.com , Craigslist , [126] IMDb , [127] LiveJournal , DuckDuckGo , [128] [129] Slashdot y Ticketmaster . También es un componente opcional de la popular pila de tecnología LAMP para el desarrollo web , en lugar de PHP o Python . Perl se utiliza ampliamente como lenguaje de programación de sistemas en la distribución Debian Linux . [130]

Perl se utiliza a menudo como lenguaje de unión , uniendo sistemas e interfaces que no fueron diseñados específicamente para interoperar, y para la " manipulación de datos ", [131] es decir, convertir o procesar grandes cantidades de datos para tareas como la creación de informes. Estas ventajas están íntimamente relacionadas. La combinación hace de Perl un lenguaje multipropósito popular para administradores de sistemas , en particular porque se pueden introducir y ejecutar programas cortos, a menudo llamados " programas de una sola línea ", en una única línea de comandos . [ cita requerida ]

El código Perl se puede hacer portable entre Windows y Unix; los proveedores de software (tanto comercialmente disponible (COTS) como a medida) suelen utilizar este código para simplificar el empaquetado y el mantenimiento de scripts de compilación e implementación de software. [ cita requerida ]

Perl/Tk y wxPerl se utilizan comúnmente para agregar interfaces gráficas de usuario a los scripts de Perl.

Las capacidades de manejo de texto de Perl se pueden utilizar para generar consultas SQL ; las matrices, los hashes y la gestión automática de memoria facilitan la recopilación y el procesamiento de los datos devueltos. Por ejemplo, en la interfaz de programación de aplicaciones (API) Perl DBI de Tim Bunce , los argumentos de la API pueden ser el texto de las consultas SQL; por lo tanto, es posible programar en varios lenguajes al mismo tiempo (por ejemplo, para generar una página web utilizando HTML , JavaScript y SQL en un documento here ). El uso de la interpolación de variables de Perl para personalizar programáticamente cada una de las consultas SQL y la especificación de matrices o hashes de Perl como las estructuras para contener programáticamente los conjuntos de datos resultantes de cada consulta SQL, permite un mecanismo de alto nivel para manejar grandes cantidades de datos para su posprocesamiento por un subprograma de Perl. [132] En las primeras versiones de Perl, las interfaces de base de datos se creaban volviendo a vincular el intérprete con una biblioteca de base de datos del lado del cliente . Esto fue lo suficientemente difícil como para que se hiciera solo para unas pocas de las bases de datos más importantes y más utilizadas, y restringió el ejecutable resultante a usar solo una interfaz de base de datos a la vez. [133]perl

En Perl 5, las interfaces de bases de datos se implementan mediante módulos Perl DBI. El módulo DBI (Database Interface) presenta una única interfaz independiente de la base de datos para las aplicaciones Perl, mientras que los módulos DBD (Database Driver) manejan los detalles de acceso a unas 50 bases de datos diferentes; existen controladores DBD para la mayoría de las bases de datos ANSI SQL . [134]

DBI proporciona almacenamiento en caché para consultas y controladores de bases de datos, lo que puede mejorar en gran medida el rendimiento en entornos de ejecución de larga duración como mod_perl , [135] ayudando a los sistemas de gran volumen a evitar picos de carga como en el efecto Slashdot . [136]

En las aplicaciones Perl modernas, especialmente aquellas escritas utilizando marcos web como Catalyst , el módulo DBI se utiliza a menudo indirectamente a través de mapeadores relacionales de objetos como DBIx::Class , Class::DBI [137] o Rose::DB::Object [138] que generan consultas SQL y manejan datos de forma transparente para el autor de la aplicación. [139]

Comunidad

La cultura y la comunidad de Perl se han desarrollado junto con el lenguaje en sí. Usenet fue el primer lugar público en el que se presentó Perl, pero a lo largo de su evolución, la comunidad de Perl se fue configurando a partir del crecimiento de los servicios basados ​​en Internet, incluida la introducción de la World Wide Web. La comunidad que rodea a Perl fue, de hecho, el tema de la primera charla de Wall sobre el "Estado de la cebolla". [140]

State of the Onion es el nombre de los resúmenes anuales de Wall sobre el progreso de Perl y su comunidad, que se caracterizan por su humor característico y por emplear referencias a la cultura de Perl, la cultura hacker en general, el trasfondo lingüístico de Wall, a veces su vida familiar y, ocasionalmente, incluso su trasfondo cristiano. [141] Cada charla se da primero en varias conferencias de Perl y, finalmente, también se publica en línea.

En los mensajes de correo electrónico, Usenet y foros de discusión, los programas "Just another Perl hacker" (JAPH) son una tendencia común, originada por Randal L. Schwartz , uno de los primeros instructores profesionales de Perl. [142] En el lenguaje de la cultura Perl, los programadores de Perl son conocidos como hackers de Perl, y de ahí se deriva la práctica de escribir programas cortos para imprimir la frase "Just another Perl hacker". En el espíritu del concepto original, estos programas están moderadamente ofuscados y son lo suficientemente cortos como para caber en la firma de un mensaje de correo electrónico o de Usenet. El JAPH "canónico" desarrollado por Schwartz incluye la coma al final, aunque a menudo se omite. [143]

El "golf" en Perl es el pasatiempo que consiste en reducir al mínimo el número de caracteres ("pulsaciones" de teclas) utilizados en un programa Perl, de forma muy similar a como los jugadores de golf intentan realizar la menor cantidad de golpes posible en una ronda. El primer uso de la frase [144] enfatizaba la diferencia entre el código pedestre destinado a enseñar a un principiante y los trucos concisos que probablemente divertirían a los programadores de Perl experimentados, un ejemplo de estos últimos eran los JAPH que ya se utilizaban en las firmas de las publicaciones de Usenet y en otros lugares. Trucos similares habían sido un pasatiempo sin nombre en el lenguaje APL en décadas anteriores. El uso de Perl para escribir un programa que realizaba cifrado RSA provocó un interés generalizado y práctico en este pasatiempo. [145] En los años posteriores, el término " golf de código " se ha aplicado al pasatiempo en otros lenguajes. [146] En la Conferencia Perl 4.0 en Monterey, California, en julio de 2000 se celebró un Apocalipsis del Golf en Perl.

Al igual que con C, las competiciones de código ofuscado eran un pasatiempo muy conocido a finales de los años 90. El concurso de código ofuscado de Perl fue una competición organizada por The Perl Journal entre 1996 y 2000 que hizo de la flexibilidad sintáctica de Perl una de sus principales virtudes. Se otorgaron premios en categorías como "los programas más potentes" (que hacían un uso eficiente del espacio) y "la mejor firma de cuatro líneas" para los programas que encajaban en cuatro líneas de 76 caracteres al estilo de un bloque de firma de Usenet . [147]

La poesía en Perl es la práctica de escribir poemas que se pueden compilar como código Perl legal, por ejemplo, la pieza conocida como " Black Perl ". La poesía en Perl es posible gracias a la gran cantidad de palabras en inglés que se utilizan en el lenguaje Perl. Se envían nuevos poemas regularmente a la comunidad de PerlMonks . [148]

Véase también

Referencias

  1. ^ abc Ashton, Elaine (1999). «La línea de tiempo de Perl y su cultura (v3.0_0505)». Archivado desde el original el 11 de enero de 2013. Consultado el 12 de marzo de 2004 .
  2. ^ "Perl v5.40.0 ya está disponible". www.nntp.perl.org . Consultado el 11 de junio de 2024 .
  3. ^ "Perl 5.34.3, Perl 5.36.3 y Perl 5.38.2 ya están disponibles". www.nntp.perl.org . Consultado el 5 de diciembre de 2023 .
  4. ^ "Anuncio de lanzamiento de Perl v5.41.3". www.nntp.perl.org . Consultado el 29 de agosto de 2024 .
  5. ^ ab «La «licencia artística» - dev.perl.org». dev.perl.org . Archivado desde el original el 24 de julio de 2018 . Consultado el 24 de junio de 2016 .
  6. ^ ab Artistic Archivado el 25 de julio de 2018 en Wayback Machine - archivo en el repositorio git de Perl 5
  7. ^ ab "Licencias de Perl". dev.perl.org. Archivado desde el original el 22 de enero de 2011. Consultado el 8 de enero de 2011 .
  8. ^ Wall, Larry (12 de diciembre de 2007). "Programar es difícil, vamos a empezar a programar..." Archivado desde el original el 28 de julio de 2017 . Consultado el 14 de abril de 2019 . Todos los diseñadores de lenguajes tienen sus idiosincrasias ocasionales. Yo soy simplemente mejor que la mayoría en eso.
  9. ^ Lapworth, Leo. "Preguntas generales sobre Perl". Preguntas frecuentes sobre Perl . Perl.org. Archivado desde el original el 28 de mayo de 2013. Consultado el 24 de febrero de 2012 .
  10. ^ "perl(1): Practical Extraction/Report Language - Página del manual de Linux". Linux.die.net. Archivado desde el original el 3 de junio de 2013. Consultado el 23 de julio de 2013 .
  11. ^ abcdef Long, Tony. «18 de diciembre de 1987: Perl simplifica el laberinto que es el lenguaje de programación». Wired . ISSN  1059-1028 . Consultado el 14 de febrero de 2023 .
  12. ^ Sheppard, Doug (16 de octubre de 2000). "Introducción a Perl para principiantes". dev.perl.org. Archivado desde el original el 5 de junio de 2011. Consultado el 8 de enero de 2011 .
  13. ^ ab "Larry Wall, el gurú de Perl". Linux Journal . Consultado el 30 de agosto de 2023 .
  14. ^ "Acerca de Perl". perl.org. Archivado desde el original el 6 de noviembre de 2015. Consultado el 20 de abril de 2013 ."Perl" es una familia de lenguajes, "Perl 6" es parte de la familia, pero es un lenguaje independiente que tiene su propio equipo de desarrollo. Su existencia no tiene un impacto significativo en el desarrollo continuo de "Perl 5".
  15. ^ "Camino a Raku". GitHub. Archivado desde el original el 12 de noviembre de 2020. Consultado el 14 de enero de 2021. Este documento describe los pasos a seguir para realizar un cambio de nombre de Perl 6 a Raku .
  16. ^ abcd Wall, Larry ; Christiansen, Tom; Orwant, Jon (julio de 2000). Programación Perl, tercera edición . O'Reilly Media . ISBN. 978-0-596-00027-1.
  17. ^ "Cómo se miden los programas". Computer Language Benchmarks Game, Debian.net . Archivado desde el original el 12 de julio de 2020. Consultado el 5 de octubre de 2020 .
  18. ^ "RSA en 3 líneas de Perl - Everything2.com". everything2.com . Archivado desde el original el 8 de octubre de 2020 . Consultado el 5 de octubre de 2020 .
  19. ^ "Evaluaciones del lenguaje". Archivado desde el original el 10 de marzo de 2015. Consultado el 30 de enero de 2015. El punto más fuerte de Perl son sus extremadamente potentes funciones integradas para el procesamiento dirigido por patrones de formatos de datos textuales orientados a líneas; en esto no tiene rival.
  20. ^ "¡¿Usaste Perl para escribir QUÉ?!". 24 de enero de 2008. Archivado desde el original el 4 de febrero de 2015. Consultado el 4 de febrero de 2015. Perl siempre ha sido el lenguaje de referencia para cualquier tarea que implique la búsqueda de patrones de entrada.
  21. ^ "La importancia de Perl". Archivado desde el original el 2 de febrero de 2015 . Consultado el 4 de febrero de 2015 . La capacidad incomparable de Perl para procesar texto...
  22. ^ Smith, Roderick W. (21 de junio de 2002). Advanced Linux Networking . Addison-Wesley Professional. pág. 594. ISBN 978-0-201-77423-8.
  23. ^ Sheppard, Doug (16 de octubre de 2000). "Introducción a Perl para principiantes". O'Reilly Media . Archivado desde el original el 4 de junio de 2008. Consultado el 27 de julio de 2008 .
  24. ^ Leonard, Andrew. "La alegría de Perl". Salon.com . Archivado desde el original el 6 de julio de 2012. Consultado el 5 de junio de 2012 .
  25. ^ "Scripting on the Lido Deck". Wired . 7 de marzo de 2016. Archivado desde el original el 7 de marzo de 2016 . Consultado el 14 de febrero de 2023 .
  26. ^ Richardson, Marjorie (1 de mayo de 1999). «Larry Wall, el gurú de Perl». Linux Journal . Archivado desde el original el 20 de julio de 2013. Consultado el 3 de enero de 2011 .
  27. ^ Schwartz, Randal ; foy, brian ; Phoenix, Tom (16 de junio de 2011). Aprendiendo Perl . O'Reilly Media, Inc. p. 4. ISBN 978-1449313142A Perl se le denomina a veces "lenguaje práctico de extracción e informes", aunque también se le ha llamado "listador de basura patológicamente ecléctico", entre otras expansiones. En realidad, es un acrónimo, no un acrónimo, ya que Larry Wall, el creador de Perl, ideó el nombre primero y la expansión después. Es por eso que "Perl" no está en mayúsculas. No tiene sentido argumentar que la expansión es correcta: Larry aprueba ambas.
  28. ^ Wall, Larry . «perl - El intérprete del lenguaje Perl». Documentación de Perl 5 versión 12.2 . Archivado desde el original el 1 de julio de 2013 . Consultado el 26 de enero de 2011 .
  29. ^ ab Schwartz, Randal L ; Phoenix, Tom; Foy, Brian (6 de diciembre de 2007). Aprendiendo Perl, tercera edición. O'Reilly Media. ISBN 978-0-596-00132-2.
  30. ^ ab "Información sobre el uso y la marca registrada de Perl Camel". O'Reilly Media . Archivado desde el original el 25 de abril de 2018 . Consultado el 9 de enero de 2011 .
  31. ^ "Marca registrada de Perl". The Perl Foundation . Archivado desde el original el 3 de mayo de 2011. Consultado el 9 de enero de 2011 .
  32. ^ Gillmore, Dan (25 de octubre de 1998). «Republic Of Perl». Chicago Tribune . Archivado desde el original el 30 de abril de 2011. Consultado el 10 de enero de 2011 .
  33. ^ abc Kalita, Jugal (diciembre de 2003). On Perl: Perl for Students and Professionals. Universal-Publishers. ISBN 978-1-58112-550-4.
  34. ^ "Perl Culture". docstore.mik.ua . Consultado el 16 de marzo de 2023 .
  35. ^ Holloway, Ruth. «Perl cumple 30 años y su comunidad sigue prosperando». Opensource.com . Consultado el 23 de junio de 2023 .
  36. ^ "Programación en Perl, 3.ª edición [libro]". www.oreilly.com . Consultado el 11 de abril de 2023 .
  37. ^ "perlhist - los registros históricos de Perl - Navegador Perldoc". perldoc.perl.org . Consultado el 28 de julio de 2023 .
  38. ^ "archivo perl.perl5.porters". perl.org. Archivado desde el original el 1 de mayo de 2011. Consultado el 13 de enero de 2011 .
  39. ^ ab "perlhist: los registros históricos de Perl". Documentación de Perl 5 versión 12.2 . perldoc.perl.org. Archivado desde el original el 13 de enero de 2011 . Consultado el 21 de enero de 2011 .
  40. ^ "Perl: definición, historia y hechos". Britannica.com . Consultado el 15 de junio de 2022 .
  41. ^ "CPAN". CPAN . Archivado desde el original el 3 de octubre de 2019 . Consultado el 19 de diciembre de 2022 .
  42. ^ ab "perl5004delta – novedades de perl5.004". Documentación de Perl 5 versión 12.2 . perldoc.perl.org. Archivado desde el original el 27 de febrero de 2011 . Consultado el 8 de enero de 2011 .
  43. ^ Patwardhan, Nathan; Siever, Ellen; Spainhour, Stephen (2002). Perl en pocas palabras, segunda edición. O'Reilly Media . ISBN. 978-0-596-00241-1.
  44. ^ "perl5005delta - novedades de perl5.005". Documentación de Perl 5 versión 12.2 . perldoc.perl.org. Archivado desde el original el 3 de febrero de 2011 . Consultado el 21 de enero de 2011 .
  45. ^ "Fuente de Perl". cpan.org . Consultado el 26 de noviembre de 2023 .
  46. ^ "perl56delta - novedades de perl v5.6.0". Documentación de Perl 5 versión 12.2 . perldoc.perl.org. Archivado desde el original el 2 de febrero de 2011 . Consultado el 21 de enero de 2011 .
  47. ^ "perl56delta - novedades de perl v5.6.x". Documentación de Perl 5 versión 12.2 . perldoc.perl.org. Archivado desde el original el 18 de noviembre de 2010 . Consultado el 21 de enero de 2011 .
  48. ^ "Perl | Definición, historia y hechos | Britannica". www.britannica.com . Consultado el 15 de junio de 2022 .
  49. ^ Wall, Larry. «Apocalipsis 1: lo feo, lo malo y lo bueno». Archivado desde el original el 23 de noviembre de 2010. Consultado el 8 de enero de 2011 .
  50. ^ "perl58delta - novedades de perl v5.8.0". Documentación de Perl 5 versión 12.2 . perldoc.perl.org. Archivado desde el original el 21 de noviembre de 2010 . Consultado el 21 de enero de 2011 .
  51. ^ "Un plan para los pugs". O'Reilly Media . 3 de marzo de 2005. Archivado desde el original el 8 de septiembre de 2012. Consultado el 27 de enero de 2011 .
  52. ^ Tang, Audrey (21 de abril de 2010). "Re: Cómo implementar Perl 6 en diez años". PerlMonks . Archivado desde el original el 11 de mayo de 2011. Consultado el 3 de enero de 2011 .
  53. ^ Broadwell, Geoff (8 de agosto de 2005), OSCON 4.4: Inside Ponie, the Bridge from Perl 5 to Perl 6, O'Reilly ONLamp Blog, archivado del original el 14 de marzo de 2012 , consultado el 27 de junio de 2016
  54. ^ Vincent, Jesse (23 de agosto de 2006), Ponie ha sido enviada a pastar, The Perl Foundation, archivado desde el original el 27 de junio de 2009 , consultado el 15 de enero de 2019
  55. ^ "perl5100delta - novedades de perl 5.10.0". Documentación de Perl 5 versión 12.2 . perldoc.perl.org. Archivado desde el original el 21 de diciembre de 2010 . Consultado el 8 de enero de 2011 .
  56. ^ "perlsyn - Sintaxis de Perl". Documentación de Perl 5 versión 12.2 . perldoc.perl.org. Archivado desde el original el 26 de agosto de 2013 . Consultado el 21 de enero de 2011 .
  57. ^ "perl5120delta - novedades de perl v5.12.0". Documentación de Perl 5 versión 12.2 . perldoc.perl.org. Archivado desde el original el 4 de enero de 2011 . Consultado el 8 de enero de 2011 .
  58. ^ "perl5140delta - novedades de perl v5.14.0 - metacpan.org". metacpan.org . Archivado desde el original el 25 de julio de 2018 . Consultado el 22 de julio de 2017 .
  59. ^ ab "perl5160delta - novedades de perl v5.16.0". perldoc.perl.org . Consultado el 21 de mayo de 2012 .
  60. ^ "perl5180delta - novedades de perl v5.18.0 - lenguaje de programación Perl". Documentación de Perl 5 versión 18.0 . metacpan.org. Archivado desde el original el 29 de octubre de 2013 . Consultado el 27 de octubre de 2013 .
  61. ^ "perl5200delta - novedades de perl v5.20.0 - lenguaje de programación Perl". Documentación de Perl 5 versión 20.0 . metacpan.org. Archivado desde el original el 27 de mayo de 2014 . Consultado el 27 de mayo de 2014 .
  62. ^ Hitos en el renacimiento de Perl – Programación moderna en Perl Archivado el 27 de octubre de 2012 en Wayback Machine . Modernperlbooks.com. Recuperado el 17 de julio de 2013.
  63. ^ Prefacio (Modern Perl 2011-2012) Archivado el 28 de septiembre de 2012 en Wayback Machine . Modernperlbooks.com. Recuperado el 17 de julio de 2013.
  64. ^ Modern Perl 2011-2012 edition by chromatic |Onyx Neon Press Archivado el 22 de diciembre de 2011 en Wayback Machine . Onyxneon.com. Consultado el 17 de julio de 2013.
  65. ^ "Enlightened Perl". Enlightened Perl . Archivado desde el original el 5 de febrero de 2014. Consultado el 28 de septiembre de 2012 .
  66. ^ "YAPC::NA 2013 – 3–5 de junio, Austin, Texas". Yapcna.org. 4 de junio de 2013. Archivado desde el original el 22 de junio de 2013 . Consultado el 11 de abril de 2014 .
  67. ^ Little, Stevan (8 de febrero de 2013). «¿Qué es Moe (una aclaración)? | Stevan Little». Blogs.perl.org. Archivado desde el original el 19 de diciembre de 2013. Consultado el 11 de abril de 2014 .
  68. ^ "p2 sobre poción". Perl11.org. 7 de febrero de 2004. Archivado desde el original el 24 de septiembre de 2013. Consultado el 11 de abril de 2014 .
  69. ^ "goccy/gperl · GitHub". GitHub.com. Archivado desde el original el 23 de febrero de 2015. Consultado el 11 de abril de 2014 .
  70. ^ "rperl". RPerl.org. Archivado desde el original el 18 de octubre de 2014. Consultado el 11 de agosto de 2014 .
  71. ^ "Perl 6". El proyecto Perl 6. Archivado desde el original el 21 de febrero de 2011. Consultado el 27 de febrero de 2011 .
  72. ^ Torkington, Nathan. "Transcripción de la charla de Larry". nntp.perl.org. Archivado desde el original el 1 de mayo de 2011. Consultado el 25 de enero de 2011 .
  73. ^ "Perl6 - El futuro de Perl". www.java-samples.com . Consultado el 18 de mayo de 2021 .
  74. ^ "Documentación oficial de Perl 6". El proyecto Perl 6. Archivado desde el original el 31 de agosto de 2009. Consultado el 25 de enero de 2011 .
  75. ^ Kuhn, Bradley M. (enero de 2001). Consideraciones sobre la portabilidad de Perl a la máquina virtual de Java (tesis de maestría). Universidad de Cincinnati. Archivado desde el original el 21 de marzo de 2008. Consultado el 28 de junio de 2008 .
  76. ^ cromático (2015). Perl moderno. Biblioteca pragmática. ISBN 978-1-68050-088-2.
  77. ^ "Comparación de características de los compiladores de Perl 6". Archivado desde el original el 11 de agosto de 2017 . Consultado el 28 de marzo de 2012 .
  78. ^ Worthington, Jonathan (15 de julio de 2013). «Rakudo JVM News: More tests, plus Thread and Promise propotors» (Novedades de Rakudo JVM: más pruebas, además de prototipos de Thread y Promise). 6guts . Archivado desde el original el 5 de octubre de 2013. Consultado el 24 de julio de 2013 .
  79. ^ Worthington, Jonathan (31 de mayo de 2013). «MoarVM: una máquina virtual para NQP y Rakudo». 6guts . Archivado desde el original el 9 de julio de 2013 . Consultado el 24 de julio de 2013 .
  80. ^ "rename-lwn". Archivado desde el original el 17 de octubre de 2019 . Consultado el 10 de noviembre de 2019 .
  81. ^ "rakudo/rakudo - GitHub". GitHub.com. Archivado desde el original el 29 de julio de 2017. Consultado el 21 de septiembre de 2013 .
  82. ^ ab "Perl 7 anunciado en la Conferencia Perl en la Nube". perlfoundation.org. 24 de junio de 2020. Archivado desde el original el 26 de junio de 2020. Consultado el 24 de junio de 2020 .
  83. ^ ab "Anuncio de Perl 7". perl.com. 24 de junio de 2020. Archivado desde el original el 24 de junio de 2020 . Consultado el 24 de junio de 2020 .
  84. ^ Clark, Nicholas (9 de mayo de 2021). "Steering Council meeting #019 2021-05-06". www.nntp.perl.org . Archivado desde el original el 18 de mayo de 2021 . Consultado el 17 de mayo de 2021 . El plan sigue siendo que habrá una mejora de Perl 7, pero no inmediatamente después del lanzamiento de la versión 5.34.0. ... No creemos que podamos entregar [Perl 7] en 12 meses. 
  85. ^ Preparación para Perl 7d. leanpub.com. 24 de junio de 2020. Archivado desde el original el 25 de junio de 2020. Consultado el 24 de junio de 2020 .
  86. ^ Consejo Directivo de Perl. "¿Qué pasó con Perl 7?". blogs.perl.org . Consultado el 7 de julio de 2022 .
  87. ^ Richardson, Marjorie. "Larry Wall, el gurú de Perl | Linux Journal". www.linuxjournal.com . Linux Journal . Consultado el 16 de enero de 2023 .
  88. ^ Schwartz, Alan (diciembre de 1998). "Tutorial: Perl, un lenguaje de reformateo psicológicamente eficiente". Métodos, instrumentos y computadoras de investigación del comportamiento . 30 (4): 605–609. doi : 10.3758/BF03209477 . ISSN  0743-3808. S2CID  61028367.
  89. ^ Gilbert, James GR (marzo de 2002). "Cómo convertirse en un renacuajo de la programación". Nature Biotechnology . 20 (3): 221. doi :10.1038/nbt0302-221. ISSN  1087-0156. S2CID  38728402.
  90. ^ "La caída de Perl, el lenguaje más prometedor de la Web". FastCompany . 13 de febrero de 2014.
  91. ^ Wall, Larry. «perl - El intérprete del lenguaje Perl 5 - Navegador Perldoc». perldoc.perl.org . Consultado el 24 de junio de 2021 .
  92. ^ Wall, Larry (1 de marzo de 1997). "Wherefore Art, Thou?" [¿Por qué estás ahí?]. Linux Journal . Archivado desde el original el 9 de diciembre de 2010. Consultado el 13 de marzo de 2011 .
  93. ^ "perlfunc - Funciones integradas de Perl". Documentación de Perl 5 versión 12.2 . perldoc.perl.org. Archivado desde el original el 6 de enero de 2011 . Consultado el 10 de enero de 2011 .
  94. ^ Nagpal, DP (2010). Tecnología de diseño web . India: S. Chand. pág. 700. ISBN 978-8121927635.
  95. ^ "título desconocido". 10 de mayo de 1997. Usenet:  [email protected].[ enlace muerto ]
  96. ^ "Actualización para desarrolladores". Actualización para desarrolladores del Dr. Dobb . 2. Miller-Freeman. 1995.
  97. ^ ab Schwartz, Randal L. (1993). Aprendiendo Perl . O'Reilly & Associates. Bibcode :1993lepe.book.....S.
  98. ^ "perlintro". Documentación de Perl 5 versión 18.0 . Perl 5 Porters y perldoc.perl.org. Archivado desde el original el 9 de enero de 2011. Consultado el 30 de junio de 2013 .
  99. ^ "perlstyle". Documentación de Perl 5 versión 18.0 . Perl 5 Porters y perldoc.perl.org. Archivado desde el original el 26 de junio de 2013. Consultado el 30 de junio de 2013 .
  100. ^ ab "Preguntas frecuentes sobre Perl 6". Proyecto Perl 6. Archivado desde el original el 1 de julio de 2013. Consultado el 30 de junio de 2013 .
  101. ^ ab chromatic (31 de diciembre de 2012). «La implementación de Perl 5 frente a Perl 6». Archivado desde el original el 29 de julio de 2013. Consultado el 30 de junio de 2013 .
  102. ^ "Especificación de Perl 6". El proyecto Perl 6. Archivado desde el original el 2 de diciembre de 2009. Consultado el 27 de enero de 2011 .
  103. ^ "Compiladores de Perl 6". El proyecto Perl 6. Archivado desde el original el 2 de diciembre de 2009. Consultado el 27 de enero de 2011 .
  104. ^ Se puede encontrar una descripción del intérprete de Perl 5 en Programming Perl , 3.ª edición, capítulo 18. Véase en particular la página 467, que distingue cuidadosamente entre fase de ejecución y fase de compilación y tiempo de ejecución y tiempo de compilación . A menudo se confunden "tiempo" y "fase" en Perl.
  105. ^ "perlguts - Introducción a la API de Perl - Navegador Perldoc". perldoc.perl.org . Consultado el 24 de enero de 2022 .
  106. ^ Schwartz, Randal . "Sobre el análisis de Perl". Archivado desde el original el 27 de septiembre de 2007. Consultado el 3 de enero de 2007 .
  107. ^ "The Perl Journal #19/9.26" (PDF) . O'Reilly Media . Consultado el 4 de febrero de 2011 .[ enlace muerto permanente ]
  108. ^ Kegler, Jeffrey (7 de octubre de 2011). "Perl y análisis 11: ¿Son analizables todos los programas Perl?" . Consultado el 25 de octubre de 2022. ... parece que no estamos renunciando a absolutamente nada. Nadie ha sido capaz de demostrar nunca una desventaja práctica.
  109. ^ Kennedy, Adam (2006). «PPI: analizar, manipular Perl (sin Perl)». CPAN . Archivado desde el original el 3 de septiembre de 2013 . Consultado el 16 de septiembre de 2013 .
  110. ^ "Teorema de Rice". The Perl Review . 4 (3): 23–29. Verano de 2008.y "Perl es indecidible". The Perl Review . 5 : 7–11. Otoño de 2008., disponible en línea en Kegler, Jeffrey. "Perl and Undecidability". Archivado desde el original el 17 de agosto de 2009. Consultado el 4 de enero de 2009 .
  111. ^ Hietaniemi, Jarkko (1998). "Perl Ports (Binary Distributions)". CPAN.org. Archivado desde el original el 18 de abril de 2006. Consultado el 16 de abril de 2006 .
  112. ^ "Las páginas de MacPerl". Prime Time Freeware. 1997. Archivado desde el original el 18 de enero de 2006. Consultado el 18 de enero de 2006 .
  113. ^ "Perl Ports (Binary Distributions)" (Puertos Perl (distribuciones binarias)). CPAN . Archivado desde el original el 18 de abril de 2006. Consultado el 27 de enero de 2011 .
  114. ^ "ActivePerl es Perl para Windows, Mac, Linux, AIX, HP-UX y Solaris". ActiveState Software. Archivado desde el original el 31 de marzo de 2016. Consultado el 9 de enero de 2011 .
  115. ^ "Uso de PPM". ActiveState Software . Archivado desde el original el 27 de agosto de 2010. Consultado el 9 de enero de 2011 .
  116. ^ Crane, Dana (23 de julio de 2019). "Adiós PPM, hola State Tool". Activestate.com . Archivado desde el original el 28 de julio de 2020. Consultado el 16 de abril de 2020 .
  117. ^ readme.txt
  118. ^ "Alioth: The Computer Language Benchmarks Game: Información del proyecto". Alioth . Archivado desde el original el 25 de marzo de 2013 . Consultado el 13 de enero de 2011 .
  119. ^ "¿Qué programas son más rápidos?". Juego de benchmarks de lenguaje informático . Alioth . Archivado desde el original el 17 de mayo de 2013. Consultado el 13 de enero de 2011 .
  120. ^ Leroy, Jean-Louis (1 de diciembre de 2005). "Un comienzo oportuno". O'Reilly. Archivado desde el original el 13 de junio de 2006. Consultado el 22 de mayo de 2006 .
  121. ^ Beattie, Malcolm y Enache Adrian (2003). "El backend de bytecode del compilador Perl B::Bytecode". CPAN . Archivado desde el original el 30 de marzo de 2021 . Consultado el 16 de septiembre de 2013 .
  122. ^ Schwartz, Randal; Foy, Brian; Phoenix, Tom (23 de junio de 2011). Aprendiendo Perl. "O'Reilly Media, Inc." ISBN 978-1-4493-0358-7.
  123. ^ Stein, Lincoln; MacEachern, Doug (1999). Cómo escribir módulos Apache con Perl y C: la API de Apache y Mod_perl. "O'Reilly Media, Inc." ISBN 978-1-56592-567-0.
  124. ^ Bekman, Stas; Cholet, Eric (2003). Practical Mod_perl. "O'Reilly Media, Inc." ISBN 978-0-596-00227-5.
  125. ^ Ingerson, Brian. "Inline - metacpan.org". CPAN . Archivado desde el original el 13 de junio de 2013. Consultado el 26 de enero de 2011 .
  126. ^ Gilmore, WJ (2010). Introducción a PHP y MySQL: de principiante a profesional, cuarta edición . Apress. pág. 484. ISBN 978-1-4302-3114-1.
  127. ^ "IMDb Helpdesk: ¿Qué software/hardware está utilizando para ejecutar el sitio?". Internet Movie Database . Archivado desde el original el 9 de marzo de 2017. Consultado el 12 de febrero de 2011 .
  128. ^ DuckDuckGo maneja una gran cantidad de consultas de búsqueda, 4,5 millones de consultas por día. https://duckduckgo.com/traffic.html Archivado el 15 de febrero de 2012 en los Archivos web de la Biblioteca del Congreso
  129. ^ DuckDuckGo utiliza Perl https://web.archive.org/web/20101231135106/http://www.gabrielweinberg.com/blog/2009/03/duck-duck-go-architecture.html
  130. ^ "Preguntas frecuentes sobre Perl". Archivado desde el original el 6 de agosto de 2019. Consultado el 6 de agosto de 2019. Perl se utiliza bastante en Debian. No solo algunas funciones básicas están escritas en Perl, sino que hay más de 700 paquetes en inestable que tienen perl en su nombre (marzo de 2004).
  131. ^ "Libros de Perl - Libro: Data Munging with Perl". Perl.org . Archivado desde el original el 7 de septiembre de 2011. Consultado el 30 de diciembre de 2010 .
  132. ^ Descartes, Alligator; Bunce, Tim (2000). Programación de la base de datos Perl DBI: [programación de bases de datos con Perl] (1.ª ed.). Beijing [ua]: O'Reilly. ISBN 978-1-56592-699-8.
  133. ^ "Programación en Perl: principios de los lenguajes de programación". sites.google.com . Archivado desde el original el 8 de octubre de 2020 . Consultado el 18 de mayo de 2021 .
  134. ^ Bunce, Tim; Descartes, Alligator (4 de febrero de 2000). Programación de la base de datos Perl DBI: Programación de bases de datos con Perl. "O'Reilly Media, Inc." ISBN 978-1-4493-1536-8.
  135. ^ Bekman, Stas. "Trabajo eficiente con bases de datos en mod_perl". Archivado desde el original el 22 de agosto de 2007. Consultado el 1 de septiembre de 2007 .
  136. ^ Pachev, Sasha (10 de abril de 2007). Entender los aspectos internos de MySQL: descubrir y mejorar una gran base de datos. "O'Reilly Media, Inc." ISBN 978-0-596-55280-0.
  137. ^ "Class::DBI - Simple Database Abstraction - metacpan.org". metacpan.org . Archivado desde el original el 6 de agosto de 2020 . Consultado el 8 de abril de 2020 .
  138. ^ "Rose::DB::Object - Mapeador relacional de objetos (ORM) extensible y de alto rendimiento. - metacpan.org". metacpan.org . Archivado desde el original el 6 de agosto de 2020 . Consultado el 8 de abril de 2020 .
  139. ^ "Referencia para desarrolladores de consultas SQL". pdfpremiumfree.com . Consultado el 18 de mayo de 2021 .
  140. ^ Wall, Larry (22 de mayo de 2014). «Perl Culture (también conocido como el primer State of the Onion)». Archivado desde el original el 22 de mayo de 2014. Consultado el 22 de mayo de 2014 .
  141. ^ Wall, Larry . «Segundo estado de la cebolla». Archivado desde el original el 17 de julio de 2012. Consultado el 12 de octubre de 2012 .(Buscar 'iglesia')
  142. ^ Schwartz, Randal L. (2 de mayo de 1999). "Who is Just another Perl hacker?". Grupo de noticias : comp.lang.perl.misc. Usenet:  [email protected]. Archivado desde el original el 8 de julio de 2012. Consultado el 5 de diciembre de 2014 .
  143. ^ Schwartz, Randal (31 de marzo de 2005). «Canonical JAPH». PerlMonks . Archivado desde el original el 22 de julio de 2011. Consultado el 16 de mayo de 2011 .
  144. ^ Bacon, Greg (28 de mayo de 1999). "Re: Incrementar un valor en una porción". Grupo de noticias : comp.lang.perl.misc. Usenet:  [email protected]. Archivado desde el original el 7 de julio de 2011 . Consultado el 12 de julio de 2011 .
  145. ^ Volver, Adam. «RSA en 5 líneas de Perl». Archivado desde el original el 19 de enero de 2011. Consultado el 10 de enero de 2011 .
  146. ^ "Code Golf: ¿Qué es Code Golf?". 29degrees. 2007. Archivado desde el original el 13 de enero de 2012. Consultado el 26 de noviembre de 2018 .
  147. ^ Gallo, Felix (2003). "The Zeroth Ofuscated Perl Contest" (PDF) . En Jon Orwant (ed.). Juegos, diversiones y cultura Perl: lo mejor de la revista Perl . O'Reilly Media. Archivado desde el original (PDF) el 22 de noviembre de 2009. Consultado el 12 de enero de 2011 .
  148. ^ "Perl Poetry". PerlMonks . Archivado desde el original el 27 de septiembre de 2007. Consultado el 27 de enero de 2011 .

Lectura adicional

Enlaces externos