SELFHTML/Quickbar
CGI/Perl
Éléments de langage Perl
![]() |
Instructions conditionnelles |
![]() |
|
![]() |
Vous pouvez faire dépendre l'exécution d'instructions de conditions.
#!/usr/bin/perl @Passwords = ("sensuelle","noceur","potiche"); # liste des mots de passe # script CGI simple pour demande du mot de passe # # Dans la première requête unless est vérifié si l'entrée standard # # contient le mot 'secret'. Si ce n'est pas le cas un fichier HTML # # avec un petit formulaire pour entrer le mot de passe est créé. Lors # # de l'envoi du formulaire ce script est rappelé. Mais étant donné que # # maintenant le nom du champ du formulaire pour le mot de passe # # s'appelle 'secret', le script prend l'embranchement else. Là est # # vérifié si le mot entré figure dans la liste. # read(STDIN, $Input, $ENV{'CONTENT_LENGTH'}); # lire l'entrée standard unless($Input =~ /secret/) # Si 'secret' n'y est pas... { print "Content-type: text/html\n\n"; # entête HTTP pour fichier HTML print "<html><head><title>Mot de passe</title></head>\n"; # fichier HTML print "<body bgcolor=#C0C0C0><h1>mot de passe</h1>\n"; print "<form action=\"\\cgi-bin/test.pl\" method=post>\n"; print "<input type=password name=\"secret\" maxlength=15 size=15>\n"; print "<input type=submit value=\"envoyer\">\n"; print "<input type=reset value=\"interrompre\">\n"; print "</form></body></html>\n"; exit(0); } else # si 'secret' y est... { print "Content-type: text/html\n\n"; # entête HTTP pour fichier HTML print "<html><head><title>Mot de passe</title></head>\n"; # fichier HTML print "<body bgcolor=#C0C0C0><h1>mot de passe</h1>\n"; ($name, $value) = split(/=/, $Input); for(@Passwords) # parcourir la liste des mots de passe { if($value eq $_) # Si la valeur entrée est égale au mot de passe { $succes = "oui"; last; # interrompre la boucle for } else # Si la valeur entrée est différente de mot de passe { $succes = "non"; } } if($succes eq "oui") { print "<b>Feu vert!</b>\n"; # Ici peut se trouver par exemple un lien à une adresse URL secrète } else { print "<b>Dommage, Vous N'ÊTES PAS HABILITÉ ou votre mot de passe est incorrect!</b>\n"; } print "</body></html>\n"; exit(0); } |
Avec if vous pouvez introduire une condition si... alors (if =
si), suivie entre parenthèses de la formulation de la condition.
Pour formuler de telles conditions, vous avez besoin d' opérateurs
de comparaison pour nombres ou chaînes de caractères, mais souvent
aussi de
variables
ou d'
expressions
régulières.
Une autre possibilité pour formuler une condition si... alors est à votre disposition avec unless (unless = si... n'est pas). Ici s'appliquent les mêmes règles qu'avec if. La différence avec if réside dans le fait qu'avec unless n'est pas demandé quelle condition doit absolument être remplie pour que le code programme qui en est dépendant soit exécuté, mais quelle condition ne doit pas être remplie.
Si vous voulez mettre plusieurs conditions en série, vous devez pour toutes les conditions qui suivent la première condition if/unless utiliser à leur place elsif (elsif = ou si).
Avec else vous définissez un embranchement pour votre requête qui doit être exécuté si les conditions de if, unless ou elsif ne sont pas remplies (else = autrement). Si vous n'avez pas besoin d'instructions alternatives pour ce cas, omettez simplement l'embranchement.
Tout ce qui se trouve dans une ramification avec if, unless, elsif ou else, doit figurer dans des parenthèses accolades, même s'il ne s'agit que d'une seule instruction.
![]() ![]() |
Pour des conditions alternatives simples (soit-soit), existe une syntaxe spéciale que vous pouvez utiliser comme alternative à l'instruction if/else.
#!/usr/bin/perl $resultat = $ENV{'HTTP_USER_AGENT'} =~ /95/ ? "Win 95 / WinNT" : "ni Win 95, ni Win NT"; print "Content-type: text/html\n\n"; print "<html><head><title>User</title></head>\n"; print "<body>\n"; print "<h1>vous avez ", $resultat, "!</h1>\n"; print "</body></html>\n"; exit(0); |
Une alternative simple (soit-soit) est introduite par une condition, dans
l'exemple $ENV{'HTTP_USER_AGENT'} =~ /95/. suivie d'un point
d'interrogation. À la suite du point d'interrogation est mentionnée une
valeur qui est actuelle quand la condition est remplie. Suivent deux
points qui précèdent la valeur pour le cas où la condition n'est pas remplie.
Étant donné qu'il s'agit de valeurs qui ne sont judicieuses pour
l'exploitation ultérieure que si elles sont sauvegardées dans une variable,
une telle alternative simple (soit-soit) est en règle générale précédée
d'une variable
- dans l'exemple: la variable scalaire simple $resultat. Par ce genre
d'instruction, le résultat de l'alternative simple (soit-soit) est affecté à
la variable.
Pour formuler des conditions, vous avez besoin d' opérateurs
de comparaison.
![]() | |
après:![]() |
![]() |
avant:![]() |
![]() |
SELFHTML/Quickbar
CGI/Perl
Éléments de langage Perl
Serge François, 13405@free.fr