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

J'essaie d'utiliser une instruction break dans une boucle for, mais comme j'utilise aussi des sous-marins stricts dans mon code Perl, j'obtiens une erreur disant:

Bareword "break" non autorisé pendant "sous-marins stricts" en cours d'utilisation à ./final.pl ligne 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;
    }
}
262
demandé sur Peter Mortensen 2008-11-19 23:21:48

4 réponses

Oh, je l'ai trouvé. Vous utilisez {[2] dernière} au lieu de break

for my $entry (@array){
    if ($string eq "text"){
         last;
    }
}
383
répondu Zain Rizvi 2018-01-05 17:41:18

Données supplémentaires (au cas où vous auriez d'autres questions):

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

                    last FOO;  # --->
                                   # |
                 }                 # |
          }                        # |
       }                           # |
 } # <-------------------------------
167
répondu Kent Fredric 2014-03-16 20:28:21

Simplement last fonctionnerait ici:

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

Si vous avez des boucles imbriquées, alors last quittera 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. La même chose peut être faite dans n'importe quel nombre de boucles, et les étiquettes peuvent être fixées n'importe où.

14
répondu Kamal Nayan 2017-05-09 14:32:50

Sur une grande itération, j'aime utiliser des interruptions. Juste appuyez sur Ctrl + C pour quitter l':

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

while(!$exitflag) {
    # Do your stuff
}
3
répondu MortenB 2017-03-20 17:40:08