Wiki Hacker
Advertisement
Perl
Perl
Información
Autor Larry Wall
Desarrollador Larry Wall
Paradigma Multiparadigma, funcional, imperativa, orientado a objetos (basado en clases), reflexiva
Sistema Operativo Multiplataforma, muchos (más de 100)
Primera versión 1987
Última versión 5.16.0 (20 de mayo de 2012)
Versiones Perl 5, Perl 6
Licencia GPL, Licencia Artística
Influido por AWK, Smalltalk 80, Lisp, C, C++, Pascal, sed, Unix shell
Ha influido a Python, PHP, Ruby, ECMAScript, LPC, Windows PowerShell, JavaScript, Falcon
Descarga
http://www.perl.org/get.html
Tutorial
http://kal-el.ugr.es/~jmerelo/tutoperl/indice.html

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

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

Historia[]

Los inicios de Perl se da en 1987 cuando un programador y administrador Unisys llamado Larry Wall anuncia la versión 1.0 de Perl. Esto ocurre el 18-12-1987. En un principio el lenguaje se enfoca a la administración de sistemas por lo que tiene que ser a la fuerza interpretado.

Sin embargo será en 1991 cuando junto con la publicación del famoso “libro del dromedario” se difundirá la versión 4 de Perl. Realmente no hay diferencias entre Perl 3 y Perl4. Simplemente a la versión del Perl publicada en el libro se le pasó a llamar Perl4.

Para tener un poco de perspectiva es necesario recordad que es en este año cuando el Finlandés Linus Benedict Torvalds anuncia la primera versión de Linux.

La siguiente versión, y en definitiva, la más utilizada en la actualidad fue Perl 5. Esta versión contenía grandes novedades para un lenguaje como Perl, como la orientación a objetos y los módulos. En cuanto a la fecha hay cierta confusión, ya que aunque la versión 5.0.0.0 se publica el 17-10-1994 otros se han quedado con la versión 5.0.0.1 del 13-03-1995.

El 26-10-1995 se crea CPAN, el repositorio distribuido donde podemos encontrar millones de fuentes, documentación y módulos en Perl.

A partir del año 2000, se empieza a discutir sobre la nueva versión, la 6, que será un gran salto sobre la versión anterior, pero todavía no está muy claro qué es lo que va a ser. Aparte de más rápida, más flexible y todo eso, todavía no se ha comenzado su desarrollo.

Implementación[]

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

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

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

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

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

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

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

Advertisement