# Programación en Perl/Estructuras de control

* for
* while
* if
* else
* unless
* until
* foreach
* Ciclos, bucles
* Sentencias
* Uso de expresiones (regulares)

# Estructuras de control

Perl tiene varias clases de estructuras de control.
* Control de ciclos: do, while, for, foreach, continue.
* Control de sentencias: if, else, unless, until, elsif.
* Control de flujo: goto, elsif, next, last, redo, return.

## Para varias sentencias

Tiene estructuras de control orientado al bloque, similar a las de los lenguajes de programación C y Java.
* Las CONDICIONES están rodeadas por paréntesis y
* Los BLOQUES rodeados por llaves
* Las expresiones opcionales por corchetes cuadrados
* Las ETIQUETAS deben llevar al final dos puntos ':';
Donde EXPRESION_1 es la expresion inicial, EXPRESION_2 la condicion y la EXPRESION_3 es la expresion incremental.

## Para una sola sentencia

Cuando se controla a una sola declaración, los modificadores de declaración proporcionan una sintaxis más ligera:
Donde DECLARACIÓN es una instrucción, llamada a alguna funcion, etc. y en estos casos la CONDICIÓN en vez de estar rodeado por parentesis requiere un punto y coma al final de la condición.

## Operadores lógicos

Los operadores lógicos se utilizan para construir la CONDICIÓN en una estructura de control.
Donde EXPRESION1 y EXPRESION2 son variables a comparar o 'expresiones' boleanas(verdadero o falso) según el contexto en que se use.

## Operador triario

Una expresion que resume la sentencia if CONDICION BLOQUE else BLOQUE es:
Donde la EXPRESION_1 es el valor devuelto si la CONDICIÓN es verdadera.

# Control de flujo

Las palabras clave de control de flujo next, last, return y redo son expresiones, por lo que pueden ser usadas con los operadores cortocircuito.

## Construcciones para ciclos

Perl también tiene dos construcciones implícitas para bucles:
grep devuelve todos los elementos de lista en que el bloque subordinado evalúa a verdadero. map evalúa el bloque subordinado por cada elemento de lista y devuelve una lista de los valores resultantes. Estas construcciones permiten un estilo simple de programación funcional.
No hay declaración switch (salto multi-camino) en Perl 5. La documentación Perl describe media docena de formas de conseguir el mismo efecto usando otras estructuras de control. Existe sin embargo un módulo Switch, que proporciona la funcionalidad modelada para el próximo Perl 6.

## Excentricidades para el control de flujo

Perl incluye una declaración goto etiqueta, pero es usada raramente. Las situaciones donde en otros lenguajes se utiliza goto no ocurren tan a menudo en Perl debido a sus amplias opciones de control de flujo.
Existe también una declaración goto &sub que realiza una llamada 'final'. Termina la subrutina actual e inmediatamente llama a la sub especificada. Esto se usa en situaciones donde una nueva subrutina puede realizar una gestión de la pila más eficiente que el propio Perl (porque típicamente no se requiere ningún cambio en la pila actual), y en una recursión muy profunda este tipo de llamadas puede tener un sustancial impacto positivo en el funcionamiento porque evita la sobrecarga de la gestión contexto/pila en el momento de retornar.

# Ejemplos

Los siguientes apartados son ejemplo de como usar las sentencias de control en Perl.