Este es un buen artículo. Haga clic aquí para más información.
De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

Perl es una familia de dos personas de alto nivel , de propósito general , interpretadas , lenguajes de programación dinámicos . "Perl" se refiere a Perl 5, pero de 2000 a 2019 también se refirió a su "lenguaje hermano" rediseñado, Perl 6, antes de que el nombre de este último se cambiara oficialmente a Raku en octubre de 2019. [10] [11] Perl 7, continuando de Perl 5, no de Perl 6, también estará disponible en 2021.

Aunque Perl no es oficialmente un acrónimo, [12] hay varios backronyms en uso, incluyendo "Practical Extraction and Reporting Language". [13] Perl fue desarrollado originalmente por Larry Wall en 1987 como un lenguaje de scripting Unix de propósito general para facilitar el procesamiento de informes. [14] Desde entonces, ha sufrido muchos cambios y revisiones. Raku , que comenzó como un rediseño de Perl 5 en 2000, eventualmente se convirtió en un lenguaje separado. Ambos lenguajes continúan siendo desarrollados de forma independiente por diferentes equipos de desarrollo y se toman prestadas ideas libremente entre sí.

Los lenguajes Perl toman prestado características de otros lenguajes de programación, incluidos C , shell script ( sh ), AWK y sed ; [15] Wall también alude a BASIC y Lisp en la introducción a Learning Perl (Schwartz & Christiansen) y así sucesivamente. [16] Proporcionan facilidades de procesamiento de texto sin los límites de longitud de datos arbitrarios de muchas herramientas de línea de comandos de Unix contemporáneas , [17] facilitando la manipulación de archivos de texto . Perl 5 ganó una gran popularidad a finales de la década de 1990 como scripting CGIlenguaje, en parte debido a su expresión regular insuperable y su capacidad de análisis de cadenas . [18] [19] [20] [21]

Además de CGI, Perl 5 se utiliza para administración de sistemas , programación de redes , finanzas, bioinformática y otras aplicaciones, como GUI . Se le ha apodado "la motosierra del ejército suizo de los lenguajes de scripting" debido a su flexibilidad y potencia, [22] y también a su fealdad. [23] En 1998, también se la conoció como la " cinta adhesiva que mantiene unida a Internet ", en referencia tanto a su uso omnipresente como lenguaje de pegamento como a su falta de elegancia percibida. [24]

Perl es un lenguaje de programación muy expresivo : el código fuente de un algoritmo dado puede ser corto y muy comprimible. [25] [26]

Historia [ editar ]

Versiones tempranas [ editar ]

Larry Wall comenzó a trabajar en Perl en 1987, mientras trabajaba como programador en Unisys , [17] y lanzó la versión 1.0 al grupo de noticias comp.sources.misc el 18 de diciembre de 1987. [27] El lenguaje se expandió rápidamente durante los siguientes años. .

Perl 2, lanzado en 1988, presentaba un mejor motor de expresión regular. Perl 3, lanzado en 1989, agregó soporte para flujos de datos binarios . [ cita requerida ]

Originalmente, la única documentación para Perl era una sola página de manual larga . En 1991, Programming Perl , conocido por muchos programadores de Perl como el "Libro Camel" debido a su portada, se publicó y se convirtió en la referencia de facto para el lenguaje. Al mismo tiempo, el número de versión de Perl aumentó a 4, no para marcar un cambio importante en el idioma, sino para identificar la versión que estaba bien documentada en el libro. [ cita requerida ]

Early Perl 5 [ editar ]

Perl 4 pasó por una serie de versiones de mantenimiento , que culminaron con Perl 4.036 en 1993, después de lo cual Wall abandonó Perl 4 para comenzar a trabajar en Perl 5. El diseño inicial de Perl 5 continuó en 1994. La lista de correo de perl5-porters se estableció en mayo de 1994 para coordinar el trabajo de portar Perl 5 a diferentes plataformas. Sigue siendo el foro principal para el desarrollo, mantenimiento y portabilidad de Perl 5. [28]

Perl 5.000 fue lanzado el 17 de octubre de 1994. [29] 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 idioma sin modificar al intérprete. Esto permitió que el intérprete central se estabilizara, incluso cuando permitió a los programadores ordinarios de Perl agregar nuevas funciones de lenguaje. Perl 5 ha estado en desarrollo activo desde entonces. [ cita requerida ]

Perl 5.001 fue lanzado el 13 de marzo de 1995. Perl 5.002 fue lanzado el 29 de febrero de 1996 con la nueva función de prototipos. Esto permitió a los autores de módulos crear subrutinas que se comportaban como incorporaciones de Perl . Perl 5.003 se publicó el 25 de junio de 1996 como una versión de seguridad. [ cita requerida ]

Uno de los eventos más importantes en la historia de Perl 5 tuvo lugar fuera del lenguaje propiamente dicho y fue una consecuencia del soporte de su módulo. El 26 de octubre de 1995, se estableció la Red Comprensiva de Archivos Perl (CPAN) como un repositorio para el lenguaje Perl y los módulos Perl ; En mayo de 2017, lleva más de 185,178 módulos en 35,190 distribuciones, escritos por más de 13,071 autores, y se refleja en todo el mundo en más de 245 ubicaciones. [30]

Perl 5.004 fue lanzado el 15 de mayo de 1997 e incluía, entre otras cosas, el paquete UNIVERSAL, lo que le dio a Perl un objeto base del que se derivaron automáticamente todas las clases y la capacidad de requerir versiones de módulos. Otro avance significativo fue la inclusión del módulo CGI.pm , [31] que contribuyó a la popularidad de Perl como lenguaje de programación CGI . [32]

Perl 5.004 también agregó soporte para Microsoft Windows y varios otros sistemas operativos. [31]

Perl 5.005 se lanzó el 22 de julio de 1998. Esta versión incluyó varias mejoras en el motor de expresiones regulares , nuevos enlaces en el backend a través de los B::*módulos, el qr//operador de cotización de expresiones regulares, una gran selección de otros módulos centrales nuevos y soporte adicional para varias operaciones más. sistemas, incluido BeOS . [33]

2000-2020 [ editar ]

Perl 5.6 fue lanzado el 22 de marzo de 2000. Los principales cambios incluyeron compatibilidad con 64 bits , representación de cadenas Unicode , compatibilidad con archivos de más de 2 GiB y la palabra clave "nuestro". [36] [37] 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 tengan números impares y las versiones estables tengan números pares. [ cita requerida ]

En 2000, Wall lanzó una convocatoria de sugerencias para una nueva versión de Perl de la comunidad. El proceso dio como resultado 361 documentos RFC (solicitud de comentarios) que se utilizarían para guiar el desarrollo de Perl 6. En 2001, [38] se comenzó a trabajar en los "Apocalipsis" para Perl 6, una serie de documentos destinados a resumir el cambio. solicita y presenta el diseño de la próxima generación de Perl. Se presentaron como un resumen de las RFC, en lugar de un documento formal. En este punto, Perl 6 existía solo como una descripción de un idioma. [ cita requerida ]

Perl 5.8 se lanzó por primera vez el 18 de julio de 2002 y desde entonces ha tenido actualizaciones casi anuales. Perl 5.8 mejoró la compatibilidad con 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. [39] A partir de 2013, esta versión sigue siendo la versión más popular de Perl y es utilizada por Red Hat 5, Suse 10, Solaris 10, HP-UX 11.31 y AIX 5. [ cita requerida ]

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

El 18 de diciembre de 2007, el vigésimo aniversario de Perl 1.0, se lanzó Perl 5.10.0. Perl 5.10.0 incluyó nuevas características notables, que lo acercaron a Perl 6. Estas incluían una declaración de cambio (llamada "dado" / "cuando"), actualizaciones de expresiones regulares y el ' operador de coincidencia inteligente (~~). [42] [43] 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 . Desde noviembre de 2009, Rakudo Perl ha tenido lanzamientos mensuales regulares y ahora es la implementación más completa de Perl 6.

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

El 12 de abril de 2010, se lanzó Perl 5.12.0. Las mejoras principales notables incluyen una nueva package NAME VERSIONsintaxis, el operador Yada Yada (destinado a marcar el código de marcador de posición que aún no está implementado), restricciones implícitas, cumplimiento total de Y2038 , sobrecarga de conversión de expresiones regulares, compatibilidad con DTrace y Unicode 5.2. [44] El 21 de enero de 2011, se publicó Perl 5.12.3; contiene módulos actualizados y algunos cambios en la documentación. [45] La versión 5.12.4 se publicó el 20 de junio de 2011. La última versión de esa rama, 5.12.5, se publicó el 10 de noviembre de 2012. [ cita requerida ]

El 14 de mayo de 2011, se lanzó Perl 5.14. La compatibilidad con JSON está integrada a partir de la versión 5.14.0. [46] La última versión de esa rama, 5.14.4, se publicó el 10 de marzo de 2013. [ cita requerida ]

El 20 de mayo de 2012, se lanzó Perl 5.16. Las características nuevas notables incluyen la capacidad 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 aún así ejecutar scripts antiguos que normalmente serían incompatibles. [47] Perl 5.16 también actualiza el núcleo para admitir Unicode 6.1. [47]

El 18 de mayo de 2013, se lanzó Perl 5.18. Las nuevas características notables incluyen los nuevos ganchos de dtrace, subs léxicos, más CORE :: subs, revisión del hash por razones de seguridad, soporte para Unicode 6.2. [48]

El 27 de mayo de 2014, se lanzó Perl 5.20. Las nuevas características notables incluyen firmas de subrutinas, trozos de hash / nueva sintaxis de segmento, desreferenciación de postfijos (experimental), Unicode 6.3, rand () usando un generador de números aleatorios consistente. [49]

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

A finales de 2012 y 2013, comenzaron varios proyectos para implementaciones alternativas para Perl 5: Perl5 en Perl6 por el equipo de Rakudo Perl, [54] moe por Stevan Little y sus amigos, [55] p2 [56] por el equipo de Perl11 bajo Reini Urban, gperl by goccy, [57] y rperl un proyecto kickstarter dirigido por Will Braswell y afiliado al proyecto Perll11. [58]

2020 en adelante [ editar ]

En junio de 2020, Perl 7 se anunció como el sucesor de Perl 5. [59] Perl 7 se basará inicialmente en Perl 5.32 con un lanzamiento esperado en la primera mitad de 2021, y los candidatos se lanzarán antes. [60] Cuando se lance Perl 7, Perl 5 entrará en mantenimiento a largo plazo. Sin embargo, las versiones compatibles de Perl 5 continuarán obteniendo importantes correcciones de seguridad y errores. [61]

PONIE [ editar ]

PONIE es un acrónimo de Perl On New Internal Engine. El Proyecto PONIE existió desde 2003 hasta 2006 y debía ser un puente entre Perl 5 y Perl 6. Fue un esfuerzo reescribir el intérprete de Perl 5 para que se ejecutara en Parrot , la máquina virtual de Perl 6. El objetivo era garantizar el futuro de millones de líneas de código Perl 5 en miles de empresas de todo el mundo. [62]

El proyecto PONIE finalizó en 2006 y ya no se está desarrollando activamente. Algunas de las mejoras realizadas en el intérprete de Perl 5 como parte de PONIE se incluyeron en ese proyecto. [63]

Nombre [ editar ]

Perl se llamó originalmente "Pearl". Wall quería darle al idioma un nombre corto con connotaciones positivas; Afirma que consideró cada palabra de tres y cuatro letras en el diccionario. También consideró ponerle el nombre de su esposa Gloria. Wall descubrió el lenguaje de programación PEARL existente antes del lanzamiento oficial de Perl y cambió la ortografía del nombre. [64]

Cuando se hace referencia al idioma, el nombre normalmente se escribe con mayúscula ( Perl ) como nombre propio. Cuando se hace referencia al programa intérprete en sí, el nombre a menudo no está en mayúsculas ( perl ) porque la mayoría de los sistemas de archivos similares a Unix distinguen entre 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, puso en mayúscula el nombre del idioma en el libro para que se destaque mejor al componerse. Esta distinción de caso se documentó posteriormente como canónica. [sesenta y cinco]

El nombre se expande ocasionalmente como Extracción práctica y lenguaje de informes , pero esto es un backronym . [66] Se han sugerido otras expansiones como igualmente canónicas, incluida la propia lista de basura patológicamente ecléctica de Wall, que se encuentra en la página del manual de perl. [67] De hecho, Wall afirma que el nombre tenía la intención de inspirar muchas expansiones diferentes. [68]

Símbolo de camello [ editar ]

El símbolo del camello utilizado por O'Reilly Media

Programming Perl , publicado por O'Reilly Media , presenta una imagen de un camello dromedario en la portada y es comúnmente llamado el "Libro del camello". [69] Esta imagen de un camello se ha convertido en un símbolo no oficial de Perl, así como en un emblema de hacker general , que aparece en camisetas y otras prendas de vestir. [ cita requerida ]

O'Reilly posee la imagen como marca comercial, pero la licencia para uso no comercial , lo que requiere solo un reconocimiento y un enlace a www.perl.com. La concesión de licencias para uso comercial se decide caso por caso. [70] O'Reilly también proporciona logotipos de "Programming Republic of Perl" para sitios no comerciales y botones "Powered by Perl" para cualquier sitio que utilice Perl. [70]

Símbolo de cebolla [ editar ]

El logotipo de la cebolla utilizado por The Perl Foundation

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

Símbolo de raptor [ editar ]

Logotipo alternativo de Perl 5

Sebastian Riedel, el creador de Mojolicious , ha creado un logotipo que representa un dinosaurio raptor , que está disponible bajo una licencia CC-SA, versión 4.0. [73] El logo está siendo remezclado y usado en diferentes lugares y simboliza Perl 5. El análogo del raptor proviene de una serie de charlas dadas por Matt S Trout a partir de 2010. [74] Las charlas tenían como objetivo ser más Perl 5 centrado en la comunidad, en un período en el que Perl 6 era un tema candente. [ cita requerida ]

Resumen [ editar ]

Según Wall, Perl tiene dos lemas. La primera es " Hay más de una forma de hacerlo ", comúnmente conocida como TMTOWTDI. El segundo lema es "Las cosas fáciles deberían ser fáciles y las difíciles deberían ser posibles". [17]

Funciones [ editar ]

La estructura general de Perl deriva ampliamente de C. Perl es de procedimiento en la naturaleza, con las variables , expresiones , instrucciones de asignación , abrazadera -delimited bloques , estructuras de control , y subrutinas . [ cita requerida ]

Perl también toma características de la programación de 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 variable sino el tipo de expresión. Entonces, por ejemplo, mientras que una matriz se indica con el sigilo "@" (por ejemplo @arrayname), un miembro individual de la matriz se indica con el sigilo escalar "$" (por ejemplo $arrayname[3]). Perl también tiene muchas funciones integradas que proporcionan herramientas que se utilizan a menudo en la programación de shell (aunque muchas de estas herramientas son implementadas por programas externos al shell) como ordenary llamar a las instalaciones del sistema operativo . [ cita requerida ]

Perl toma listas de Lisp , hashes ("matrices asociativas") de AWK y expresiones regulares de sed . Estos simplifican y facilitan muchas tareas de análisis, manejo de texto y administración de datos. También se comparte con Lisp el retorno implícito del último valor en un bloque y el hecho de que todas las declaraciones tienen un valor y, por lo tanto, también son expresiones y 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. Estos incluyen referencias , paquetes, distribución de métodos basados ​​en clases y variables de ámbito léxico , junto con las directivas del compilador (por ejemplo, el 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 "toda 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". [75]

Todas las versiones de Perl realizan la escritura automática de datos y la gestión automática de la 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 mediante el recuento de referencias (por lo que no puede desasignar estructuras de datos circulares sin intervención manual). Las conversiones de tipo legal , por ejemplo, las conversiones de número a cadena, se realizan automáticamente en tiempo de ejecución ; las conversiones de tipos ilegales son errores fatales. [ cita requerida ]

Diseño [ editar ]

El diseño de Perl puede entenderse como una respuesta a tres tendencias generales en la industria informática: la caída de los costos de hardware, el aumento de los costos de mano de obra y las mejoras en la tecnología de compilación . Muchos lenguajes informáticos anteriores, como Fortran y C, tenían como objetivo hacer un uso eficiente del costoso hardware informático. Por el contrario, Perl fue diseñado para que los programadores de computadoras pudieran escribir programas más rápida y fácilmente. [ cita requerida ]

Perl tiene muchas características que facilitan la tarea del programador a expensas de mayores requisitos de CPU y memoria. Estos incluyen la gestión automática de la memoria; mecanografía dinámica ; cadenas, listas y hashes; expresiones regulares; introspección ; y una eval()función. Perl sigue la teoría de "sin límites incorporados", [69] una idea similar a la regla Zero One Infinity . [ cita requerida ]

Wall se formó como lingüista y el diseño de Perl se basa en gran medida en principios lingüísticos . Los ejemplos incluyen la codificación de Huffman (las construcciones comunes deben ser cortas), una buena ponderación final (la información importante debe ir primero) y una gran colección de primitivas de lenguaje . Perl favorece las construcciones del lenguaje que son concisas y naturales para que las escriban los humanos, incluso cuando complican al intérprete de Perl. [ cita requerida ]

La sintaxis de Perl refleja la idea de que "las cosas que son diferentes deben verse diferentes". [76] Por ejemplo, los escalares, matrices y hashes tienen diferentes sigilos iniciales. Los índices de matriz y las claves hash utilizan diferentes tipos de llaves. Las cadenas y las expresiones regulares tienen diferentes delimitadores estándar. Este enfoque se puede contrastar con un lenguaje como Lisp , donde la misma sintaxis básica, compuesta por expresiones simbólicas simples y universales , se usa para todos los propósitos. [ cita requerida ]

Perl no aplica ningún paradigma de programación en particular ( procedimental , orientado a objetos , funcional u otros) o incluso requiere que el programador elija entre ellos. [ cita requerida ]

Existe una amplia inclinación práctica tanto al idioma Perl como a la comunidad y la cultura que lo rodean. El prefacio de Programar Perl comienza: "Perl es un lenguaje para hacer su trabajo". [17] 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, los errores a veces pueden ser difíciles de encontrar. La documentación de funciones de Perl comenta el comportamiento variante de las funciones integradas en contextos de lista y escalares diciendo: "En general, hacen lo que quieres, a menos que quieras coherencia". [77]

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 una para la versión actual de Perl. Solo 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 erige como una especificación de facto del idioma. Perl 6, sin embargo, comenzó con una especificación, [78] y varios proyectos [79] apuntan a implementar parte o la totalidad de la especificación. [ cita requerida ]

Aplicaciones [ editar ]

Perl tiene muchas y variadas aplicaciones, agravadas por la disponibilidad de muchos módulos estándar y de terceros.

Perl se ha utilizado principalmente para escribir scripts CGI : los grandes proyectos escritos en Perl incluyen cPanel , Slash , Bugzilla , RT , TWiki y Movable Type ; Los sitios web de alto tráfico que utilizan Perl ampliamente incluyen Priceline.com , Craigslist , [80] IMDb , [81] LiveJournal , DuckDuckGo , [82] [83] Slashdot y Ticketmaster . También es un componente opcional de la popular pila de tecnología LAMP para desarrollo web., en lugar de PHP o Python . Perl se usa ampliamente como lenguaje de programación de sistemas en la distribución Debian GNU / Linux. [84]

Perl se usa a menudo como un lenguaje adhesivo , uniendo sistemas e interfaces que no fueron diseñados específicamente para interoperar y para " mezclar datos ", [85] es decir, convertir o procesar grandes cantidades de datos para tareas como crear informes. De hecho, estas fortalezas están íntimamente ligadas. La combinación convierte a Perl en un lenguaje universal y popular para los administradores de sistemas , particularmente porque los programas cortos, a menudo llamados "programas de una sola línea ", se pueden ingresar y ejecutar en una sola línea de comando . [ cita requerida ]

El código Perl puede hacerse portátil en Windows y Unix; Los proveedores de software (tanto COTS como a medida) suelen utilizar este código para simplificar el empaquetado y el mantenimiento de los scripts de desarrollo y desarrollo de software. [ cita requerida ]

Las interfaces gráficas de usuario (GUI) se pueden desarrollar utilizando Perl. Por ejemplo, Perl / Tk y wxPerl se usan comúnmente para permitir la interacción del usuario con los scripts de Perl. Dicha interacción puede ser sincrónica o asincrónica, utilizando devoluciones de llamada para actualizar la GUI. [ cita requerida ]

Implementación [ editar ]

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 tiene 150.000 líneas de código C y se compila en un ejecutable de 1 MB en arquitecturas de máquina típicas. Alternativamente, el intérprete puede compilarse en una biblioteca de enlaces e integrarse 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 de las lenguaje Perl-escalares, arrays, hashes, coderefs, identificadores de archivo -son representados en el intérprete de C estructuras . Las operaciones en estas estructuras están definidas por una gran colección de macros , typedefs y funciones; éstos constituyen el Perl C API . La API de Perl puede resultar desconcertante para los no iniciados, pero sus puntos de entrada siguen un esquema de nomenclatura coherente , que proporciona orientación a quienes la utilizan. [ cita requerida ]

La vida de un intérprete de Perl se divide a grandes rasgos en una fase de compilación y una fase de ejecución. [86] En Perl, las fases son las principales etapas del ciclo de vida del intérprete. Cada intérprete pasa por cada fase solo una vez, y las fases siguen en una secuencia fija. [ cita requerida ]

La mayor parte de lo que sucede en la fase de compilación de Perl es compilación, y la mayor parte de lo que sucede en la fase de ejecución de Perl es ejecución, pero hay excepciones importantes. 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 en 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 se puede ingresar durante la fase de ejecución. El tiempo de compilación del código en un argumento de cadena que se pasa al archivo evalintegrado se produce durante la fase de ejecución. Perl suele estar 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. Código enBEGIN blocks se ejecuta en tiempo de ejecución pero en la fase de compilación.

En el momento de la compilación, el intérprete analiza el código Perl en un árbol de sintaxis . En tiempo de ejecución, ejecuta el programa caminando por el árbol . El texto se analiza solo una vez y el árbol de sintaxis está sujeto a optimización antes de ejecutarse, por lo que la ejecución es relativamente eficiente. Las optimizaciones en tiempo de compilación en el árbol de sintaxis incluyen el plegado constante y la propagación del contexto, pero también se realiza la optimización de mirilla . [ cita requerida ]

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

A menudo se dice que "Sólo perl puede analizar Perl", [88] lo que significa que sólo el intérprete de Perl ( perl) puede analizar el lenguaje Perl ( Perl ), pero incluso esto, en general, no es 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 la detención es indecidible y, por lo tanto, ni siquiera Perl siempre puede analizar Perl. Perl toma la inusual elección de darle al usuario acceso a todo su poder de programación 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 raros. [ cita requerida ]

Otros programas que se encargan de analizar Perl, como los analizadores de código fuente y los autoindentadores , tienen que lidiar no solo con construcciones sintácticas ambiguas sino también con la indecidibilidad del análisis sintáctico de Perl en el caso general. El proyecto PPI de Adam Kennedy se centró en analizar el código Perl como un documento (conservando su integridad como documento), en lugar de analizar Perl como código ejecutable (que ni siquiera el propio Perl siempre puede hacer). Kennedy fue el primero en conjeturar que "el análisis de Perl adolece del ' problema de la detención '", [89] que se demostró más tarde. [90]

Perl se distribuye con más de 250.000 pruebas funcionales para el lenguaje principal de Perl y más de 250.000 pruebas funcionales para los módulos principales. Estos se ejecutan como parte del proceso de compilación normal y ejercitan ampliamente el intérprete y sus módulos principales. 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 vean que el intérprete aprueba las pruebas funcionales de su sistema pueden tener un alto grado de confianza en que está funcionando correctamente. [ cita requerida ]

Disponibilidad [ editar ]

Perl tiene doble licencia bajo Artistic License 1.0 [6] [7] y GNU General Public License . [8] Las distribuciones están disponibles para la mayoría de los sistemas operativos . Es frecuente sobre todo en Unix y Unix-como sistemas, pero ha sido portado a la mayoría de las plataformas modernas (y muchos obsoletos). Con sólo seis [ cita requerida ] excepciones informadas, Perl se puede compilar a partir del código fuente en todas las plataformas compatibles con POSIX o compatibles con Unix. [91]

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

El Comprehensive Perl Archive Network lleva una lista completa de las plataformas compatibles con los enlaces a las distribuciones disponibles en cada una. [93] 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 ]

Windows [ editar ]

Los usuarios de Microsoft Windows suelen instalar una de las distribuciones binarias nativas de Perl para Win32, más comúnmente Strawberry Perl o ActivePerl . Es posible compilar Perl a partir del código fuente en Windows, pero la mayoría de las instalaciones carecen del compilador de C y las herramientas de compilación necesarias. Esto también dificulta la instalación de módulos de CPAN, particularmente aquellos que están parcialmente escritos en C. [ cita requerida ]

ActivePerl es una distribución de código cerrado de ActiveState que tiene lanzamientos regulares que rastrean los lanzamientos principales de Perl. [94] La distribución incluía previamente el administrador de paquetes Perl (PPM), [95] una herramienta popular para instalar, eliminar, actualizar y administrar el uso de módulos Perl comunes, sin embargo, esta herramienta fue descontinuada a partir de ActivePerl 5.28. [96] También se incluye PerlScript , un motor de Windows Script Host (WSH) que implementa el lenguaje Perl. Visual Perl es una herramienta de ActiveState que agrega Perl a la suite de desarrollo de Visual Studio .NET. Un VBScripta Perl Converter, así como un compilador de Perl para Windows, y los convertidores de awk y sed a Perl también han sido producidos por esta compañía e incluidos en el CD de ActiveState para Windows , que incluye todas sus distribuciones más el IDE de Komodo y todo menos el primero en la variante Unix / Linux / Posix del mismo en 2002 y posteriormente. [97]

Strawberry Perl es una distribución de código abierto para Windows. Ha tenido lanzamientos trimestrales regulares desde enero de 2008, incluidos nuevos módulos a medida que llegan los comentarios y las solicitudes. Strawberry Perl tiene como objetivo poder instalar módulos como distribuciones estándar de Perl en otras plataformas, incluida la compilación de módulos XS. [ cita requerida ]

La capa de emulación Cygwin es otra forma de ejecutar Perl en Windows. Cygwin proporciona un entorno similar a Unix en Windows, y tanto Perl como CPAN están disponibles como paquetes estándar precompilados en el programa de instalación de Cygwin. Dado que Cygwin también incluye gcc , también es posible compilar Perl desde la fuente. [ cita requerida ]

Un ejecutable de perl se incluye en varios kits de recursos de Windows en el directorio con otras herramientas de scripting. [ cita requerida ]

Las implementaciones de Perl vienen con MKS Toolkit , Interix (la base de implementaciones anteriores de Windows Services para Unix ) y UWIN . [ cita requerida ]

Interfaces de base de datos [ editar ]

Las capacidades de manejo de texto de Perl se pueden utilizar para generar consultas SQL ; las matrices, los hash y la gestión automática de la 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 consultas SQL; por lo tanto, es posible programar en varios idiomas al mismo tiempo (por ejemplo, para generar una página web usando HTML , JavaScript y SQL en un documento aquí ). El uso de la interpolación de variables de Perlpara personalizar mediante programación cada una de las consultas SQL, y la especificación de matrices o hash 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 Perl. [98] En las primeras versiones de Perl, las interfaces de base de datos se creaban vinculando 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 algunas de las bases de datos más importantes y más ampliamente utilizadas, y restringió el perlejecutable resultante a usar solo una interfaz de base de datos a la vez. [ cita requerida ]

En Perl 5, las interfaces de base de datos se implementan mediante módulos Perl DBI . El módulo DBI (Interfaz de base de datos) presenta una interfaz única e independiente de la base de datos para las aplicaciones Perl, 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ía de las bases de datos ANSI SQL . [ cita requerida ]

DBI proporciona almacenamiento en caché para consultas y manejadores 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 , [99] ayudando a los sistemas de alto volumen a evitar picos de carga como en el efecto Slashdot . [ cita requerida ]

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

Rendimiento comparativo [ editar ]

El juego Computer Language Benchmarks compara el desempeño de implementaciones de problemas típicos de programación en varios lenguajes de programación. [102] Las implementaciones de Perl enviadas típicamente funcionan hacia el extremo superior del espectro de uso de memoria y dan resultados de velocidad variados. El desempeño de Perl en el juego de los puntos de referencia es típico de los lenguajes interpretados. [103]

Los programas grandes de Perl 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 "A Timely Start", Jean-Louis Leroy descubrió que sus programas de Perl tardaron mucho más en ejecutarse de lo esperado porque el intérprete de Perl dedicó mucho tiempo a buscar módulos dentro de su gran formato. incluir ruta. [104] A diferencia de Java, Python y Ruby, Perl solo tiene soporte experimental para la compilación previa. [105] Por lo tanto, los programas Perl pagan esta penalización en cada ejecución. La fase de ejecución de los programas típicos es lo suficientemente larga como para amortizarEl tiempo de inicio no es sustancial, pero es probable que los puntos de referencia que miden tiempos de ejecución muy cortos estén sesgados debido a esta sobrecarga. [ cita requerida ]

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

Una vez que se compila el código Perl, hay una sobrecarga adicional durante la fase de ejecución que normalmente no está presente para los programas escritos en lenguajes compilados como C o C ++. Ejemplos de tales gastos generales incluyen la interpretación de códigos de bytes , la gestión de la memoria de recuento de referencias y la verificación dinámica de tipos. [ cita requerida ]

Optimizando [ editar ]

Dado que Perl es un lenguaje interpretado, puede dar problemas cuando la eficiencia es fundamental; en tales situaciones, las rutinas más críticas se pueden escribir en otros lenguajes (como C ), que se pueden conectar a Perl a través de simples módulos Inline o el mecanismo XS más complejo pero flexible . [106]

Perl 5 [ editar ]

Perl 5, el lenguaje generalmente denominado "Perl", continúa desarrollándose activamente. Perl 5.12.0 fue lanzado en abril de 2010 con algunas características nuevas influenciadas por el diseño de Perl 6, [44] [107] seguido de Perl 5.14.1 (lanzado el 17 de junio de 2011), Perl 5.16.1 (lanzado el agosto 9, 2012. [108] ) y Perl 5.18.0 (publicado el 18 de mayo de 2013). Las versiones de desarrollo de Perl 5 se lanzan mensualmente, y las versiones principales se publican una vez al año. [109]

La proporción relativa de búsquedas en Internet de "programación Perl", en comparación con búsquedas similares de otros lenguajes de programación, disminuyó constantemente de alrededor del 10% en 2005 a alrededor del 2% en 2011, a alrededor del 0,7% en 2020. [110]

Raku (Perl 6) [ editar ]

Camelia , el logo del proyecto Perl 6. [111]

En la Conferencia de Perl de 2000 , Jon Orwant defendió una importante iniciativa lingüística nueva. [112] 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 de Perl en general, que presentó más de 300 RFC . [ cita requerida ]

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 Programación Perl . En enero de 2011 , la especificación en desarrollo de Perl 6 se encapsuló en documentos de diseño llamados Sinopsis, numerados para corresponder a Apocalipsis. [113]

El trabajo de tesis de Bradley M. Kuhn , supervisado por Wall, consideró el posible uso de la máquina virtual Java como tiempo de ejecución de Perl. [114] La tesis de Kuhn mostró que este enfoque es problemático. En 2001, se decidió que Perl 6 se ejecutaría en una máquina virtual en varios idiomas llamada Parrot . Esto significará que otros idiomas dirigidos a Parrot obtendrán acceso nativo a CPAN , lo que permitirá cierto nivel de desarrollo de idiomas cruzados. [ cita requerida ]

En 2005, Audrey Tang creó el proyecto Pugs , una implementación de Perl 6 en Haskell . Esto actuó y continúa actuando como una plataforma de prueba para el lenguaje Perl 6 (separado del desarrollo de la implementación real), lo que permitió a los diseñadores del lenguaje explorar. El proyecto Pugs generó una comunidad activa en varios idiomas de Perl / Haskell centrada en el canal de IRC freenode # perl6. El equipo de diseño de Perl 6 absorbió muchas influencias de programación funcional . [ cita requerida ]

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

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

En 2013, se anunció MoarVM (“Metamodelo en tiempo de ejecución”), una máquina virtual basada en lenguaje C diseñada principalmente para Rakudo. [117]

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

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

Perl 7 [ editar ]

Perl 7 se anunció el 24 de junio de 2020 en "The Perl Conference in the Cloud" como el sucesor de Perl 5. [120] [121] Basado en Perl 5.32, Perl 7 está diseñado para ser retrocompatible con el código moderno de Perl 5; El código Perl 5, sin el encabezado repetitivo (pragma), debe agregarse use compat::perl5;para mantener la compatibilidad, pero el código moderno puede eliminar parte del texto estándar.

Comunidad de Perl [ editar ]

La cultura y la comunidad de Perl se han desarrollado junto con el propio idioma. Usenet fue el primer lugar público en el que se introdujo Perl, pero en el transcurso de su evolución, la comunidad de Perl fue moldeada por el crecimiento de la ampliación 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". [122]

Estado de la cebolla [ editar ]

Estado de la cebolla es el nombre de pared anual de magistrales resúmenes al estilo sobre el progreso de Perl y su comunidad. Se caracterizan por su humor característico, que emplea referencias a la cultura de Perl, la cultura más amplia de los hackers, el trasfondo lingüístico de Wall, a veces su vida familiar y, en ocasiones, incluso su trasfondo cristiano. [123]

Cada charla se da primero en varias conferencias de Perl y, finalmente, también se publica en línea.

Pasatiempos de Perl [ editar ]

JAPHs
En los mensajes de correo electrónico, Usenet y foros de mensajes, los programas " Sólo otro hacker de Perl " (JAPH) son una tendencia común, originada por Randal L. Schwartz , uno de los primeros entrenadores profesionales de Perl. [124] En el lenguaje de la cultura de Perl, los programadores de Perl son conocidos como hackers de Perl, y de esto deriva la práctica de escribir programas cortos para imprimir la frase "Sólo otro hacker de Perl". Siguiendo el espíritu del concepto original, estos programas están moderadamente confusos y son lo suficientemente cortos como para caber en la firma de un correo electrónico o mensaje de Usenet. El JAPH "canónico" desarrollado por Schwartz incluye la coma al final, aunque a menudo se omite. [125]
Perl golf
Perl "golf" es el pasatiempo de reducir el número de caracteres ("golpes" de tecla) utilizados en un programa Perl al mínimo, de la misma manera que los jugadores de golf buscan hacer el menor número posible de tiros en una ronda. El primer uso de la frase [126] enfatizó la diferencia entre el código peatonal destinado a enseñar a un recién llegado y los breves trucos que pueden divertir a los programadores de Perl experimentados, un ejemplo de estos últimos son los JAPH que ya se usaban en firmas en 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 el cifrado RSA generó un interés práctico y generalizado en este pasatiempo. [127]En años posteriores, el término " código de golf " se ha aplicado al pasatiempo en otros idiomas. [128] Un Apocalipsis de Perl Golf se llevó a cabo en la Conferencia 4.0 de Perl en Monterey, California en julio de 2000.
Ofuscación
Al igual que con C, las competiciones de códigos ofuscados eran un pasatiempo bien conocido a finales de la década de 1990. El concurso de Perl ofuscado fue un concurso organizado por The Perl Journal de 1996 a 2000 que convirtió en una gran virtud la flexibilidad sintáctica de Perl. Se otorgaron premios para categorías como "más poderoso" —programas que hicieron un uso eficiente del espacio— y "mejor firma de cuatro líneas" para programas que encajan en cuatro líneas de 76 caracteres al estilo de un bloque de firmas de Usenet . [129]
Poesía
La poesía 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 idioma Perl. Regularmente se envían nuevos poemas a la comunidad de PerlMonks . [130]

Perl en IRC [ editar ]

Hay varios canales de IRC que ofrecen soporte para el idioma y algunos módulos.

CPAN Acme [ editar ]

También hay muchos ejemplos de código escrito exclusivamente para entretenimiento en el CPAN . Lingua::Romana::Perligata, por ejemplo, permite escribir programas en latín . [131] Tras la ejecución de dicho programa, el módulo traduce su código fuente a Perl normal y lo ejecuta. [ cita requerida ]

La comunidad de Perl ha reservado el espacio de nombres " Acme " para los módulos que son divertidos por naturaleza (pero su alcance se ha ampliado para incluir código exploratorio o experimental o cualquier otro módulo que no esté destinado a ser utilizado nunca en producción). Algunos de los módulos de Acme se implementan deliberadamente de manera divertida. Esto incluye Acme::Bleach, uno de los primeros módulos en el Acme::espacio de nombres, [132] que permite que el código fuente del programa sea "blanqueado" (es decir, todos los caracteres reemplazados por espacios en blanco) y aún así funcionar. [ cita requerida ]

Código de ejemplo [ editar ]

En versiones anteriores de Perl, uno escribiría el programa Hello World como:

imprimir  "¡Hola, mundo! \ n" ;

Aquí hay un programa Perl más complejo, que cuenta los segundos a partir de un valor inicial dado:

#! / usr / bin / perl use  estricto ; use  advertencias ;my  (  $ restante ,  $ total  );$ restante  =  $ total  =  turno ( @ARGV );STDOUT -> autoflush ( 1 );while  (  $ restante  )  {  printf  (  "Restante% s /% s \ r" ,  $ restante - ,  $ total  );  dormir  1 ; }imprimir  "\ n" ;

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

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

Crítica [ editar ]

Perl ha sido referido como " ruido de línea " y un lenguaje de solo escritura por sus críticos. La primera mención de este tipo fue en la primera edición del libro Learning Perl , un libro tutorial de Perl 4 escrito por Randal L. Schwartz , [133] en el primer capítulo del cual afirma: "Sí, a veces Perl parece un ruido de línea para el no iniciado, pero para el programador experimentado de Perl, parece un ruido de línea de suma de verificación con una misión en la vida ". [134] También afirmó que la acusación de que Perl es un lenguaje de solo escritura podría evitarse codificando con el "cuidado adecuado". [134] El documento de descripción general de Perl perlintro establece que los nombres de "magia" incorporadaescalarlas variables "parecen signos de puntuación o ruido de línea". [135] Sin embargo, el módulo de inglés ofrece alternativas de inglés cortas y largas. El documento de estilo perl establece que el ruido de línea en las expresiones regulares podría mitigarse usando el /xmodificador para agregar espacios en blanco. [136]

De acuerdo con las preguntas frecuentes 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 desinfección de la sintaxis de expresiones regulares. . [137] Las preguntas frecuentes de Perl 6 también establecen que lo que a veces se denomina ruido de línea de Perl es "la sintaxis real del idioma", al igual que los gerundios y las preposiciones son parte del idioma inglés . [137] 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 la supervisión de un adulto", cromáticodeclaró que el diseño de Perl 6 tiene una "gramática bien definida", así como 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" . [138] También afirmó que "Perl 6 tiene una coherencia y una consistencia de las que carece Perl 5". [138]

Ver también [ editar ]

  • Esquema de Perl
  • Lenguaje de datos Perl
  • Entorno de objetos de Perl
  • Documentación antigua simple

Referencias [ editar ]

  1. ^ "¡Perl 5.32.1 ya está disponible!" . www.nntp.perl.org . Consultado el 24 de enero de 2021 .
  2. ^ "¡Perl 5.30.3 ya está disponible!" . www.nntp.perl.org . Consultado el 2 de junio de 2020 .
  3. ^ "¡Perl 5.33.8 ya está disponible!" . www.nntp.perl.org . Consultado el 21 de marzo de 2021 .
  4. ^ "Lanzamientos · atoomic / perl" . GitHub . Consultado el 5 de febrero de 2021 .
  5. ^ Sawyer X (24 de junio de 2020). "Anuncio de Perl 7 - nntp.perl.org" . www.nntp.perl.org . Consultado el 5 de febrero de 2021 . Tenemos la intención de lanzar 7.0.0 dentro de un año. Sin embargo, me estoy poniendo el objetivo de lanzarlo antes de finales de este año [2020].
  6. ^ a b "La" Licencia artística "- dev.perl.org" . dev.perl.org .
  7. ^ a b Artístico : archivo en el repositorio git de Perl 5
  8. ^ a b "Licencias de Perl" . dev.perl.org . Consultado el 8 de enero de 2011 .
  9. ^ Larry Wall. "Programar es difícil, vamos a escribir scripts ..." Todos los diseñadores de lenguajes tienen sus idiosincrasias ocasionales. Simplemente soy mejor en eso que la mayoría.
  10. ^ "Acerca de Perl" . perl.org . Consultado el 20 de abril de 2013 . "Perl" es una familia de idiomas, "Perl 6" es parte de la familia, pero es un idioma separado que tiene su propio equipo de desarrollo. Su existencia no tiene un impacto significativo en el desarrollo continuo de "Perl 5".
  11. ^ "Camino a Raku" . GitHub . Consultado el 14 de enero de 2021 . Este documento describe los pasos a seguir para efectuar un cambio de nombre de Perl 6 a Raku
  12. ^ Lapworth, Leo. "Preguntas generales sobre Perl" . Preguntas frecuentes de Perl . Perl.org . Consultado el 24 de febrero de 2012 .
  13. ^ "perl (1): Extracción práctica / Lenguaje de informes - página de manual de Linux" . Linux.die.net . Consultado el 23 de julio de 2013 .
  14. ^ Sheppard, Doug (16 de octubre de 2000). "Introducción a Perl para principiantes" . dev.perl.org . Consultado el 8 de enero de 2011 .
  15. ^ Ashton, Elaine (1999). "La línea de tiempo de Perl y su cultura (v3.0_0505)" .
  16. ^ Schwartz, Randal L .; Christiansen, Tom / Foreword By-Wall (1 de julio de 1997). "Aprendiendo PERL" . O'Reilly & Associates, Inc. - a través de dl.acm.org.[ enlace muerto permanente ]
  17. ↑ a b c d Wall, Larry , Tom Christiansen y Jon Orwant (julio de 2000). Programación de Perl, tercera edición . O'Reilly Media . ISBN 978-0-596-00027-1.CS1 maint: varios nombres: lista de autores ( enlace )
  18. ^ "Evaluaciones de lenguaje" . El punto más fuerte de Perl son sus funciones integradas extremadamente poderosas para el procesamiento dirigido por patrones de formatos de datos textuales y orientados a líneas; es insuperable en esto.
  19. ^ "¡¿Usaste Perl para escribir QUÉ ?!" . 24 de enero de 2008. Perl siempre ha sido el lenguaje de referencia para cualquier tarea que implique entrada de coincidencia de patrones.
  20. ^ "La importancia de Perl" . Archivado desde el original el 2 de febrero de 2015 . Consultado el 4 de febrero de 2015 . La incomparable capacidad de Perl para procesar texto ...
  21. ^ Smith, Roderick W. (21 de junio de 2002). Redes Linux avanzadas . Addison-Wesley Professional. pag. 594 . ISBN 978-0-201-77423-8.
  22. ^ Sheppard, Doug (16 de octubre de 2000). "Introducción a Perl para principiantes" . O'Reilly Media . Consultado el 27 de julio de 2008 .
  23. ^ Raymond, Eric (23 de diciembre de 2003). "Motosierra del ejército suizo" . El archivo de jerga . Consultado el 29 de noviembre de 2014 .
  24. ^ Leonard, Andrew. "La alegría de Perl" . Salon.com . Consultado el 5 de junio de 2012 .
  25. ^ "Cómo se miden los programas | Juego de parámetros de lenguaje de computadora" . benchmarksgame-team.pages.debian.net . Consultado el 5 de octubre de 2020 .
  26. ^ "RSA en 3 líneas de perl - Everything2.com" . everything2.com . Consultado el 5 de octubre de 2020 .
  27. ^ Larry Wall (1 de febrero de 1988). "v13i001: Perl, un" reemplazo "para awk y sed, Part01 / 10" . Grupo de noticiascomp.sources.unix . Consultado el 13 de enero de 2011 .
  28. ^ "archivo perl.perl5.porters" . perl.org . Consultado el 13 de enero de 2011 .
  29. ^ "perlista - los registros de la historia de Perl" . Documentación de Perl 5 versión 12.2 . perldoc.perl.org . Consultado el 21 de enero de 2011 .
  30. ^ "CPAN" . CPAN . Consultado el 8 de mayo de 2017 .
  31. ^ a b "perl5004delta: novedades de perl5.004" . Documentación de Perl 5 versión 12.2 . perldoc.perl.org . Consultado el 8 de enero de 2011 .
  32. ^ Patwardhan, Nathan; Siever, Ellen; Spainhour, Stephen (2002). Perl en pocas palabras, segunda edición . O'Reilly Media . ISBN 978-0-596-00241-1.
  33. ^ "perl5005delta - novedades de perl5.005" . Documentación de Perl 5 versión 12.2 . perldoc.perl.org . Consultado el 21 de enero de 2011 .
  34. ^ "perlista - los registros de la historia de Perl" . www.cpan.org . Consultado el 2 de junio de 2020 .
  35. ^ "Fuente Perl" . www.cpan.org . Consultado el 2 de junio de 2020 .
  36. ^ "perl56delta - novedades de perl v5.6.0" . Documentación de Perl 5 versión 12.2 . perldoc.perl.org . Consultado el 21 de enero de 2011 .
  37. ^ "perl56delta - novedades de perl v5.6.x" . Documentación de Perl 5 versión 12.2 . perldoc.perl.org . Consultado el 21 de enero de 2011 .
  38. ^ Pared, Larry. "Apocalipsis 1: lo feo, lo malo y lo bueno" . Consultado el 8 de enero de 2011 .
  39. ^ "perl58delta: novedades de perl v5.8.0" . Documentación de Perl 5 versión 12.2 . perldoc.perl.org . Consultado el 21 de enero de 2011 .
  40. ^ "Un plan para pugs" . O'Reilly Media . 3 de marzo de 2005 . Consultado el 27 de enero de 2011 .
  41. ^ Tang, Audrey (21 de abril de 2010). "Re: Cómo implementar Perl 6 en diez años" . PerlMonks . Consultado el 3 de enero de 2011 .
  42. ^ "perl5100delta: novedades de perl 5.10.0" . Documentación de Perl 5 versión 12.2 . perldoc.perl.org . Consultado el 8 de enero de 2011 .
  43. ^ "perlsyn - sintaxis de Perl" . Documentación de Perl 5 versión 12.2 . perldoc.perl.org . Consultado el 21 de enero de 2011 .
  44. ^ a b "perl5120delta: novedades de perl v5.12.0" . Documentación de Perl 5 versión 12.2 . perldoc.perl.org . Consultado el 8 de enero de 2011 .
  45. ^ "perldelta - novedades de perl v5.12.3" . Documentación de Perl 5 versión 12.2 . perldoc.perl.org . Consultado el 8 de enero de 2011 .
  46. ^ "perl5140delta - novedades de perl v5.14.0 - metacpan.org" . metacpan.org .
  47. ^ a b "perldelta: novedades de perl v5.16.0" . Documentación de Perl 5 versión 16.0 . metacpan.org . Consultado el 21 de mayo de 2012 .
  48. ^ "perl5180delta - novedades de perl v5.18.0 - lenguaje de programación Perl" . Documentación de Perl 5 versión 18.0 . metacpan.org . Consultado el 27 de octubre de 2013 .
  49. ^ "perl5200delta - novedades de perl v5.20.0 - lenguaje de programación Perl" . Documentación de Perl 5 versión 20.0 . metacpan.org . Consultado el 27 de mayo de 2014 .
  50. ^ Hitos en el Renacimiento de Perl - Programación moderna de Perl . Modernperlbooks.com. Consultado el 17 de julio de 2013.
  51. ^ Prefacio (Perl moderno 2011-2012) . Modernperlbooks.com. Consultado el 17 de julio de 2013.
  52. ^ Edición moderna de Perl 2011-2012 por cromática | Prensa Onyx Neon . Onyxneon.com. Consultado el 17 de julio de 2013.
  53. ^ "Perl iluminado" . Perl iluminado . Archivado desde el original el 5 de febrero de 2014 . Consultado el 28 de septiembre de 2012 .
  54. ^ "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 .
  55. ^ Little, Stevan (8 de febrero de 2013). "¿Qué es Moe (una aclaración) | Stevan Little" . Blogs.perl.org . Consultado el 11 de abril de 2014 .
  56. ^ "p2 en poción" . Perl11.org. 7 de febrero de 2004 . Consultado el 11 de abril de 2014 .
  57. ^ "goccy / gperl 路 GitHub" . Github.com . Consultado el 11 de abril de 2014 .
  58. ^ "rperl" . RPerl.org . Consultado el 11 de agosto de 2014 .
  59. ^ "Perl 7 anunciado en la Conferencia de Perl en la nube" . perlfoundation.org. 24 de junio de 2020 . Consultado el 24 de junio de 2020 .
  60. ^ "Anuncio de Perl 7" . perl.com. 24 de junio de 2020 . Consultado el 24 de junio de 2020 .
  61. ^ "Preparación para Perl 7d" . leanpub.com. 24 de junio de 2020 . Consultado el 24 de junio de 2020 .
  62. ^ Geoff Broadwell (8 de agosto de 2005), OSCON 4.4: Inside Ponie, el puente de Perl 5 a Perl 6 , Blog de O'Reilly ONLamp
  63. Jesse Vincent (23 de agosto de 2006), Ponie ha sido puesto a pastar , The Perl Foundation, archivado desde el original el 27 de junio de 2009 , obtenido el 15 de enero de 2019
  64. ^ Richardson, Marjorie (1 de mayo de 1999). "Larry Wall, el gurú de Perl" . Revista de Linux . Consultado el 3 de enero de 2011 .
  65. ^ "perlfaq1: ¿Cuál es la diferencia entre" perl "y" Perl "?" . perldoc.perl.org - Documentación de Perl 5 versión 12.2 .
  66. ^ Schwartz, Randal ; foy, brian ; Phoenix, Tom (16 de junio de 2011). Aprendiendo Perl . O'Reilly Media, Inc. pág. 4 . ISBN 978-1449313142. Perl a veces se denomina "Lenguaje práctico de extracción e informe", aunque también se le ha llamado "Lister de basura patológicamente ecléctico", entre otras expansiones. En realidad, es un backronym, no un acrónimo, ya que a Larry Wall, el creador de Perl, se le ocurrió 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 respalda ambos.
  67. ^ Pared, Larry . "perl - El intérprete de idiomas de Perl" . Documentación de Perl 5 versión 12.2 . Consultado el 26 de enero de 2011 .
  68. ^ Pared, Larry . "Re ^ 7: PERL como shibboleth y la comunidad de Perl" . PerlMonks . Consultado el 2 de enero de 2011 .
  69. ↑ a b Schwartz, Randal L ; Phoenix, Tom; Foy, Brian (6 de diciembre de 2007). Aprendiendo Perl, tercera edición . ISBN 978-0-596-00132-2.
  70. ^ a b "La información de uso y marca comercial de Perl Camel" . O'Reilly Media . Archivado desde el original el 25 de abril de 2018 . Consultado el 9 de enero de 2011 .
  71. ^ "Marca registrada de Perl" . La Fundación Perl . Archivado desde el original el 3 de mayo de 2011 . Consultado el 9 de enero de 2011 .
  72. ^ Gillmore, Dan (25 de octubre de 1998). "República de Perl" . Chicago Tribune . Consultado el 10 de enero de 2011 .
  73. ^ Riedel, Sebastian (18 de enero de 2012). "Perl 5 Raptor" . Sebastian Riedel . Consultado el 12 de noviembre de 2017 .
  74. ^ Trout, Matt (16 de junio de 2005). "Estado del Velociraptor - Fase dos" . Shadowcat Systems Limited . Consultado el 12 de noviembre de 2017 .
  75. ^ "título desconocido". 10 de mayo de 1997. Usenet: [email protected] . [ enlace muerto ]
  76. ^ Wall, Larry (1 de marzo de 1997). "¿Donde estás?" . Revista de Linux . Consultado el 13 de marzo de 2011 .
  77. ^ "perlfunc - funciones integradas de Perl" . Documentación de Perl 5 versión 12.2 . perldoc.perl.org . Consultado el 10 de enero de 2011 .
  78. ^ "Especificación de Perl 6" . El proyecto Perl 6 . Consultado el 27 de enero de 2011 .
  79. ^ "Compiladores de Perl 6" . El proyecto Perl 6 . Consultado el 27 de enero de 2011 .
  80. ^ Gilmore, WJ (2010). Principios de PHP y MySQL: de principiante a profesional, cuarta edición . Presione. pag. 484 . ISBN 978-1-4302-3114-1.
  81. ^ "Servicio de asistencia de IMDb: ¿Qué software / hardware está utilizando para ejecutar el sitio?" . Base de datos de películas de Internet . Consultado el 12 de febrero de 2011 .
  82. ^ DuckDuckGo maneja una gran cantidad de consultas de búsqueda a 4.5 millones de consultas por día. https://duckduckgo.com/traffic.html
  83. ^ DuckDuckGo usa Perl https://web.archive.org/web/20101231135106/http://www.gabrielweinberg.com/blog/2009/03/duck-duck-go-architecture.html
  84. ^ "Preguntas frecuentes de Perl" . Perl se usa 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).
  85. ^ "Libros de Perl - Libro: Data Munging con Perl" . Perl.org . Consultado el 30 de diciembre de 2010 .
  86. ^ Una descripción del intérprete de Perl 5 se puede encontrar en Programación de Perl , 3ª Ed., Capítulo 18. Ver particularmente la página 467, que distingue cuidadosamente la fase de ejecución y la fase de compilación del tiempo de ejecución y el tiempo de compilación . El "tiempo" y la "fase" de Perl se confunden a menudo.
  87. ^ Schwartz, Randal . "Sobre el análisis de Perl" . Consultado el 3 de enero de 2007 .
  88. ^ "El Perl Journal # 19 / 9.26" (PDF) . O'Reilly Media . Consultado el 4 de febrero de 2011 .
  89. ^ Kennedy, Adam (2006). "PPI: analizar, analizar y manipular Perl (sin perl)" . CPAN .
  90. ^ "Teorema de Rice". La revisión de Perl . 4 (3): 23-29. Verano de 2008.y "Perl es indecidible". La revisión de Perl . 5 : 7-11. Otoño de 2008., disponible en línea en Kegler, Jeffrey. "Perl e indecidibilidad" .
  91. ^ Hietaniemi, Jarkko (1998). "Puertos Perl (distribuciones binarias)" . CPAN.org.
  92. ^ "Las páginas de MacPerl" . Freeware Prime Time. 1997.
  93. ^ "Puertos Perl (distribuciones binarias)" . CPAN . Consultado el 27 de enero de 2011 .
  94. ^ "ActivePerl es Perl para Windows, Mac, Linux, AIX, HP-UX y Solaris" . Software ActiveState . Archivado desde el original el 31 de marzo de 2016 . Consultado el 9 de enero de 2011 .
  95. ^ "Uso de PPM" . Software ActiveState . Consultado el 9 de enero de 2011 .
  96. ^ "Adiós PPM, herramienta de estado Hola" . activestate.com . 23 de julio de 2019.
  97. ^ readme.txt
  98. Descartes, Alligator; Bunce, Tim (2000). Programación de Perl DBI: [programación de base de datos con Perl] (1 ed.). Beijing [ua]: O'Reilly. ISBN 978-1-56592-699-8.
  99. ^ Bekman, Stas. "Trabajo eficiente con bases de datos bajo mod_perl" . Consultado el 1 de septiembre de 2007 .
  100. ^ "Clase :: DBI - Abstracción de base de datos simple - metacpan.org" . metacpan.org . Consultado el 8 de abril de 2020 .
  101. ^ "Rose :: DB :: Object - Mapeador relacional de objetos (ORM) extensible y de alto rendimiento. - metacpan.org" . metacpan.org . Consultado el 8 de abril de 2020 .
  102. ^ "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 .
  103. ^ "¿Qué programas son más rápidos?" . Juego de Benchmarks de Lenguaje de Computadora . Alioth . Archivado desde el original el 17 de mayo de 2013 . Consultado el 13 de enero de 2011 .
  104. ^ Leroy, Jean-Louis (1 de diciembre de 2005). "Un comienzo oportuno" . O'Reilly.
  105. ^ Beattie, Malcolm y Enache Adrian (2003). "B :: Bytecode de código de bytes del compilador de Perl backend" . CPAN .
  106. ^ Ingerson, Brian. "Inline - metacpan.org" . CPAN . Archivado desde el original el 13 de junio de 2013 . Consultado el 26 de enero de 2011 .
  107. ^ "Lanzamiento de Perl 5.12.0 - Actualización" . Heise Media Reino Unido. 13 de abril de 2010. Archivado desde el original el 19 de abril de 2010 . Consultado el 8 de enero de 2011 .
  108. ^ "¡Perl 5.16.1 lanzado!" . 9 de agosto de 2012 . Consultado el 26 de agosto de 2012 .
  109. ^ "¿El imparable tren de lanzamiento de Perl?" . LWN.net. 29 de febrero de 2012 . Consultado el 28 de marzo de 2012 .
  110. ^ Índice de software TIOBE (2020). "TIOBE Programming Community Index Perl" . Consultado el 6 de febrero de 2020 .
  111. ^ "Perl 6" . El proyecto Perl 6 . Consultado el 27 de febrero de 2011 .
  112. ^ Torkington, Nathan. "Transcripción de la charla de Larry" . nntp.perl.org . Consultado el 25 de enero de 2011 .
  113. ^ "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 .
  114. ^ Kuhn, Bradley (enero de 2001). "Consideraciones sobre la portabilidad de Perl a la máquina virtual Java" . Universidad de Cincinnati . Consultado el 28 de junio de 2008 . Cite journal requires |journal= (help)
  115. ^ "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 .
  116. ^ Worthington, Jonathan (15 de julio de 2013). "Rakudo JVM News: Más pruebas, más prototipos Thread y Promise" . 6guts . Consultado el 24 de julio de 2013 .
  117. ^ Worthington, Jonathan (31 de mayo de 2013). "MoarVM: una máquina virtual para NQP y Rakudo" . 6guts . Consultado el 24 de julio de 2013 .
  118. ^ "renombrar-lwn" . Archivado desde el original el 17 de octubre de 2019 . Consultado el 10 de noviembre de 2019 .
  119. ^ "rakudo / rakudo - GitHub" . Github.com . Consultado el 21 de septiembre de 2013 .
  120. ^ "Anuncio de Perl 7" . perl.com. 24 de junio de 2020 . Consultado el 24 de junio de 2020 .
  121. ^ "Perl 7 anunciado en la Conferencia de Perl en la nube" . perlfoundation.org. 24 de junio de 2020 . Consultado el 24 de junio de 2020 .
  122. ^ Wall, Larry (22 de mayo de 2014). "Cultura de Perl (también conocido como el primer estado de la cebolla)" .
  123. ^ Larry Wall. "2do Estado de la Cebolla" . Consultado el 12 de octubre de 2012 . (Busque 'iglesia')
  124. ^ Randal L. Schwartz (2 de mayo de 1999). "¿Quién es simplemente otro hacker de Perl?" . Grupo de noticiascomp.lang.perl.misc . Usenet: [email protected] . Consultado el 5 de diciembre de 2014 . 
  125. ^ Schwartz, Randal (31 de marzo de 2005). "Canonical JAPH" . PerlMonks . Consultado el 16 de mayo de 2011 .
  126. ^ Greg Bacon (28 de mayo de 1999). "Re: Incrementar un valor en un segmento" . Grupo de noticiascomp.lang.perl.misc . Usenet: [email protected] . Consultado el 12 de julio de 2011 . 
  127. ^ Atrás, Adam. "RSA en 5 líneas de perl" . Consultado el 10 de enero de 2011 .
  128. ^ "Code Golf: ¿Qué es Code Golf?" . 29 grados. 2007. Archivado desde el original el 13 de enero de 2012 . Consultado el 26 de noviembre de 2018 .
  129. ^ Gallo, Felix (2003). "El concurso de Perl ofuscado de Zeroth" (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 .
  130. ^ "Poesía de Perl" . PerlMonks . Consultado el 27 de enero de 2011 .
  131. ^ Conway, Damian. "Lingua :: Romana :: Perligata - Perl para el siglo XXI" .
  132. ^ Brocard, Leon (22 de mayo de 2014). "use Perl; Diario de acme" . GrnLight.net. Archivado desde el original el 22 de mayo de 2014.
  133. ^ "Actualización de desarrollador". Actualización de desarrollador del Dr. Dobb . Miller-Freeman. 2 . 1995.
  134. ↑ a b Schwartz, Randal L. (1993). Aprendiendo Perl . O'Reilly y asociados. Bibcode : 1993lepe.book ..... S .
  135. ^ "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 .
  136. ^ "estilo perl" . 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 .
  137. ^ a b "Preguntas frecuentes sobre Perl 6" . Proyecto Perl 6 . Consultado el 30 de junio de 2013 .
  138. ^ a b cromático (31 de diciembre de 2012). "La implementación de Perl 5 versus Perl 6" . Consultado el 30 de junio de 2013 .

Lectura adicional [ editar ]

  • Learning Perl 6th Edition (2011), O'Reilly. Introducción a Perl para principiantes.
  • Beginning Perl 1st Edition (2012), Wrox. Un tutorial para principiantes para aquellos que son nuevos en la programación o simplemente nuevos en Perl.
  • Modern Perl 2nd Edition (2012), Onyx Neon. Describe las técnicas modernas de programación de Perl.
  • Programming Perl 4th Edition (2012), O'Reilly. La referencia definitiva de Perl.
  • Programación efectiva de Perl 2da edición (2010), Addison-Wesley. Guía de nivel intermedio a avanzado para la escritura idiomática de Perl.
  • Libro de cocina de Perl , ISBN 0-596-00313-7 . Ejemplos prácticos de programación en Perl. 
  • Dominus, Mark Jason (2005). Perl de orden superior . Morgan Kaufmann. ISBN 978-1-55860-701-9. Técnicas de programación funcional en Perl.

Enlaces externos [ editar ]

  • Página web oficial