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