Next Previous Contents

4. Les structures de contrôle

Comme tout langage de programmation, Perl dispose de structures de contrôle.

4.1 if, else, elseif


        if(expr)
        {
                block1
        } else
        {
                block2
        }

ou


        if(expr)
        {
                block1
        } elseif(expr2)
        { 
                block2
        }

Dans les deux cas block1 est exécuté si l'évaluation de expr retourne une valeur positive. Dans le premier exemple, block2 est exécuté dans tous les autres cas. Dans le second, block2 est évalué seulement si expr2 retourne une valeur positive.

Plusieurs elseif peuvent être enchaênés.


        if($a == "a")
        {
                print "$a\n";
        } elseif($a == "b")
        {
                print "$a$a\n";
        } elseif($a == "c")
        {
                print "$a$a$a\n";
        } ...

4.2 foreach, while


        foreach (table)
        {
                block;
        }

        while(expr)
        {
                block;
        }

La structure de contrôle foreach permet d'executer block autant de fois qu'il y a d'éléments dans table.


        @tab = (1, 2, 3, 4, 5);
        $i = 0;

        foreach (@tab)
        {
                print "$i\n"; 
                $i++;
        }

L'exemple ci-dessus affiche successivement les valeurs 0, 1, 2, 3 et 4. Nous avons vu dans la section Les variables speciales que la variable $_ prenait la valeur de chaque élément d'une table passée dans une boucle foreach ou while. Illustrons cette particularité en simplifiant l'exemple précédent.


        @tab = (1, 2, 3, 4, 5);
        foreach (@tab)
        {
                print "$_\n";
        }

Cette fois, l'exemple affiche 1, 2, 3, 4 et 5. $_ prend successivement chaque valeur des éléments de \@tab.

Encore plus simple :


        foreach (1 .. 5)
        {
                print "$_\n";
        }

(1 .. 5) est un intervalle en Perl.


        @tab = (1, 2, 3, 4, 5);
        while($i = shift(@tab))
        {
                print "$i\n";
        }

shift retourne le premier élément de la table @tab et le supprime. Ainsi $i prend successivement les valeurs 1, 2, 3, 4 et 5. La boucle s'arrête lorsque $i est vide c'est à dire lorsqu'il n'y a plus d'éléments dans @tab.

4.3 Présentation du code

Perl dispose de quelques artifices permettant de rendre plus lisible le code écrit.


        print $value if $value;

Le contenu de $value est affiché si la variable est définie. Cela évite d'avoir


        if($value)
        {
                print $value;
        }

De même:


        print $value unless ! $value;

Littéralement, on affiche la valeur de $value A MOINS QUE la variable ne soit pas définie (! est l'opérateur non). Pour être encore mieux compris d'un humain, on aurait pu écrire:


        print $value unless ! defined $value;

De la même manière, on peut aussi utiliser while.


        print "/tmp/lock: exists\n" while -f "/tmp/lock";


Next Previous Contents