SELFHTML/Quickbar  CGI/Perl  Éléments de langage Perl


Instructions conditionnelles

Cette page est un document avec du texte et des informations

 Instructions conditionnelles avec if/unless/else/elsif
 Alternative simple (soit-soit)

 

Instructions conditionnelles avec if/unless/else/elsif

Vous pouvez faire dépendre l'exécution d'instructions de conditions.

Exemple:

#!/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);
 }

Explication:

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.

Attention:

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.

 

Alternative simple (soit-soit)

Pour des conditions alternatives simples (soit-soit), existe une syntaxe spéciale que vous pouvez utiliser comme alternative à l'instruction if/else.

Exemple:

#!/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);

Explication:

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: Boucles et commandes de saut
avant: Variables prédéfinies en Perl
 

SELFHTML/Quickbar  CGI/Perl  Éléments de langage Perl

© 1998 Stefan Münz / © 2001 Traduction  Serge François, 13405@free.fr