Perl

**Perl** ye un llinguaxe de programación diseñáu por Larry Wall en 1987. Perl toma carauterístiques del llinguaxe C, del llinguaxe interpretáu bourne shell (sh), AWK, sei, Lisp y, nun grau inferior, de munchos otros llinguaxes de programación.

Estructuralmente, Perl ta basáu nun estilu de bloques como los del C o AWK, y foi llargamente adoptáu pola so maña nel procesáu de testu y nun tener nenguna de les llimitaciones de los otros llinguaxes de script.

## Historia
Larry Wall empezó a trabayar en Perl en 1987 mientres trabayaba como programador en Unisys y anunció la versión 1.0 nel grupu de noticies comp.sources.misc el 18 d'avientu de 1987. El llinguaxe espandióse rápido nos siguientes años. Perl 2, publicáu en 1988, apurrió un meyor motor d'espresiones regulares. Perl 3, publicáu en 1989, añadió soporte pa datos binarios.

Hasta 1991 la única documentación de Perl yera una simple (y cada vez más llarga) páxina de manual Unix. En 1991 publicóse *[[Programming
Perl]]* (el llibru del camellu) y convirtióse na referencia *de facto* del llinguaxe. Coles mesmes, el númberu de versión de Perl saltó a 4, non por marcar un gran cambéu nel llinguaxe, sinón por identificar a la versión que taba documentada nel llibru.

Perl 4 traxo consigo una serie de llanzamientos de caltenimientu, rematando en Perl 4.036 en 1993. Nesti puntu, Larry Wall abandonó Perl 4 pa empezar a trabayar en Perl 5. Perl 4 quedar nesa versión hasta güei.

El desenvolvimientu de Perl 5 siguió en 1994. La llista de corréu *perl5-porters* establecer en mayu de 1994 pa coordinar el trabayu d'adautación de Perl 5 a distintes plataformes. Ye'l primer foru pa desenvolvimientu, caltenimientu y adautación de Perl 5.

Perl 5 foi publicáu'l 17 d'ochobre de 1994. Foi casi una completa reescritura del intérprete y añadió munches nueves carauterístiques al llinguaxe, incluyendo oxetos, referencies, paquetes y módulos. A destacar, los módulos aproven d'un mecanismu pa estender el llinguaxe ensin modificar l'intérprete. Esto dexó estabilizar el so nucleu principal, amás de dexar a los programadores de Perl añader nueves carauterístiques.

El 26 d'ochobre de 1995, creóse'l *Comprehensive Perl Archive Network* (CPAN). CPAN ye una coleición de sitio web qu'almacenen y distribúin fontes en Perl, binarios, documentación, scripts y módulos. Orixinalmente, cada sitiu CPAN tenía de ser aportáu al traviés de la so propiu URL; anguaño, http://www.cpan.org redirecciona automáticamente a unu de los cientos de repositorios espeyu de CPAN.

En 2008, Perl 5 sigue siendo calteníu. Carauterístiques importantes y delles construcciones esenciales fueron añadíes, incluyendo soporte Unicode, filos, un soporte importante pa la programación empobinada a oxetos y otres meyores.

### Nome
Perl llamóse orixinalmente "Pearl". Larry Wall quería da-y al llinguaxe un nome curtiu con connotaciones positives; asegura que miró (y refugó) toles combinaciones de trés y cuatro lletres del diccionariu. Tamién consideró nomalo como la so esposa Gloria. Wall afayó antes del llanzamientu oficial que yá esistía un llinguaxe de programación llamáu PEARL y camudó la ortografía del nome.

El nome de normal empieza con mayúscula (*Perl*) cuando se refier al llinguaxe y con minúscula (*perl*) cuando se refier al propiu programa intérprete por cuenta de que los sistemes de ficheros Unix estremen mayúscules y minúscules. Antes del llanzamientu de la primer edición de *Programming Perl* yera común referise al llinguaxe como *perl*; Randal L. Schwartz, sicasí, forzó'l nome en mayúscula nel llibru por que destacara meyor cuando fuera impresu. La distinción foi subsiguientemente adoptada pola comunidá.

El nome ye descritu dacuando como "PERL" (por **P**ractical **Y**xtraction and **R**eport **L**anguage - *Llinguaxe Práuticu pa la Estracción ya Informe*). Anque esta espansión prevaleció en munchos manuales actuales, incluyendo la páxina de manual de Perl, ye un retroacrónimo y oficialmente'l nome nun quier dicir nada. La ortografía de PERL en mayúscules ye por eso usada como xíriga pa detectar a individuos ayenos a la comunidá. Sicasí, suxiriéronse dellos retroacrónimos, incluyendo'l cómicu *Pathologically Eclectic Rubbish Lister* (Contabilizador de Basura Patológicamente Eclécticu).

### El símbolu del camellu
Perl simbolízase xeneralmente por un camellu d'una sola gorrumba (camellu arábigu o dromedariu), que foi la imaxe escoyida pol editor O'Reilly pa la cubierta de *Programming Perl*, que por consiguiente adquirió'l nome de *El Llibru del Camellu*. O'Reilly ye propietariu d'esti símbolu como marca rexistrada, pero diz qu'usa los sos derechos llegales namái pa protexer la *"integridá ya impautu d'esti símbolu"*.
O'Reilly dexa l'usu non comercial del símbolu, y ufierta logos Programming Republic of Perl y botones Powered by Perl.

Dende va unos años, y p'evitar esti tipu de problemes cola llicencia comercial, la Fundación Perl ellaboró nuevos logotipos basaos nuna cebolla, arriendes de les conferencies añales que Larry Wall ufierta col títulu: *State of the Onion* ("Estáu de la Cebolla") *Onion* pronúnciase bien paecíu a *Union*, polo que suena paecíu a *State of the Union* ("Discursu del Estáu de la Unión Estáu de la Unión"), eventu nel cual el Presidente de los Estaos Xuníos informa a los ciudadanos del estáu en que s'atopa'l so país.

## Descripción
La páxina de manual Unix  diz:

### Carauterístiques
La estructura completa de Perl deriva llargamente del llinguaxe C. Perl ye un llinguaxe imperativu, con variables, espresiones, asignaciones, bloques de códigu delimitados por llaves, estructures de control y subrutines.

Perl tamién toma carauterístiques de la programación shell. Toles variables son marcaes con un Sigilo precedente (*[[Sigil]]*, n'inglés). Los sigilos identifiquen inequívocamente los nomes de les variables, dexando a Perl tener una rica sintaxis. Notablemente, los sigilos dexen interpolar variables direutamente dientro de les cadenes de calteres (*[[string]]*). Como nos shell, Perl tien munches funciones integraes pa xeres comunes y p'aportar a los recursos del sistema.

Perl toma les llistes del Lisp, *[[hash]]* (memoria asociativa) del AWK y espresiones regulares del sei. Tou esto simplifica y facilita toles formes del analís sintácticu, manexu de testu y xeres de xestión de datos.

En Perl 5, añadiéronse carauterístiques pa soportar estructures de datos complexes, funciones de primer orde (p. y. clausures como valores) y un modelu de programación empobinada a oxetos. Estos inclúin referencies, paquetes y una execución de métodos basada en clases y la introducción de variables d'ámbitu léxicu, que fizo más fácil escribir códigu robezu (xunto col pragma strict). Una carauterística principal introducida en Perl 5 foi l'habilidá de empaquetar códigu reutilizable como módulos. Larry Wall indicó más palantre que "la intención del sistema de módulos de Perl 5 yera sofitar la crecedera de la cultura Perl en vegada del nucleu de Perl".

Toles versiones de Perl faen el tipificado automáticu de datos y la xestión de memoria. L'intérprete conoz el tipu y requerimientos d'almacenamientu de cada oxetu nel programa; reserva y llibera espaciu pa ellos según sía necesariu. Les conversiones llegales de tipu facer de forma automática en tiempu d'execución; les conversiones illegales son consideraes errores fatales.

### Diseñu
El diseñu de Perl puede ser entendíu como una respuesta a trés amplies enclinos de la industria informático: rebaxa de los costos nel hardware, aumentu de los costos llaborales y les meyores na teunoloxía de compiladores. Enantes, munchos llinguaxes d'ordenador como Fortran y C, fueron diseñaos pa faer un usu eficiente d'un hardware caru. En contraste, Perl ye diseñáu pa faer un usu eficiente de los costosos programadores d'ordenador.

Perl tien munches carauterístiques que faciliten la xera del programador a cuenta de unos requerimientos de CPU y memoria mayores. Estes inclúin xestión de memoria automática; tipu de datu dinámicu; *strings*, llistes y *hashes*; espresiones regulares; introspeición y una función `eval()`.

Larry Wall foi adomáu como llingüista y el diseñu de Perl foi bien aprendíu con principios llingüísticos. Exemplos inclúin la Codificación Huffman (les construcciones más comunes tienen de ser les más curties), bona distribución (la información importante tien de dir primeru) y una llarga coleición de primitives del llinguaxe. Perl favorez les construcciones del llinguaxe, tan naturales, como pa los humanos son la llectura y l'escritura, inclusive si eso fai más complicáu al intérprete Perl.

La sintaxis de Perl reflexa la idea de que "coses que son distintes tienen de paecer distintes". Por casu, esguilares, *arrays* y *hashes* tienen distintu sigilo. Índices de *array* y claves *hash* usen distintes clases de paréntesis. *Strings* y espresiones regulares tienen distintes allindiadores estándar. Esti aproximamientu puede oldease con llinguaxes como Lisp, onde la mesma construcción *S-espresión* y sintaxis básica usar pa munchos y variaos propósitos.

Perl tien carauterístiques que soporten una variedá de paradigmes de programación, como la imperativa, funcional y la Programación empobinada a oxetos empobinada a oxetos. Coles mesmes, Perl nun obliga a siguir nengún paradigma en particular, nin obliga al programador a escoyer dalguna d'elles.

Hai un ampliu sentíu de lo práctico, tantu nel llinguaxe Perl como na comunidá y la cultura que la arrodien. El prefaciu de *Programming Perl* empieza con, "Perl ye un llinguaxe pa tener el to trabayu termináu". Una consecuencia d'esto ye que Perl nun ye un llinguaxe ordenáu. Inclúi carauterístiques si la xente usar, tolera esceiciones a les regles y emplega la heurística pa resolver ambigüedaes sintáctiques. Por cuenta de la naturaleza indulxente del compilador, dacuando los errores pueden ser difíciles d'atopar. Falando del variáu comportamientu de les funciones internes nos contestos de llista y esguilar, la páxina de manual de `perlfunc(1)` diz "Polo xeneral, faen lo que'l to quieras, siempres que quieras la coherencia."

Perl tien dellos lemas que tresmiten aspeutos del so diseñu y usu. Unu ye *There's more than one way to do it* (Hai más d'una forma de faelo) (TMTOWTDI, usualmente pronunciáu 'Tim Toady'). Otros son *"Perl: la motosierra del exércitu Suizu de los llinguaxes de programación"* y *"Llendes imprecises"*. Una meta prefijada de Perl ye faer les coses fáciles de forma fácil y les xeres difíciles, posibles. A Perl tamién se-y llamó *"L'esparadrapu d'Internet"*.

### Aplicaciones

Perl tien munches y variaes aplicaciones, gracies a la disponibilidad de munchos módulos estándares y de terceres partes.

Usóse dende los primeros díes de la Web pa escribir guiones (*scripts*) CGI. Ye una de les "tres Pes" (Perl, Python y PHP), que son los llinguaxes más populares pa la creación d'aplicaciones Web, y ye un componente integral de la popular solución LAMP pal desenvolvimientu web. Grandes proyeutos escritos en Perl son Slash, IMDb y UseModWiki, un motor de Wiki. Munchos sitios web con altu tráficu, como Amazon.com y Ticketmaster.com usen Perl estensamente.

Perl úsase de cutiu como un "llinguaxe pegamento", amestando sistemes y interfaces que nun fueron diseñaos específicamente pa interoperar; y pal "escarbáu de datos", convirtiendo o procesando grandes cantidaes de datos pa xeres como por casu crear informes. Ello ye que estes fortaleces tán íntimamente xuníes. La so combinación fai a Perl una popular ferramienta de propósitu xeneral pa los Alministrador de sistemes alministradores de sistemes, especialmente en programes pequeños que pueden ser escritos y executaos nuna sola llinia de comandos.

Perl ye tamién llargamente usáu en finances y bioinformática, onde ye apreciáu pola so desenvuelvo rápido, tantu d'aplicaciones como d'esplegue, según l'habilidá de remanar grandes volúmenes de datos.

### Implementación
Perl ta implementáu como un intérprete, escritu en C, xunto con una gran coleición de módulos, escritos en Perl y C. La distribución fonte tien, en 2005, 12 MB cuando se empaqueta y estrúi nun ficheru tar. L'intérprete tien 150.000 llinies de códigu C y se compila nun ejecutable de 1 MB nes arquitectures de hardware más típiques. De forma alternativa, l'intérprete puede ser compilado como una biblioteca y ser enfiñida n'otros programes. Hai cerca de 500 módulos na distribución, sumando 200.000 llinies de Perl y unes 350.000 llinies adicionales de códigu C. Enforma del códigu C nos módulos consiste en tables de codificación de calteres.

L'intérprete tien una arquiteutura empobinada a oxetos. Tolos elementos del llinguaxe Perl —esguilares, llistes, *[[Tabla hash|hashes]]*, referencies a códigu, manejadores d'archivu— tán representaos nel intérprete como estructures C. Les operaciones sobre estes estructures tán definíes como una numberosa coleición de macros, typedef y funciones; esto constitúi l'API C de Perl. La API Perl puede ser esconcertante pal ensin empecipiar, pero los sos puntos d'entrada siguen un esquema de nomes coherente, qu'ayuda a los que quieran utilizala.

La execución d'un programa Perl puede estremase, generosamente, en dos fases: tiempu de compilación y tiempu d'execución. En tiempu de compilación l'intérprete *[[Analizador sintácticu|parsea]]* el testu del programa nun árbol sintácticu. En tiempu d'execución, executa'l programa siguiendo l'árbol. El testu ye parseado namái una vegada y l'árbol sintácticu ye optimizáu antes de ser executáu, por que la fase d'execución sía relativamente eficiente. Les optimizaciones del árbol sintácticu en tiempu de compilación inclúin simplificación d'espresiones constantes, espardimientu del contestu y optimización en cachos sueltos de códigu. Sicasí, les fases de compilación y execución pueden añerase: un bloque `BEGIN` execútase en tiempu de compilación, ente que una función `eval` empecipia una compilación mientres una execución. Dambes operaciones tán implícites n'otres -de forma notable, la clausa `use` que carga biblioteques, conocíes en Perl como módulos, implica un bloque `BEGIN`.

Perl ye un llinguaxe dinámicu y tien una gramática Gramátiques sensibles al contestu sensible al contestu que puede quedar afeutada pol códigu executáu mientres una fase d'execución entemedia (Ver exemplos.). Por eso Perl nun puede ser parseado por aciu una aplicación direuta d'analizadores sintácticos/parseadores Lex/Yacc. Sicasí, l'intérprete implementa'l so propiu analizador léxicu, que coordináu con un parseador modificáu GNU bison resuelve les ambigüedaes del llinguaxe. Díxose que "namái perl puede parsear Perl", queriendo dicir que namái'l intérprete Perl (*perl*) puede parsear el llinguaxe Perl (*Perl*). La razón d'esto atestíguase poles persistentes imperfecciones d'otros programes qu'entamen la xera de parsear Perl, como los analizadores de códigu y los autu-indentadores, que tienen que tráteles non yá coles munches formes d'espresar inequívocamente construcciones sintáctiques, sinón tamién col fechu de que tamién Perl nun puede, polo xeneral, ser parseado ensin antes ser executáu.

El caltenimientu del intérprete Perl, a lo llargo de los años, volvióse cada vez más difícil. El nucleu tuvo en continuu desenvolvimientu dende 1994. El códigu foi optimizáu en rendimientu por cuenta de la simplicidá, claridá y unes interfaces internes más fuertes. Nueves carauterístiques fueron añadíes, calteniendo inda, compatibilidá virtualmente completa escontra tras coles primeres versiones. El tamañu y la complexidá del intérprete son una barrera pa los desarrolladores que deseyen trabayar nél.

Perl ye distribuyíu con unos 120.000 test funcionales. Estos execútense como parte del procesu normal de construcción y comprueben estensamente al intérprete y a los sos módulos principales. Los desarrolladores Perl confíen nos test funcionales p'asegurase que los cambeos nel intérprete nun introducen errores; recíprocamente, los usuarios Perl que vean al intérprete pasar los test funcionales nel so sistema pueden tener un altu grau d'enfotu de que ta funcionando afechiscamente.

Nun hai una especificación o estándar escritu pal llinguaxe Perl y nun hai planes de crear unu pa la versión actual de Perl. Siempres esistió namái una implementación del intérprete. Esti intérprete, xunto colos test funcionales, formen la especificación *[[de facto]]* del llinguaxe.

### Disponibilidad
Perl ye software llibre y ta llicenciáu so la Llicencia Artística y la GNU General Public License. Esisten distribuciones disponibles pa la mayoría de sistemes operativos. Ta especialmente estendíu en Unix y en sistemes similares, pero foi portáu a les plataformes más modernes (y otres más obsoletas). Con namái seis esceición confirmaes, pue ser compilado dende'l códigu fuente en tolos Unix, compatibles POSIX o cualesquier otra plataforma Unix compatible. Sicasí, esto nun ye de normal necesariu, porque Perl ta incluyíu por defectu na instalación de los sistemes operativos más populares.

Por cuenta de los cambeos especiales necesarios pa soportar al Mac OS Classic, esiste una adautación especial llamada MacPerl.

#### GNU/Linux
Perl ta preinstalado nes distribuciones más populares de GNU/Linux incluyendo Gentoo, Slackware, Mandriva, Debian, RedHat y SUSE.

#### Windows
Los usuarios de Microsoft Windows de normal instalen una distribución binaria de Perl. Compilar Perl dende'l códigu fonte so Windows ye posible, pero la mayoría de les instalaciones nun disponen del necesariu compilador de C.

La capa de emulación Cygwin apurre otra forma de correr Perl baxu Windows. Cygwin apurre un entornu paecíu al de Unix en Windows qu'inclúi gcc, polo que compilar Perl dende'l códigu ye una opción accesible pa los usuarios que prefieren esta opción.

En xunu de 2006, win32.perl.org foi llanzáu por Adam Kennedy en nome de la Fundación Perl. Ye una comunidá web "pa tou lo rellacionao con Windows y Perl".

## Estructura del llinguaxe

### Programa exemplu
En Perl, el programa canónicu "Hola mundu" ye:

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

La primer llinia contién el *[[shebang]]* (par de calteres qu'identifica'l testu que sigue), que lu indica al sistema operativu ónde atopar l'intérprete de Perl. La segunda imprime'l *string* *¡Hola mundu!* y un calter de nueva llinia.

El *shebang* ye la forma normal pa invocar al intérprete nos sistemes Unix. Los sistemes Windows pueden siguir utilizándolo o pueden acomuñar la estensión d'archivu .pl col intérprete Perl. Dellos editores de testu tamién usen la llinia *shebang* como una pista sobre la manera de trabayu en que tienen d'operar. Si'l programa ye executáu por perl y non invocáu pol shell, la llinia qu'empieza pol *shebang* ye parseada pa interpretar les opciones. N'otru casu, ye inorada. Pa ver los detalles d'esto, consultar la páxina de manual perlrun.

### Tipos de datos
Perl tien trés tipo de datos: esguilares, llistes
y hashes:
* Un esguilar ye un solu valor; puede ser un númberu, un *string* (cadena de calteres) o una referencia
* Una llista ye una coleición ordenada d'esguilares (una variable qu'almacena una llista llámase *[[Vector (programación)|array]]*)
* Un *hash*, o memoria asociativa, ye un mapeo de *strings* a esguilares; los *strings* llámense *claves* y esguilar *valores*.

Toles variables tán precedíes por un sigilo, qu'identifica'l tipu de datu que ye aportáu (non el tipu de datu de la mesma variable). Puede usase el mesmu nome pa variables de distintos tipos, ensin que tengan conflictos.

```perl
$var # un esguilar
@var # un array
%var # un hash
```

Los númberos escribir de la forma avezada; los *strings* tán arrodiaos ente comines de delles clases.

```perl
$n = 42;
$nome = "juan";
$color = 'colloráu';
```

Perl va convertir los *strings* en númberos y viceversa dependiendo del contestu en que sían usaos. Nel siguiente exemplu los *strings* `$n` y `$m` son trataos como númberos cuando son argumentos del operador suma. Esti códigu imprime'l númberu '5', refugando cualesquier información non numbérica de la operación y dexando los valores de les variables intactos. (L'operador de concatenación nun ye `+`, sinón `.`.)

```perl
$n = "3 mazanes";
$m = "2 naranxes";
print $n + $m;
```

Perl tamién tien un contestu booleano qu'utiliza na evaluación de declaraciones condicionales. Los siguientes valores en Perl evalúen toos como falsu:

```perl
$falsu = 0; # el númberu cero $falsu =
0.0; # el númberu cero como flotante $falsu =
'0'; # el string cero $falsu =
""; # el string vacíu $falsu =
undef; # el valor devueltu por undef
```

Tolos demás valores evaluar a verdaderu. Esto inclúi'l curiosu *string* autu-descriptivu `"0 pero verdaderu"`, que de fechu ye 0 como númberu, pero verdaderu como booleano. (Cualesquier *string* non numbéricu tamién va tener esta propiedá, pero esti *string* en particular ye ignoráu por Perl en contestos numbéricos). Les espresiones booleanas evaluaes tamién devuelven valores esguilares. Anque la documentación nun indica qué valor *particular* devuélvese como verdaderu o falsu (y polo tanto non fiable), munchos operadores booleanos devuelven 1 por verdaderu y el *string* vacíu pa falsu (qu'evalúa a cero en contestu numbéricu). La función *defined()* diz-y si la variable tien dalgún valor. Nel exemplu anterior *defined($falsu)* va ser verdaderu con cada unu de los valores anteriores, sacante *undef*.
Si, específicamente, quier asegurase de tener un resultáu 1/0 (como en C), precisa realizar el cálculu siguiente:

```perl
my $resultáu_real = $resultancia_booleano ? 1 : 0;
```

Una llista defínese listando los sos elementos, dixebraos por comes y arrodiaos por paréntesis onde asina sía riquíu pola precedencia de los operadores.

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

Un *hash* puede ser inicializado dende una llista de pares clave/valor.

```perl
%favoritu = (
 joe => 'colloráu', sam
 => 'azul', );
```

Los elementos individuales d'una llista son aportaos utilizando un índiz numbéricu, dientro de corchetes. Valores individuales nun hash son aportaos utilizando la correspondiente clave, dientro de llaves. El sigilo $ identifica que l'elementu aportáu ye un esguilar.

```perl
$puntuaciones[2] # un elementu de puntuaciones favoritu{joe} # un valor de %favoritu
```


Múltiples elementos pueden ser aportaos usando nel so llugar el sigilo @ (identificando la resultancia como una llista).

```perl
@puntuaciones[2, 3, 1] # tres elemento de puntuaciones favoritu{'joe', 'sam'} # dos valores de %favoritu
```


El númberu d'elementos nun array puede ser llográu evaluando'l *array* en contestu esguilar o cola ayuda del sigilo $#. Esti postreru da l'índiz del últimu elementu dientro del *array*, non el númberu d'elementos.

```perl
$numbero = @amigos;
$#amigos; # l'índiz del últimu elementu n'amigos amigos+1; # de normal el númberu d'elementos en @amigos, #
 que ye unu más que $#amigos porque'l primer elementu tien l'índiz 0, non 1
```

Hai unes poques funciones qu'operen sobre *hashes* enteros.

```perl
@nomes_de_veceros = keys %direiciones; # guarda en @nomes_de_veceros toles claves de %direiciones
@direcciones_de_email = values %direiciones; # guarda en @direcciones_de_email tolos valores de %direiciones
```


### Estructures de control

Perl tien delles clases d'estructures de control.

Tien estructures de control empobináu al bloque, similar a los de los llinguaxes de programación C y Java. Les condiciones tán arrodiaes por paréntesis y los bloques subordinaos por llaves:

```perl
''etiqueta'' while ( ''condición'' ) {... }
 ''etiqueta'' while ( ''condición'' ) {... } continue {... }
 ''etiqueta'' for ( ''espresión inicial''; ''espresión condicional''; ''espresión incremental'' ) {... }
 ''etiqueta'' foreach ''var'' ( ''llista'' ) {... }
 ''etiqueta'' foreach ''var'' ( ''llista'' ) {... } continue {... }
 if ( ''condición'' ) {... }
 if ( ''condición'' ) {... } else {... } 
 if ( ''condición'' ) {... } elsif ( ''condición'' ) {... } else {... }
```

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

```perl
''declaración'' if ''condición'';
 ''declaración'' unless ''condición'';
 ''declaración'' while ''condición'';
 ''declaración'' until ''condición'';
 ''declaración'' foreach ''llista'';
```

Los operadores lóxicos *cortucircuitu* son de normal usaos pa controlar el fluxu del programa a nivel d'espresión:

```perl
''expr'' and ''expr''
 ''expr'' or ''expr''
```

Les pallabres clave de control de fluxu `next`, `last`, `return` y `redo` son espresiones, polo que pueden ser usaes colos operadores cortucircuitu.

Perl tamién tien dos construcciones implícites pa bucles:

```perl
''resultancies'' = grep {... } ''llista''
 ''resultancies'' = map {... } ''llista''
```

`grep` devuelve tolos elementos de *llista* en que'l bloque subordináu evalúa a verdaderu. `map` evalúa'l bloque subordináu per cada elementu de *llista* y devuelve una llista de los valores resultantes. Estes construcciones dexen un estilu simple de programación funcional.

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

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


Perl inclúi una declaración `goto ''etiqueta''`, pero ye usada raramente. Les situaciones onde n'otros llinguaxes utilízase `[[GOTO|goto]]` nun asoceden tan de cutiu en Perl por cuenta de les sos amplies opciones de control de fluxu.

Esiste tamién una declaración `goto &''sub''` que realiza una llamada 'final'. Termina la subrutina actual y darréu llama a la `''sub''` especificada. Esto úsase en situaciones onde una nueva subrutina puede realizar una xestión de la pila más eficiente que'l mesmu Perl (porque típicamente nun se riquir nengún cambéu na pila actual), y nuna recursión bien fonda esti tipu de llamaes puede tener un sustancial impautu positivu nel funcionamientu porque evita la sobrecarga de la xestión contexto/pila nel momentu de retornar.

### Subrutinas
Les subrutines definir cola pallabra clave `sub` ya invocaes a cencielles nomándoles. Si la subrutina en cuestión nun foi inda declarada, ye necesariu, pal procesu d'analís sintácticu, poner los paréntesis.

```perl
foo(); # paréntesis necesarios equí...
sub foo {... }
foo; #... pero non equí
```


Una llista d'argumentos pueden ser indicaos dempués del nome de la subrutina. Los argumentos pueden ser esguilares, llistes o *hashes*.

```perl
foo $x, @y, %z;
```

Los parámetros d'una subrutina nun precisen ser declaraos, nin en númberu nin en tipu; ello ye que pueden variar en cada llamada. Los *arrays* son espandíos a los sos elementos, los *hashes* a una llista de pares clave/valor y tol conxuntu ye pasáu a la subrutina como una indiferenciada llista d'esguilares.

Cualesquier de los argumentos pasaos tán disponibles pa la subrutina nel *array* especial `@_`. Los elementos de `@_` son acomuñaos a los argumentos actuales; camudando un elementu de `@_` camuda l'argumentu correspondiente.

Los elementos de `@_` pueden ser aportaos colos subíndices de la forma normal.

```perl
$_[0], $_[1]
```

Sicasí, el códigu resultante pue ser malo de lleer y los parámetros tener una semántica de pase per referencia, que puede resultar daqué non deseable.

Un modismu común ye asignar `@_` a una llista de variables con nomes.

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

Esto afecta tantu a la mnemónica de los nomes de los parámetros como a la semántica de los valores pasaos por valor. La pallabra clave `my` indica que les siguientes variables tán léxicamente enfiñíes nel bloque que les contienen.

Otru modismu ye sacar los parámetros de `@_`. Esto ye bien común cuando la subrutina toma un namái argumentu.

```perl
my $x = shift; # Si nun se diz nada, referímonos a @_
```

Les subrutinas pueden devolver valores.

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

Si la subrutina nun sale vía declaración `return`, entós devuelve la última espresión evaluada nel cuerpu de la subrutina. *Arrays* y *hashes* nel valor de torna son espandíos a una llista d'esguilares, igual que si fueren argumentos d'una función.

La espresión devuelta ye evaluada nel contestu de la llamada de la subrutina; esto puede sorprender al despreveníu.

```perl
sub llista { (4, 5, 6) }
sub array { @x = (4, 5, 6); @x }
 
$x = llista; # devuelve 6 - últimu elementu de la llista $x
= array; # devuelve 3 - númberu d'elementos de la llista @x
= llista; # devuelve (4, 5, 6)
@x = array; # devuelve (4, 5, 6)
```

Una subrutina puede afayar el so contestu de llamada cola función `wantarray`.

```perl
sub cualesquier { wantarray ? (1, 2) : "Naranxes" }
 
$x = cualesquier; # devuelve "Naranxes"
@x = cualesquier; # devuelve (1, 2)
```


### Espresiones regulares

El llinguaxe Perl inclúi una sintaxis especializada pa escribir espresiones regulares y l'intérprete contién un motor pa empareyar *strings* con espresiones regulares. El motor d'espresiones regulares usa un algoritmu de Vuelta Tras (backtracking), estendiendo les sos capacidaes dende'l simple axugamientu de patrones simples cola captura y sustitución de *strings*. El motor d'espresiones regulares derivar de *regex*, escritu por Henry Spencer.

La sintaxis d'espresiones regulares foi orixinalmente tomada de les espresiones regulares de Unix Versión 8. Sicasí, estremóse yá antes del primer llanzamientu de Perl y dende entós foi incorporando munches más carauterístiques. Otros llinguaxes y aplicaciones tán adoptando les espresiones regulares de Perl (PCRE) en cuenta de les espresiones regulares POSIX, incluyendo PHP, Ruby, Java y el Servidor HTTP Apache.

L'operador `m//` (empareya) dexa comprobar un axugamientu per mediu d'una espresión regular. (Pa embrivir, el precedente `m` puede ser omitíu.) Nel casu más simple, una espresión como:

```perl
$x =~ m/abc/
```

evalúa a verdaderu si y namái si el *string* `$x` empareya cola espresión regular `abc`.

Partes de la espresión regular pueden ser incluyíes ente paréntesis: les partes correspondientes d'un string empareyáu son *prindaes*. Los *strings* prindaos son asignaos de forma secuencial a les variables internes `$1, $2, $3,...` y una llista de *strings* prindaos devuélvese como valor del axugamientu.

```perl
$x =~ m/a(.)c/; # prinda'l calter ente 'a' y 'c' y guardar en $1
```

L'operador `s///` (sustitución) especifica una operación de busca y reemplazu:

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


Les espresiones regulares en Perl pueden tomar unos *modificadores*. Son sufixos d'una sola lletra que modifiquen el significáu de la espresión:

```perl
$x =~ m/abc/i; # axugamientu independientemente de si tán en mayúscula o minúscula $x
=~ s/abc/aBc/g; # busca y reemplazu global (a lo llargo de tol ''string'')
```

Les espresiones regulares pueden ser trupes y críptiques. Esto ye porque la sintaxis de les espresiones regulares ye desaxeradamente compacta, xeneralmente usando calteres sueltos o pares de calteres que representen les sos operaciones. Perl sollivia un pocu esti problema col modificador `/x` que dexa a los programadores poner espaciu en blancu y comentarios *dientro* de les espresiones regulares:

```perl
$x =~ m/a # empareya una 'a'
 . # empareya cualquier calter
 c # empareya una 'c'
 /x;
```

Un usu común de les espresiones regulares ye'l d'especificar allindiadores de campos al operador `split`:

```perl
@pallabres = split m/,/, $llinia; # estrema la llinia de valores separaos por comes
```

L'operador `split` complementa la captura de string. La captura de string devuelve les partes d'un string qu'empareyen con una espresión regular; `split` devuelve les partes que nun empareyar.

### Interfaz con bases de datos
Perl ta llargamente favorecíu pa les aplicaciones de bases de datos. Les sos facilidaes de manexu de testu son bones pa xenerar consultes SQL; *arrays*, *hashes* y la xestión de memoria automática fai fácil recoyer y procesar los datos devueltos.

Nes primeres versiones de Perl, les interfaces de bases de datos fueron creaes enllazando l'intérprete con una biblioteca de base de datos dende'l llau del veceru. Esto yera daqué cabileñu; un problema en particular foi que'l ejecutable `perl` resultante taba acutáu a usar namái una interfaz de base de datos, la que fuera enllazada. Tamién, reenlazar l'intérprete yera lo suficientemente dificultosu que namái foi realizáu pa delles de les más famoses ya importantes bases de datos.

En Perl 5, les interfaces de bases de datos tán implementaes pol módulu Perl DBI. El módulu `DBI` presenta una única interfaz a les aplicaciones Perl, independiente de les bases de datos, ente que los módulos `DBD::` (Controlador de base de datos) remanen los detalles d'accesu a unes 50 bases de datos distintos. Esisten controladores `DBD::` pa la mayor parte de les bases de datos ANSI SQL.

## Comparancia de funcionamientu
El "Computer Language Shootout Benchmarks" compara'l funcionamientu de implementaciones de problemes de programación típicos, en diversos llinguaxes. Los sos implementaciones Perl de normal tomen más memoria que les implementaciones n'otros llinguaxes, y esto varia los resultaos de velocidá. Les prestaciones de Perl son similares a les d'otros llinguaxes como Python, PHP o Ruby, pero más lentu que la mayor parte de llinguaxes compilados.

Perl puede ser más lentu qu'otros llinguaxes faciendo lo mesmo porque tien que compilar el códigu fonte cada vez que cuerre'l programa. En "A Timely Start", Jean-Louis Leroy atopó que los sos scripts en Perl tardaben muncho más tiempu en correr que lo qu'él esperaba porque l'intérprete perl perdía la mayor parte del tiempu buscando y compilando los módulos. Como Perl nun puede salvar el so compilación entemedia como la faen Java, Python y Ruby, los scripts Perl traen esta sobrecarga en cada execución. La sobrecarga nun ye un problema cuando la fase d'execución ye bien llarga, pero puede sesgar significativamente en tiempos d'execución bien curtios, como s'atopa de cutiu nos benchmarks. Una vegada que perl empecipia la fase d'execución, sicasí, pue ser bien rápido y típicamente supera a otros llinguaxes dinámicos. Teunoloxíes como mod perl superen esto guardando'l programa compilado en memoria ente execuciones, o Class::Autouse que retrasa la compilación de partes del programa hasta que son necesaries.

### Optimizando
Nicholas Clark, un desarrollador principal de Perl, diserta sobre delles meyores nel diseñu con Perl y otres soluciones en "When perl is not quite fast enough" . Les rutines más crítiques d'un programa Perl pueden escribise en C o inclusive en llinguaxe ensamblador con XS o Inline.

Optimizar Perl puede riquir una conocencia íntima del so funcionamientu en llugar de la maña col llinguaxe y la so sintaxis, significando que'l problema ta cola implementación de Perl en llugar de col llinguaxe mesmu. Perl 6, la siguiente versión, va tomar dalgunes d'estes idees como lleiciones, qu'otros llinguaxes yá aprendieron.

## Futuru

Nel añu 2000, na conferencia Perl, Jon Orwant fixo un pidimientu pa una nueva versión del llinguaxe. Esto condució a una decisión pa empezar el trabayu del rediseño del llinguaxe, que se llamaría Perl 6. Pidiéronse propuestes a la comunidá Perl pa les nueves carauterístiques del llinguaxe, y recibiéronse más de 300 RFC (del inglés *Request For Comments*, pidimientu de comentarios).

Larry Wall tuvo los siguientes años dixiriendo los RFC y sintetizándolos nun entornu de trabayu coherente pa Perl 6. Presentó'l so diseñu de Perl 6 nuna serie de documentos llamaos Apocalipsis, que se numberen pa correspondese colos capítulos de *Programming Perl*. L'actual, inacabada especificación de Perl 6, ta resumida nunos documentos de diseñu llamaos Sinopsis, que tán numberaos pa corresponder a los Apocalipsis.

Perl 6 nun tien la intención de ser compatible pa tras, anque va esistir una manera de compatibilidá.

En 2001 decidióse que Perl 6 corriera nuna máquina virtual llamada Parrot. Esto quier dicir qu'otros llinguaxes qu'usen Parrot van poder ganar accesu nativu a CPAN y va dexar dalgún ciertu nivel de desenvolvimientu cruzáu.

En 2005 Audrey Tang creó'l proyeutu pugs, una implementación de Perl 6 en Haskell. Foi y ye una plataforma de testeo del llinguaxe Perl 6 (separáu del desenvolvimientu actual de la implementación) dexando a los diseñadores esplorar. El proyeutu pugs nició una activa comunidá Perl/Haskell centrada alredor de la canal irc #perl6 en Freenode.

Un ciertu númberu de carauterístiques nel llinguaxe Perl 6 amuesen una similaridad coles de Haskell y Perl 6 foi acoyíu pola comunidá Haskell como un potencial llinguaxe de scripting.

Nel 2006, Perl 6, Parrot y pugs siguen tando baxu desenvolvimientu y un nuevu módulu pa Perl 5 llamáu v6 dexa a una parte del códigu Perl 6 correr direutamente sobre Perl 5.

## Diversión con Perl
Como en C, les competiciones de códigu cégaru son una traza popular de la cultura Perl. L'Obfuscated Perl contest homenaxa la virtú de la flexibilidá sintáctica de Perl. El programa siguiente imprime'l testu "Just another Perl / Unix hacker", usando 32 procesos en paralelu coordinaos con pipes. La esplicación completa ta disponible en el sitiu web del autor.


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


De forma similar al códigu cégaru pero con un propósitu distintu, "Poesía Perl" ye la práctica d'escribir poemes que puedan ser compilados como códigu llegal de Perl (anque xeneralmente ensin sentíu). Esta afición ye más o menos única en Perl debíu al gran númberu de pallabres normales del Inglés que'l llinguaxe utiliza. Los nuevos poemes publicar de forma regular nel sitiu Perl Monks, na seición Poesía Perl. Parte del saber de Perl ta en Black Perl, un exemplu infame de la poética de Perl.

Otru pasatiempu ye "Perl Golf". Como col deporte real, la meta ye amenorgar el númberu de golpes necesarios pa completar un oxetivu, pero equí, los "golpes" referir a los pulsaciones de tecláu en cuenta de a los percorríos nun club de golf. Propónse una xera, como "escaniar un string d'entrada y devolver el palíndromu más grande que contenga" y los participantes intenten bater a los sos oponentes escribiendo soluciones que rican cada vegada menos calteres de códigu fuente Perl.

Otra tradición ente los *[[hacker]]* Perl ye escribir JAPH, que ye una especie de pequeños programes cégaros qu'imprimen la frase "Just another Perl hacker,". El "canónicu" JAPH inclúi la coma a la fin, anque de cutiu omítese, y otres munches variantes que se crearon (exemplu, qu'imprime "Just Another Perl Pirate!").

Un módulu Perl interesante ye Lingua::Romana::Perligata (en CPAN). Esti módulu traduz el códigu fonte d'un script escritu en Llatín a Perl, dexando al programador escribir programes ejecutables en Llatín.

La comunidá Perl acutó l'espaciu de nomes "Acme" pa los módulos que sían risonderos o esperimentales. Dalgunos de los módulos Acme tán implementaos de maneres bien entreteníes. Dellos exemplos:
* Acme::Bleach, unu de los primeros módulos en Acme:: , dexa al códigu fonte d'un programa ser "blanquiáu" (esto ye, tolos calteres son reemplazaos pel espaciu en blancu) y siguir funcionando. Ye un exemplu d'un filtru de códigu fuente. Hai tamién un ciertu númberu d'otros filtros de fonte nel espaciu de nomes Acme.
* Acme::Hello simplifica'l procesu d'escribir un programa "Hello, World!"
* Acme::Currency dexa camudar el prefixu "$" de les variables esguilares por otru calter (por defectu usa'l euru "€")
* Acme::ProgressBar ye, dafechu fechu de camín, una horrible ya ineficiente forma d'indicar el progresu d'una xera 
* Acme::VerySign satiriza'l largamente criticáu serviciu Site Finder de VeriSign
* Acme::Don't implementa l'opuestu lóxicu de la pallabra clave `do` —`don't`—, que nun executa'l bloque de códigu subordináu.

## Comunidá Perl
La comunidá Perl ta constituyida por grupos que de la mesma conformen Perl Mongers.

## Referencies

## Enllaces esternos

* Perl.org – El direutoriu Perl
* Perl.com – Perl n'O'Reilly Network
* Perldoc at Perl.org – documentación online de Perl
* Documentación Perl n'español Proyeutu de traducción de les páxines del manual de Perl a español.
* Desenvolvimientu de Perl 5 y Perl 6 
* Parrot máquina virtual 

;Distribuciones
* The CPAN – *Comprehensive Perl Archive Network*, distribución fonte de Perl
* ActiveState ActivePerl – Perl para Microsoft Windows y otres plataformes
* IndigoPerl  – otra distribución de Perl pa Microsoft Windows
* Cygwin tamién distribúi Perl en Windows
* Strawberry Perl - una implementación open-source pa Windows.
* sitio web sobre Perl nel Open Directory Project