[PERL]-Problème "for if elsif" en menu

Résolu
blux Messages postés 5032 Date d'inscription   Statut Modérateur Dernière intervention   -  
blux Messages postés 5032 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

j'ai créé une petite structure de menu en PERL, mais j'ai un souci lors de la saisie d'un choix avec 2 chiffres, il ne me prend que le dernier et va donc au menu correspondant, pas à celui que je voudrais (ex : je saisis 98, il va au choix 8, 97 ->7)

Une explication/correction ?

Merci d'avance.
while ($SAISIE != 99)
{
    print "\t\t\t\tPool en cours : ".$TAB_POOL[$SAISIE_POOL][0]."\n";
    print "\t\tProchains jours ouvrés : ".$JO1D." ".$JO1J."/".$JO1M."/".$JO1A." et ".$JO2D." ".$JO2J."/".$JO2M."/".$JO2A."\n";
    print " 1 - \n";
    print " 2 - \n";
    print " 3 - \n";
    print " 4 - \n";
    print " 5 - \n";
    print " 6 - \n";
    print " 7 - \n";
    print " 8 - \n";
    print "99 - Sortie\n";
    print "\nVotre choix -> ";
    $SAISIE = <STDIN>;
    chomp($SAISIE);
    print "#".$SAISIE."#\n";
    for ($SAISIE)
    {
        if (/1/)
        {
                print $I."-".$TAB_POOL[$I][0]."\t";
        }
        elsif (/2/)
        {
            ListeCart();
        }
        elsif (/3/)
        {
            # $IG est l'indice à partir duquel commencent les noms de groupes dans le tableau
            $I = $IG;
        }
        elsif (/4/)
        {
            print "Constitution de la liste des cartouches\n";
        }
        elsif (/5/)
        {
            print "Marche pôô!\n";
        }
        elsif (/6/)
        {
            $I = $IG;
            print "\n";
        }
        elsif (/7/)
        {
            for $I (0..$NB_ELEM-1)
            {
                print $LIST."\n";
            }
        }
        elsif (/8/)
        {
            for $I (0..$NB_ELEM-1)
            {
                print $LIST."\n";
            }
        }
        elsif (/98/)
        {
            print "Forçage\n";
        }
        elsif (/99/)
        {
            die "Fin\n";
        }
    }
}

--
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

2 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    il ne me prend que le dernier et va donc au menu correspondant, pas à celui que je voudrais (ex : je saisis 98, il va au choix 8, 97 ->7)

    Puisqu'il trouve d'abord /7/ ou /8/
    for ($SAISIE)

    for est équivalent avec foreach et on l'utilise pour les tableau

    for(@chaque_element)
    foreach(@chaque_element)

    Aussi pour les imbrications. C'est laide avec autant des if...elsif..
    Tu peux faire comme ça
    while ($SAISIE != 99){
        print "\t\t\t\tPool en cours : ".$TAB_POOL[$SAISIE_POOL][0]."\n";
        print "\t\tProchains jours ouvrés : ".$JO1D." ".$JO1J."/".$JO1M."/".$JO1A." et ".$JO2D." ".$JO2J."/".$JO2M."/".$JO2A."\n";
        print " 1 - \n";
        print " 2 - \n";
        print " 3 - \n";
        print " 4 - \n";
        print " 5 - \n";
        print " 6 - \n";
        print " 7 - \n";
        print " 8 - \n";
        print "99 - Sortie\n";
        print "\nVotre choix -> ";
        $SAISIE = <STDIN>;
        chomp($SAISIE);
        print "#".$SAISIE."#\n";
    
    
    SWITCH:{
      if ($SAISIE =~/1/) {print $I."-".$TAB_POOL[$I][0]."\t"         ;last SWITCH}
      if ($SAISIE =~/2/) {ListeCart()                                ;last SWITCH}
      if ($SAISIE =~/3/) {$I = $IG                                   ;last SWITCH}
      if ($SAISIE =~/4/) {print "Constitution liste des cartouches\n";last SWITCH}
      if ($SAISIE =~/5/) {print "Marche pôô!\n"                      ;last SWITCH}
      if ($SAISIE =~/6/) {$I = $IG;print "\n"                        ;last SWITCH}
    
      if ($SAISIE =~/7/) {  for $I (0..$NB_ELEM-1){
                              print $LIST."\n";
                            }                                        ;last SWITCH}
            
      if ($SAISIE =~/8/) {  for $I (0..$NB_ELEM-1){
                              print $LIST."\n";
                            }                                        ;last SWITCH}
    
      if ($SAISIE =~/98/) {print "Forçage\n"                         ;last SWITCH}
      if ($SAISIE =~/99/) {die "Fin\n"                               ;last SWITCH}
     }
    }
    En revanche, depuis Perl 5.8 pour obtenir les instructions switch et case
    use Switch;
    0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    alors mets comme ça

    /^1$/

    .
    .
    /^99$/

    si tu mets /7/ quand tu tapes 97 le motif correspond donc tu ne vas jamais exectuer le menu 97
    0
    1. blux Messages postés 5032 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      Nickel, ça marche !

      Merci...
      0