Boucles et instructions conditionnelles
 

Instructions conditionnelles à une ligne

if ($var = =0) {
    print ("Voici zéro.\n");
}

peut être remplacé par

print ("Voici zéro.\n") if ($var = =0);

On aura de même

print ("Voici zéro.\n") unless ($var = =0);
print ("Pas encore zéro.\n") while ($var = =0);
print ("Pas encore zéro.\n") until ($var = =0);
 

Boucler sur une liste : l'instruction foreach

foreach $word (@words) {
    if($word eq "toto") {
        print ("mot toto trouvé\n");
    }
}

Si @words est une liste de mots, le programme précédent affiche toto dès qu'il le trouve dans la liste. $word est ici une variable locale à la boucle foreach.

Boucle do

C'est la seule boucle qui permette d'effectuer la série d'instructions au moins une fois, puisque l'expression conditionnelle est évaluée après la réalisation de ces instructions.

Last, next et redo

- L'instruction last permet de sortir d'une boucle même si l'expression conditionnelle est vraie. Exemple :

while (1) {
    $line = <STDIN>;
    if ($line eq "") {
        last ;
    }
    ...
}

Alors que la condition (1) est toujours vraie, ce qui devrait mener à une boucle infinie, on sort de la boucle dès que l'on atteint la fin du fichier d'entrée standard.

- L'instruction next permet de shunter une itération et de passer à la suivante.

- L'instruction redo permet de recommencer une itération de la boucle (Attention : on ne peut utiliser redo à l'intérieur d'une boucle do).
 

Last, next et redo ne permettent de quitter que la boucle en cours. Dans le cas de boucles imbriquées, et si l'on souhaite sortir de l'ensemble des boucles, on peut utiliser des étiquettes. Exemple :

PREMIERE: while (...) {
    ...;
    while (...) {
        ...;
        last PREMIERE;
    }
}

Ces étiquettes peuvent également être affectées à des lignes quelconques, et utilisées par goto.