Outils pour utilisateurs

Outils du site


perl:tests_if_until

Ceci est une ancienne révision du document !


1. If, else, elsif

La structure des tests et des expressions booléennes en Perl est une fois de plus très similaire à ce que l'on trouve en C : if ($i > 0) {

 print "$i est strictement positif\n";

}

Comme pour les boucles, on peut également profiter de l'inversion de la syntaxe: dans ce cas le bloc disparait au profit d'une seule instruction, et les parenthèses deviennent également facultatives : print “$i est un entier strictement positif\n” if $i < 0;

Pour proposer une branche alternative : if ($i >= 0) {

 print "$i est positif";

} else {

 print "$i est négatif";

}

Par contre si l'on veut évaluer plusieurs branches (exclusives) en cascade, il y a le mot clé spécifique elsif : if ($i > 0) { print “$i est strictement positif”; } elsif ($i == 0) { print “$i est nul”; } else { print “$i est négatif”; }

C'est une erreur de syntaxe d'utiliser la construction else if…! Ce choix de langage est principalement issu du C où la distinction des imbrications ou des cascades sont la plupart du temps délicates :

2. Opérateur ternaire

Encore un emprunt du C, il doit son nom à sa spécificité: c'est le seul opérateur utilisant 3 opérandes. Cette expression : my $signe = ($i >= 0) ? “positif” : “négatif”;

… est équivalente à cette construction :

my $signe; if ($i >= 0) { $signe = “positif”; } else { $signe = “négatif”; }

3. Expressions booléennes

Opérateurs de comparaison

{| bgcolor=“#f7f8ff” cellpadding=“3” cellspacing=“0” border=“1” style=“font-size: 95%; border: gray solid 1px; border-collapse: collapse;”

< lt
le
> gt
>= ge
== eq
!= ne
cmp

Quelques exemples illustrant la différence entre les deux contextes :

{| bgcolor=“#f7f8ff” cellpadding=“3” cellspacing=“0” border=“1” style=“font-size: 95%; border: gray solid 1px; border-collapse: collapse;”

“a” < “b” est 'faux'
“-1.5” < “1” est 'vrai'

Notes sur cmp et : ces opérateurs sont utiles pour définir une relation d'ordre entre des éléments d'une liste, et donc en particulier les trier. Ce type d'opérateur se comporte comme suit :

{| bgcolor=“#f7f8ff” cellpadding=“3” cellspacing=“0” border=“1” style=“font-size: 95%; border: gray solid 1px; border-collapse: collapse;”

'Si…'
$a < $b
$a == $b
$a > $b

Valeurs booléennes des scalaires

Parfois on prend des raccourcis et on convertit un scalaire directement en valeur booléenne. Il existe donc une convention pour savoir si un scalaire est vrai ou faux : * si le scalaire n'est pas défini ou est une chaine vide, il est 'faux' * si le scalaire est un entier nul, il est 'faux' * dans tous les autres cas il est 'vrai'

Exemples :

{| bgcolor=“#f7f8ff” cellpadding=“3” cellspacing=“0” border=“1” style=“font-size: 95%; border: gray solid 1px; border-collapse: collapse;”

'Valeur scalaire'

my $file = “source.txt”; die “Fichier $file non présent” if (!-e $file);

Pour référence, voici les tests extrait de la documentation de Perl :

{| bgcolor=“#f7f8ff” cellpadding=“3” cellspacing=“0” border=“1” style=“font-size: 95%; border: gray solid 1px; border-collapse: collapse;”

-r
-w
-x
-o
-R
-W
-X
-O
-e
-z
-s
-f
-d
-l
-p
-S
-b
-c
-t
-u
-g
-k
-T
-B
-M
-A
-C
perl/tests_if_until.1237077908.txt.gz · Dernière modification : 2009/03/15 00:45 de root