IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Redo et next petit problème.


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 63
    Par défaut Redo et next petit problème.
    Salut encore moi !

    Aujourd'hui j'ai un problème avec les opérateurs next et redo.

    Objectif :
    Relancer ma boucle suivant une certaine condition.

    Voilà, j'ai une boucle do-while qui comporte un if, je souhaite que suivant la condition la boucle soit relancée sans lire les lignes suivantes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    #Mon redo envoie ici ><
    tutu();
     
    sub tutu{
     
           #Traitement de données
     
           do{
                  #Traitement qui se fait toujours
     
                  if($Ya_une_couille_dans_l_histoire == 1){
                         redo;
                  }
     
                  #Si y a pas de problèmes on continue
           while($toto eq "tata");
    }
    Or voilà mon souci, l'opérateur redo me renvoie non pas au début de ma boucle mais hors de ma fonction (avant ma fonction), je sais bien qu'il est super fort mais la c'est du niveau Chuck Norris et c'est pas normal...

    L'opérateur next fait presque la même chose...

    So :
    I'll send an SOS to the world [x2]
    I hope that someone gets my
    Message in a forum [x2]

  2. #2
    Membre émérite Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Par défaut
    hum drôle de construction...

    déjà
    do et redo ne peuvent pas être utilisés ensemble...

    revois un peu ta boucle, le while n'est pas bien utilisé, du moins si j'ai compris ce que tu veux faire

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 63
    Par défaut
    Ah ça je savait pas...

    Eh bien le code que j'ai proposé est un exemple de comment j'ai utilisé le redo, ce que je cherche à faire n'est pas expliqué. Mais bon si do et redo ne fonctionnent pas ensemble et bien on va transformer ma do-while en while, je trouve ça moins propre mais bon pas trop grave.

    Il n'y à vraiment pas moyen de le faire avec une boucle do-while ?
    Je sais que le goto existe en PERL comme dans beaucoup de langages mais disons que je n'aime pas vraiment m'en servir...

    Merci.

  4. #4
    Membre émérite Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Par défaut
    après c'est chacun ses goûts

    je ferais comme ceci, mais à toi de voir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while (tout_va_bien){
    # on bosse, on bosse
      if (pas_bon){
        next;
      }
    # ça bosse moins
    }

  5. #5
    Invité de passage
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1
    Par défaut
    Si tu regardes la doc perlsyn (man perlsyn), tu verras que do { ... } while CONDITION est juste un cas particulier de EXPR while CONDITION, et que donc les next, last et autres redo ne fonctionnent pas dans ce cas.

    Par contre tu peux te débrouiller autrement. Pour next :

    do {{
    next if ...;
    ...
    }} while CONDITION;

    note la paire de {} incluse dans le do {}. next te fait sortir du block dans lequel il est, donc de cette paire là {}, et tu continues juste avant le } final du do {}, prêt pour tester la CONDITION du while.

    ou pour last :

    LOOP: {
    do {
    last if ...;
    ...
    } while CONDITION;
    }

    Là c'est plus simple à comprendre. last (sans label) te fait sortir du premier bloc, ici c'est celui nommé LOOP: {}. do {} n'est pas considéré comme un bloc, mais plutôt comme une EXPRESSION.

    Tout est dans la doc

    Max.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. un petit problème d'algo
    Par supertramp dans le forum Algorithmes et structures de données
    Réponses: 22
    Dernier message: 12/10/2004, 20h13
  2. Petit problème de décimales !
    Par ridan dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/09/2004, 21h24
  3. Réponses: 17
    Dernier message: 13/07/2004, 20h37
  4. petit problème premier plan, arrière plan
    Par gros bob dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/04/2004, 12h00
  5. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo