Next Previous Contents

3. Control de flujo

Perl tiene las mismas estructuras de control de flujo que C, y un par más: if...else, while, for, switch...case, etc; y como propias, foreach, unless o until. Las más habituales son las citadas a continuación.

3.1 If

Un if en Perl funciona exactamente igual que uno en C:


if ($a == 0) {
        print "a es cero\n";
}
else {
        print "a no es cero\n";
}

Una diferencia importante con C es que en Perl las instrucciones pertenecientes a una de estas estructuras siempre tienen que ir entre llaves, aunque sólo haya una instrucción. Es decir, que el siguiente código:


if ($a == 0)
        print "a es cero";

generaría un error de ejecución.

Una de las ventajas de que en Perl considere casi todo como cadenas es que podemos evaluar éstas directamente en un if, sin recurrir a funciones como hacíamos en C:


$a = "Hola";

if ($a == "Hola") {
        print "Hola a ti también";
}
else {
        print "No te entiendo";
}

Podemos evaluar relaciones de igualdad y orden lexicográficos entre cadenas usando los operadores habituales: igual que, mayor/menor que, mayor/menor o igual que ...

En cuanto a las operaciones lógicas, en Perl existe tanto la forma de C, con && y ||, como una forma más "literal": and y or.

Al igual que en C, en Perl no hay un tipo "booleano". Una variable (o expresión) es cierta si su valor es distinto de cero, o de la cadena vacía; y es falso en caso contrario. Todo en Perl tiene un valor, por lo que se pueden hacer cosas como ésta:


$a = 0;

($a and print "a no es cero") or print "a es cero";

Que sería equivalente a:


$a = 0;

if ($a) {
        print "a no es cero";
}
else {
        print "a es cero";
}

Toda función estándar en Perl devuelve un valor distinto de cero cuando su funcionamiento es correcto, y cero si ha habido algún error en su ejecución. Por eso podemos hacer cosas como la de arriba.

3.2 While


$a = 10;

while ($a >= 0) {
        print "a no es cero\n";
        $a--;
}

También existe el do...while:


$a = 10;

do {
        print "a no es cero\n";
        $a--;
} while ($a >= 0);

3.3 For


for ($i = 0; $i++; $i<10) {
        print "$i\n";
}

3.4 Foreach

Esta es una instrucción propia de Perl. Sirve para recorrer los elementos de un array por orden:


foreach $linea (@texto) {
        print "$linea\n";
}

La sintaxis es bastante clara: por cada elemento del array @texto, cuyo valor se almacena en la variable $linea, se hace lo que se indique entre las llaves. Muchos programas sencillos de Perl consisten sólo en leer los datos de un fichero o de la entrada estándar, almacenar las líneas en un array y procesarlas con un bucle foreach, lo que da idea de su versatilidad.


Next Previous Contents