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.
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.
$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);
for ($i = 0; $i++; $i<10) { print "$i\n"; }
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.