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 ':';
[ETIQUETA] while CONDICION BLOQUE [continue BLOQUE ]
[ETIQUETA] until CONDICION BLOQUE [continue BLOQUE ]
[ETIQUETA] foreach [VARIABLE] (LISTA) BLOQUE [continue BLOQUE]
[ETIQUETA] for (EXPRESION_1;EXPRESION_2;EXPRESION_3) BLOQUE
if CONDICION BLOQUE [[elsif BLOQUE] else BLOQUE]
unless CONDICION BLOQUE [else BLOQUE]
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:
DECLARACIÓN if CONDICIÓN
DECLARACIÓN unless CONDICIÓN
DECLARACIÓN while CONDICIÓN
DECLARACIÓN until CONDICIÓN
DECLARACIÓN foreach LISTA

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 comaal final de la condición.

Operadores lógicos.

Los operadores lógicos se utilizan para construir la CONDICIÓN en una estructura de control.
EXPRESION1 and EXPRESION2;
EXPRESION1 or EXPRESION2;
EXPRESION1 && EXPRESION2;
EXPRESION1 || EXPRESION2;
EXPRESION1 eq EXPRESION2;
EXPRESION1 == EXPRESION2;

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:
[DECLARACION] [(] CONDICIÓN ? EXPRESION_1 : EXPRESION_2 [)];

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:ç
resultados = grep { ... } lista
resultados = map  { ... } lista

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 devuelveuna lista de los valores resultantes. Estas construcciones permiten un estilo simple de programación funcional.

Ejemplos:
1)
# Imprime los valores que toma $i, desde 0 hasta 99
for($i = 0; $i < 100; $i++){
print "$i\n";
}
# Cuando $i es igual a 100 la expresion '$i < 100' se
# evalua como falsa y el bucle termina
# Imprime una lista de nombres
@amigos = ('Julia', 'Luis', 'Mateo', 'Maria');
$na = @amigos;
for($i = 0; $i < $na; $i++)
{
print "$amigos[$i]\n";
2)
# El ejemplo anterior escrito de forma más consisa
@amigos = ('Julia', 'Luis', 'Mateo', 'Maria');
print "$_\n" foreach(@amigos);
@array = (23,35,'rosas','rojas',3,'5 numeros');
# Recorre todos los valores de la lista.
foreach(@array){
print $_; # Imprime el valore almacenado.
}
3)
$numero = 5;
# Evalua $numero.
if($numero == 5){
print 'Hola mundo';
}
$numero = 'hola';
print 'Hola mundo' if $numero eq 'hola';
print 'cruel' if $numero;
# Analiza las siguientes sentencias,
# persiguen el mismo resultado.
$numero = 0;
print 'nunca deberia imprimir este texto' if $numero;
print 'esta si se imprimira' if ! $numero;
if($numero){
print 'nunca deberia imprimir este texto';
}elsif($numero == 5){
print 'este texto tampoco se imprimira';
}else{
print 'esta si se imprimira';
}
print ($numero?'nunca deberia imprimir este texto':'esta si se imprimira')


No hay comentarios:

Publicar un comentario