Está en la página 1de 8

ara otros usos de este término, véase Perl (desambiguación).

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

5.34.12 / 13 de marzo de 2022 (10 meses y 27 días)


Última versión en pruebas 5.37.63 / 21 de noviembre de 2022 (2 meses y 18 días)
Sistema de tipos dinámico
Implementaciones Perl, mod_perl, embperl
Dialectos Perl 5, Raku
Influido por AWK, Smalltalk 80, Lisp, C, C++, Pascal, sed, Unix shell
Ha influido a Python, PHP, Ruby, ECMAScript, LPC, Windows PowerShell,
JavaScript, Falcon
Sistema operativo Multiplataforma, muchos (más de 100)
Licencia GPL, Licencia Artística
[editar datos en Wikidata]
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.

Índice
1 Historia
1.1 Nombre
1.2 El símbolo del camello
2 Descripción
2.1 Características
2.2 Diseño
2.3 Aplicaciones
2.4 Implementación
2.5 Disponibilidad
2.5.1 GNU/Linux
2.5.2 Windows
3 Estructura del lenguaje
3.1 Programa ejemplo
3.2 Tipos de datos
3.3 Estructuras de control
3.4 Subrutinas
3.5 Expresiones regulares
3.6 Interfaz con bases de datos
4 Comparativa de funcionamiento
4.1 Optimizando
5 Futuro
6 Diversión con Perl
6.1 Enlaces relacionados
7 Comunidad Perl
8 Véase también
9 Referencias
10 Enlaces externos
Historia
Larry Wall comenzó a trabajar en Perl en 1987 mientras trabajaba como programador
en Unisys4 y anunció la versión 1.0 en el grupo de noticias comp.sources.misc el 18
de diciembre de 1987. El lenguaje se expandió rápidamente en los siguientes años.
Perl 2, publicado en 1988, aportó un mejor motor de expresiones regulares. Perl 3,
publicado en 1989, añadió soporte para datos binarios.

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

Perl 4 trajo consigo una serie de lanzamientos de mantenimiento, culminando en Perl


4.036 en 1993. En este punto, Larry Wall abandonó Perl 4 para comenzar a trabajar
en Perl 5. Perl 4 se quedaría en esa versión hasta hoy.

El desarrollo de Perl 5 continuó en 1994. La lista de correo perl5-porters se


estableció en mayo de 1994 para coordinar el trabajo de adaptación de Perl 5 a
diferentes plataformas. Es el primer foro para desarrollo, mantenimiento y
adaptación de Perl 5.

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

Versión5 Actualización6
5.4 1999-04-29
5.5 2004-02-23
5.6 2003-11-15
5.8 2008-12-14
5.10 2009-08-22
5.12 2012-11-10
5.14 2013-03-10
5.16 2013-03-11
5.18 2014-10-02
5.20 2015-09-12
5.22 2017-07-15
5.24 2018-04-14
5.26 2018-11-29
5.28 2020-06-01
5.30 2020-06-01
5.32 2021-01-23
5.34 2022-03-13
5.36 2022-05-27
5.37 2022-05-27
7.0 ¿2023?
Versión antigua
Versión antigua, con servicio técnico
Versión actual
Última versión prevista
Lanzamiento futuro
El 26 de octubre de 1995, se creó el Comprehensive Perl Archive Network (CPAN).
CPAN es una colección de sitios web que almacenan y distribuyen fuentes en Perl,
binarios, documentación, scripts y módulos. Originalmente, cada sitio CPAN debía
ser accedido a través de su propio URL; hoy en día, http://www.cpan.org redirige
automáticamente a uno de los cientos de repositorios espejo de CPAN.

En 2008, Perl 5 continúa siendo mantenido. Características importantes y algunas


construcciones esenciales han sido añadidas, incluyendo soporte Unicode, hilos, un
soporte importante para la programación orientada a objetos y otras mejoras.

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

El nombre normalmente comienza con mayúscula (Perl) cuando se refiere al lenguaje y


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

El nombre es descrito ocasionalmente como "PERL" (por Practical Extraction and


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

El símbolo del camello


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

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

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

Perl es un lenguaje de propósito general originalmente desarrollado para la


manipulación de texto y que ahora es utilizado para un amplio rango de tareas
incluyendo administración de sistemas, desarrollo web, programación en red,
desarrollo de GUI y más.
Se previó que fuera práctico (facilidad de uso, eficiente, completo) en lugar de
hermoso (pequeño, elegante, mínimo). Sus principales características son que es
fácil de usar, soporta tanto la programación estructurada como la programación
orientada a objetos y la programación funcional (véase Higher-Order Perl:
Transforming Programs with Programs), tiene incorporado un poderoso sistema de
procesamiento de texto y una enorme colección de módulos disponibles.
Características
La estructura completa de Perl deriva ampliamente del lenguaje C. Perl es un
lenguaje imperativo, con variables, expresiones, asignaciones, bloques de código
delimitados por llaves, estructuras de control y subrutinas.

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

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

En Perl 5, se añadieron características para soportar estructuras de datos


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

Todas las versiones de Perl hacen el tipificado automático de datos y la gestión de


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

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

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

Larry Wall fue adiestrado como lingüista y el diseño de Perl ha sido muy
aleccionado con principios lingüísticos. Ejemplos incluyen la Codificación Huffman
(las construcciones más comunes deben ser las más cortas), buena distribución (la
información importante debe ir primero) y una larga colección de primitivas del
lenguaje. Perl favorece las construcciones del lenguaje, tan naturales, como para
los humanos son la lectura y la escritura, incluso si eso hace más complicado al
intérprete Perl.
La sintaxis de Perl refleja la idea de que "cosas que son diferentes deben parecer
diferentes". Por ejemplo, escalares, arrays y hashes tienen diferente sigilo.
Índices de array y claves hash usan diferentes clases de paréntesis. Strings y
expresiones regulares tienen diferentes delimitadores estándar. Esta aproximación
puede contrastarse con lenguajes como Lisp, donde la misma construcción S-expresión
y sintaxis básica se usa para muchos y variados propósitos.

Perl tiene características que soportan una variedad de paradigmas de programación,


como la imperativa, funcional y la orientada a objetos. Al mismo tiempo, Perl no
obliga a seguir ningún paradigma en particular, ni obliga al programador a elegir
alguna de ellas.

Hay un amplio sentido de lo práctico, tanto en el lenguaje Perl como en la


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

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

Aplicaciones

La LAMP comprende Perl (aquí con Squid)


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

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

Perl se usa a menudo como un "lenguaje pegamento", ligando sistemas e interfaces


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

Perl es también ampliamente usado en finanzas y bioinformática, donde es apreciado


por su desarrollo rápido, tanto de aplicaciones como de despliegue, así como la
habilidad de manejar grandes volúmenes de datos.

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

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

La ejecución de un programa Perl se puede dividir, generosamente, en dos fases:


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

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

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

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

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

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

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

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

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

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

En junio de 2006, win32.perl.org fue lanzado por Adam Kennedy en nombre de la


Fundación Perl. Es una comunidad web "para todo lo relacionado con Windows y
Perl".15

Estructura del lenguaje


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

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

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

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

Un escalar es un solo valor; puede ser un número, un string (cadena de caracteres)


o una referencia
Una lista es una colección ordenada de escalares (una variable que almacena una
lista se llama array)
Un hash, o memoria asociativa, es un mapeo de strings a escalares; los strings se
llaman claves y los escalares valores.
Todas las variables están precedidas por un sigilo, que identifica el tipo de dato
que es accedido (no el tipo de dato de la misma variable). Se puede usar el mismo
nombre para variables de diferentes tipos, sin que tengan conflictos.

$var # un escalar
@var # un array
%var # un hash
Los números se escriben de la forma usual; los strings están rodeados entre
comillas de varias clases.

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

$n = "3 manzanas";
$m = "2 naranjas";
print $n + $m;
Perl también tiene un contexto booleano que utiliza en la evaluación de
declaraciones condicionales. Los siguientes valores en Perl evalúan todos como
falso:

$falso = 0; # el número cero


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

my $resultado_real = $resultado_booleano ? 1 : 0;
Una lista se define listando sus elementos, separados por comas y rodeados por
paréntesis donde así sea r

También podría gustarte