web-dev-qa-db-fra.com

Comment puis-je sortir d'une boucle en Perl?

J'essaie d'utiliser une instruction break dans une boucle for, mais comme j'utilise également des sous-programmes stricts dans mon code Perl, le message d'erreur suivant s'affiche:

Le mot clé "break" n'est pas autorisé tant que "subs strict" est utilisé à la ligne ./final.pl 154.

Existe-t-il une solution de contournement pour cela (en plus de désactiver les sous-marins stricts)?

Mon code est formaté comme suit:

for my $entry (@array){
    if ($string eq "text"){
         break;
    }
}
285
Zain Rizvi

Oh, je l'ai trouvé. Vous utilisez dernier au lieu de pause

for my $entry (@array){
    if ($string eq "text"){
         last;
    }
}
421
Zain Rizvi

Données supplémentaires (si vous avez d'autres questions):

FOO: {
       for my $i ( @listone ){
          for my $j ( @listtwo ){
                 if ( cond( $i,$j ) ){

                    last FOO;  # --->
                                   # |
                 }                 # |
          }                        # |
       }                           # |
 } # <-------------------------------
173
Kent Fredric

Simplement last fonctionnerait ici:

for my $entry (@array){
    if ($string eq "text"){
         last;
    }
}

Si vous avez des boucles imbriquées, alors last sortira de l'intérieur. Utilisez des étiquettes dans ce cas:

LBL_SCORE: {
       for my $entry1 ( @array1 ){
          for my $entry2 ( @array2 ){
                 if ( $entry1 eq $entry2 ){   # or any condition
                    last LBL_SCORE;
                 }
          }
       }
 }

Étant donné l'instruction last, le compilateur sortira des deux boucles. Même chose peut être fait dans n'importe quel nombre de boucles, et les étiquettes peuvent être fixées n'importe où.

17
Kamal Nayan

Sur une grande itération, j'aime utiliser des interruptions. Appuyez simplement sur Ctrl + C quitter:

my $exitflag = 0;
$SIG{INT} = sub { $exitflag=1 };

while(!$exitflag) {
    # Do your stuff
}
5
MortenB