
La
mayoría de las estructuras de control en PERL, han sido heredadas
del lenguaje C/C++, por tanto, para aquellos que conozcan este lenguaje
será fácil adaptarse.
Estructuras
Condicionales Simples:
Las distintas intrucciones de un programa o algoritmo se ejecutan secuencialmente;
pero en ocasiones es necesario bifurcar o desviar momentaneamente esa ejecución
en función de nuestras necesidades. La estructura condicional más
simple que permite esta bifurcación es el if...
(Si...)
y
permite realizar una acción o grupo de acciones en función
de la condición.
![]() |
if (condición)
{ intrucciones... } |
En el caso del if en PERL existen 2 variantes en las expresiones que usan en las condiciones de comparación:
==
igual que...
!=
distinto de...
<
menor que...
>
mayor que...
>=
mayor o igual que...
<=
menor o igual que...
| $edad=22;
if
($edad == 22)
|
2.- Comparación alfanumérica, literal o de textos.
-
eq igual que...
-
ne distinto de...
-
lt menor que...
-
gt mayor que...
-
ge mayor o igual que...
-
le menor o igual que...
| $saludo="hola";
if
($saludo eq "hola")
|
Existe otra estructura condicional simple propia del lenguaje PERL que es unless (hacer a menos que...). Se usa cuando queremos que se ejecute una instrucción o grupo de instruciones en el caso de que una variable no esté definida o que la condición no sea verdad, es decir, equivaldría a Si no existe... o Si no es...
Si no existe:
| unless
($saludo)
{ print "Hola"; } |
if ( ! $saludo)
{ print "Hola"; } |
Si no es:
| $saludo="Adiós";
unless ($saludo
eq "Hola")
|
$saludo="Adiós";
if ($saludo
ne "Hola")
|
En
el caso de que la condición de lugar a 2 posibilidades se pueden
realizar 2 acciones o grupos de acciones. En este caso se utiliza if...else...
(Si...sino...)
![]() |
if (condición)
{ instrucciones... } else { instrucciones... } |
Ejemplo:
| print"¿Qué
edad tienes?";$edad=<STDIN>;
chop($edad); if
($edad
>= 18 )
|
El programa pide la edad de una persona y le indica si es mayor de edad o no. Observamos que tras la entrada de la edad usamos la función chop( ) para eliminar el retorno de carro de la edad; sino lo hacemos así el programa no funcionará, ya que, el valor de la edad terminaría con "\n" y ese caracter no lo comprobamos en las condiciones.
Estructura
Condicional Múltiple:
Hasta
este momento hemos estudiado el caso de que una condición nos lleve
a realizar una o dos acciones, pero se puede dar el caso de que la condición
nos pueda ofrecer más de 2 resultados. En este caso el PERL dispone
de una intrucción ideal para este fin, if...elsif...else...
(Si...sino-si...sino)
| print
"¿A
qué país pertenece la moneda: ";
$moneda=<STDIN>; chop($moneda); if
($moneda eq "peseta")
|
El programa es muy simple y pide el nombre de una moneda y muestra el país a que pertenece; siempre que sean las monedas de ciertos paises (España,EEUU y Portugal), en caso contrario muestra no conocer dicha moneda.
Hasta
este momento sólo hemos empleado estructuras que permiten decidir
si se realiza una u otra acción o varias acciones en función
de las distintas posibilidades que permite la condición. En el
caso de que queramos repetir una acción o grupo de acciones
dependiendo de una condicion, podemos usar for....,foreach...ywhile...Todas
estas instrucciones producen los denominados bucles.
La instrucción for es la estructura repetitiva más se usada para crear bucles. Se basa en la repetición N veces, definidas por el programador, de una serie de acciones o instrucciones. Cuando la condición alcanza el máximo de veces definido, concluye esta repetición.
Los bucles de tipo Para necesitan de unos valores númericos definidos que indican las veces que se repetirá un bloque de instrucciones.Entendemos por bloque de instrucciones a todas las acciones o intrucciones que se encuentren entre las llaves "{ }" que delimitan el ámbito de una estructura de control.
El bucle se ejecutará N veces que indica una variable que actúa como contador, indicando el valor inicial, el final y el incremento de conteo. El incremento se hace mediante esta nomenclatura:
Incremento de 1 en 1
$var=$var+1;
$var++;
$var+=1;
Incremento de 2 en 2
$var=$var+2;
$var+=2;
y así sucesivamente para otros incrementos.
|
|
|
| for
($i=1; $i<=10; $i++)
{ print "$i\n"; } |
Para (valor inicial; valor
final; incremento)
{ Escribe "$i\n"; } |
Este simple programa muestra en pantalla una lista de números desde el 1 al 10.
En
ocasiones nos puede interesar que el bucle termine antes del número
de veces de repetición estimado o que al alcanzar cierto número
de repeticiones se produzca una alteración del bucle...Para permitir
estas alteraciones del flujo normal de las repeticiones, tenemos las instrucciones
next
(siguiente)
y
last
(último).
next
permite saltar la cuenta una vez en un punto determinado
del proceso del bucle.
last
concluye la cuenta y las repeticiones, terminando el bucle.
| for
($i=1; $i<=10; $i++)
{ if ($i == 3) { next; } print "$i\n"; } |
for
($i=1; $i<=10; $i++)
{ if ($i == 3) { last; } print "$i\n"; } |
El
primer ejemplo muestra una lista de números del 1 al 10, saltando
el número 3.
El
segundo ejemplo muestra una lista de números del 1 al 3.
Esta instrucción se usa para recorrer los valores de las matrices. La expresión dentro del paréntesis (matriz) es evaluada para producir una lista con sus valores, que actúan como contadores del bucle, ejecutandose el bucle una vez por cada uno de estos elementos.
En este ejemplo el bucle se ejecutará una vez por cada uno de los elementos de la matriz @nombres. Se utiliza una variable contenedor $persona que contiene, en cada pasada, cada uno de los valores de la matriz.
| @nombres=("Juan","Antonio","Luis","Marcos");
foreach
$persona
(@nombres)
|
En este caso se usan las claves (keys) y los valores (values) de una matriz asociada como contador del bucle y se asignan a variables contenedores como $letra y $nombre que podemos usar para mostrar las iniciales de cada una de las personas o los nombres.
| %nombres=("J","Juan","A","Antonio","L","Luis");
foreach
$letra
(keys %nombres)
|
| %nombres=("J","Juan","A","Antonio","L","Luis");
foreach
$nombre
(values %nombres)
|
Como indica su nombre, un bucle se repetirá mientras que se cumpla o deje de cumplirse una condición. La nomenclatura de esta estructura repetitiva es:
while
(condición)
{
intrucciones...
}
Ejemplo: Este programa
mostraría el saludo de "Hola",
mientras el contador no superase las 5 veces, pero hemos incluido una condición
( if ($n==3)
) para mostrar otro mensaje "Adiós"
y salir (exit ) al llegar a la
3
repetición.
| $n=1;
while ($n <= 5) { print "Hola\n"; if
($n==3)
$n++; } |
do
{
intrucciones...
}
until
(condición)
Ejemplo: Este programa
mostraría el saludo de "Hola",
hasta (until) que el contador no llegue a 3 veces.
| $n=0;
do { print "Hola\n"; $n++; } until ($n == 3) |
|
|