SELFHTML/Aides à la navigation CGI/Perl Éléments de langage Perl |
Vous pouvez par exemple affecter une valeur à une scalaire. Pour cela, l'opérateur d'affectation est le signe égal
my $Nom = "Serge François"; my $Code = 4711; |
Une valeur est affectée aux variables respectives au moyen du signe égal =
.
Vous avez besoin d'opérateurs de comparaison quand vous voulez comparez deux valeurs, par exemple le contenu actuel d'une scalaire avec une constante..
if($sens_de_la_vie == 42) { print "Vous avez compris la vie!\n" }; if($sens_de_la_vie != 42) { print "Vous n'avez rien compris à la vie!\n" }; if($sens_de_la_vie > 42) { print "Ça va pas?\n" }; if($sens_de_la_vie < 42) { print "Vous ne faites pas le poids pour la vie!\n" }; if($age >= 18) { print "Vous avez même le droit de voir cette bêtise-ci!\n" }; if($age <= 17) { print "Vous n'avez même pas l'âge pour pour cette bêtise!\n" }; if($mot_de_passe eq "Hexasex") { print "Vous avez accès au sexe en dimension hexadécimale!\n" }; if($mot_de_passe ne "Hexasex") { print "Contentez vous de sexe en une dimension chez vous au lit!\n" }; if($nom gt "Y") { print "Vous êtes aussi toujours le dernier!\n" }; if($nom lt "B") { print "Vous êtes aussi toujours le premier!\n" }; if($nom ge "ZZ Top") { print "Votre groupe favori est ZZ Top ou quelque chose de pervers!\n" }; if($nom le "Abba") { print "Votre groupe favori est Abba ou quelque chose de pervers!\n" }; if($age =~ /[^0-9]/) { print "Ce n'est pas du tout un chiffre!\n" }; |
Perl différencie les opérateurs de comparaison pour les nombres et pour les chaînes de caractères. En outre, il existe un opérateur spécial pour les comparaisons avec des expressions régulières.
Pour demander si deux nombres sont égaux, notez deux signes égal ==
à la suite.
Pour demander si deux nombres sont différents, notez entre les deux valeurs les signes !=
.
Pour demander si un nombre est plus grand ou égal à un autre notez les signes >=
.
Pour demander si un nombre est dans tous les cas plus grand qu'un autre notez le signe >
.
Pour demander si un nombre est plus petit ou égal à un autre notez les signes <=
.
Pour demander si un nombre est dans tous les cas plus petit qu'un autre notez le signe <
.
Pour demander si deux chaînes de caractères sont identiques notez eq
entre les deux valeurs à comparer (eq = equal = égal).
Pour demander si deux chaînes de caractères sont différentes, notez ne
entre les deux valeurs à comparer (ne = not equal = différent de ).
Pour demander si une première chaîne de caractères est placée plus loin dans l'ordre alphabétique qu'une deuxième, notez gt
entre les deux valeurs à comparer d(gt = greater than = plus grand que).
Pour demander si une première chaîne de caractères est placée plus avant dans l'ordre alphabétique qu'une deuxième, notez lt
entre les deux valeurs à comparer (lt = less than = plus petit que)
.
Pour demander si une première chaîne de caractères se trouve au même endroit ou est placée plus loin dans l'ordre alphabétique qu'une deuxième, notez ge
entre les deux valeurs à comparer (ge = greater or equal = plus grand ou égal)..
Pour demander si une première chaîne de caractères se trouve au même endroit ou est placée plus avant dans l'ordre alphabétique qu'une deuxième, notez le
entre les deux valeurs à comparer (le = less or equal = plus petit ou égal).
Pour comparer la valeur d'une variable scalaire simple, qu'il s'agisse d'un nombre ou d'une chaîne de caractères, avec une expression régulière, utilisez l'opérateur de comparaison =~
.
Pour effectuer des calculs avec des valeurs numériques, vous avez besoin d'opérateurs de calcul.
$classe_cent = 83 + 17; $classe_cent = 113 - 13; $classe_cent = 4 * 25; $classe_cent = 450 / 4.5; $classe_cent = 450 / 2 - 125; $classe_cent = 10 * (2 + 8); $classe_cent = 10 ** 2; $x = $classe_cent % 4; if($x == 0) { print $classe_cent, " est une année bissextile \n" } # notations spéciales : $nombre = 100; $nombre++; # augmenter $nombre de 1 $nombre--; # diminuer $nombre de 1 $nombre += 10; # augmenter $nombre de 10 $nombre -= 10; # diminuer $nombre de 10 $nombre *= 10; # multiplier $nombre par 10 $nombre /= 10; # diviser $nombre par 10 $nombre %= 10; # faire avec $nombre une division modulo par 10 $nombre **= 2; # élever $nombre à la puissance 2 |
Notez les opérateurs mathématiques avec les signes qui leur sont habituels. Avec +
vous notez une addition, avec -
une soustraction, avec *
une multiplication et avec /
une division et avec **
vous élevez à une puissance "x puissance y". L'opérateur %
représente une particularité. Il permet d'effectuer ce qu'on appelle une division modulo. Lors d'une opération modulo, deux valeurs sont divisées. Ici cependant, à la différence de la division normale, le résultat n'est que le reste de la division. Si vous notez par exemple: 13 % 5
, vous obtenez comme résultat 3, parce que 13 divisé par 5 égale 2 et que le reste est 3. C'est ce 3 qui donne le résultat de la division modulo.
Vous pouvez noter plusieurs opérations à la suite. Ici, la règle habituelle de "priorité du point sur le trait" est à respecter. Si vous voulez imposer une autre règle, vous devez utiliser les parenthèses comme dans l'exemple ci-dessus $classe_cent = 10 * (2 + 8);
.
Vous pouvez utiliser les notations particulières que vous trouvez dans les exemples ci-dessus si vous voulez abréger des additions ou des soustractions :
$nombre++;
est une abréviation pour $nombre = $nombre + 1;
$nombre--;
est une abréviation pour $nombre = $nombre - 1;
$nombre += 10;
est une abréviation pour $nombre = $nombre + 10;
etc... pour les opérations du même genre.
L'opérateur ++
est aussi désigné comme opérateur d'incrémentation, l'opérateur --
comme opérateur de décrémentation.
Pour les opérateurs ++
et --
il y a une particularité qui est attribuée à C ou même au langage machine (assembleur). Les opérateurs peuvent aussi bien être notés avant qu'après les variables (donc par exemple aussi bien $nombre++
que ++$nombre
). S'ils sont placés avant, l'opération est effectuée avant que l'expression soit évaluée (jargon de la branche: pré-incrémentation et pré-décrémentation). L'inverse s'applique aussi: si l'opérateur est placé après la variable, l'opération est effectuée après que l'expression a été évaluée (jargon de la branche: post-incrémentation et post-décrémentation). La sortie du code qui suit ne devrait donc pas vous surprendre:
my $nombre=1;
Il est sorti deux fois
print $nombre++;
print --$nombre;1
. La première fois, parce que $nombre
est sorti avant que 1 lui soit ajouté. La deuxième fois. parce que 1 est soustrait et que $nombre
est sorti ensuite.
Vous avez besoin d'opérateurs logiques pour formuler des expressions qui peuvent être vraies ou fausses. Vous trouverez l'emploi de telles expressions particulièrement pour les conditions pour les instructions conditionnelles ou pour les boucles.
if($a == 1 && $b == 2) { # si a = 1 et que b = 2 } if($a == 1 and $b == 2) { # si a = 1 et que b = 2 } if($a == 1 || $b == 1) { # si a = 1 ou que b = 1 } if($a == 1 or $b == 1) { # si a = 1 ou que b = 1 } if($a == 1 ^ $b == 1) { # si soit a = 1 ou soit b = 1 } if($a == 1 xor $b == 1) { # si soit a = 1 ou soit b = 1 } if (! ($a == 2)) { # a n'est pas égal à 2 } if (not ($a == 2)) { # a n'est pas égal à 2 } |
Avec l'opérateur logique &&
ou son équivalent littéral (and
) vous associez deux ou plusieurs conditions avec "et", ce qui veut dire que les deux ou toutes les conditions doivent être remplies pour que la condition globale soit remplie.
Avec l'opérateur logique ||
ou son équivalent littéral (or
) vous associez deux ou plusieurs conditions avec le "ou" inclusif c'est à dire qu'il suffit que l'une des conditions soit remplie pour que la condition globale soit remplie.
Avec l'opérateur logique ^
ou son équivalent littéral (xor
) vous associez deux ou plusieurs conditions avec le "ou" exclusif, c'est à dire qu'il faut que soit l'une ou soit l'autre condition soit remplie pour que la condition globale soit remplie.
Avec l'opérateur logique !
ou son équivalent littéral (not
) vous niez la condition qui suit, c'est à dire que vous ne demandez pas si la condition est vraie mais au contraire si elle est fausse.
Pour se servir correctement des opérateurs de bits vous devez comprendre les processus de mise en mémoire internes à l'ordinateur. C'est pourquoi les opérateurs de bits ne sont mentionnés que brièvement ici.
>>
déplace les bits vers la droite
<<
déplace les bits vers la gauche
&
associe deux valeurs avec ET pour les bits
|
associe deux valeurs avec OU pour les bits
^
associe deux valeurs avec ou exclusif pour les bits (XOR) pour les bits
~
forme le complément d'une valeur (tous les bits sont inversés)
En Perl vous n'avez pas besoin comme dans certains autres langage d'une fonction pour concaténer les chaînes de caractères. Il existe pour cela un opérateur.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); my $sortie_HTML = "La variable d'environnement <b>HTTP_USER_AGENT</b> a la valeur <b>".$ENV{HTTP_USER_AGENT}."</b><br>"; $sortie_HTML .= "<hr>fin de la sortie"; print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Sortie du test</title>\n"; print "</head><body>\n"; print $sortie_HTML; print "</body></html>\n"; |
Le point .
est l'opérateur pour concaténer les chaînes de caractères. Les chaînes de caractères concaténées peuvent être littérales, donc contenir simplement du texte, mais aussi être une variable. Dans le script d'exemple vous voyez un cas d'application typique pour des scripts CGI pour l'opérateur pour concaténer des chaînes de caractères. Là est sauvegardée une sortie HTML assez longue dans la scalaire $sortie_HTML
, qui est trafiquée avec différentes chaînes de caractères. Entre autres y est insérée la valeur de la variable d'environnement HTTP_USER_AGENT
, qui contient le nom et la version du navigateur appelant.
L'exemple de script montre aussi dans la deuxième instruction comment de nouvelles chaînes de caractères peuvent être accrochées à une chaîne déjà existante. Avec .=
ce qui est placé à droite du signe est simplement affecté à la variable qui est placée à gauche du signe. La même instruction peut être notée sous la forme longue suivante:
$sortie_HTML = $sortie_HTML."<hr>fin de la sortie";
Le script sort la chaîne de caractères ainsi formée dans le navigateur avec une instruction print
.
En Perl vous pouvez "multiplier" les chaînes de caractères avec x
.
print "A"."h" x 10, "!\n"; # crée la sortie "Ahhhhhhhhhh!" |
Notez l'opérateur x
derrière la chaîne de caractères que vous voulez multiplier. Derrière l'opérateur, notez le nombre de fois que doit être répétée la chaîne de caractères.
Pour les opérateurs de Perl, existe un ordre de priorité bien établi. Si vous effectuez des opérations complexes ou combinez plusieurs conditions entre elles, prévaut pour la résolution interne de telles expressions complexes la prééminence suivante:
++ --
(incrémenter. décrémenter)**
(puissance)! ~
(négation logique et pour les bits)=~ !~
(Liaison à des expressions régulières)* / % x
(multiplication, division, division modulo, répétition de chaînes de caractères)+ - .
(addition, soustraction, concaténation de chaînes de caractères)<< >>
(déplacement de bits)< <= > >= lt le gt ge
(comparaison plus grand que, plus petit que)== != eq ne
(égalité/inégalité)&
(ET pour les bits)| ^
(OU pour les bit - inclusif/exclusif)&&
(ET logique)||
(OU logique)..
(définitions de passages dans des listes)?:
( Condition soit... soit...)= += -= &= ^= |=
(affectation), =>
(énumération)not
(négation logique)and
(ET logique)or xor
(OU logique (inclusif/exclusif)À l'aide de parenthèses, vous pouvez influencer l'ordre de priorité des opérateurs et évaluer des expressions comme vous le désirez.
$statistique_officielle = 3.29 * 3 + 4.71; $Ma_statistique = 3.29 * (3 + 4.71); |
Par les parenthèses dans l'exemple, la règle du "trait avant le point" qui s'applique aux opérateurs de calcul de Perl, est levée.
Expressions régulières | |
Commandes de saut | |
SELFHTML/Aides à la navigation CGI/Perl Éléments de langage Perl |
© 2001 Stefan Münz / © 2003 Traduction Serge François, 13405@free.fr
selfhtml@fr.selfhtml.org