web-dev-qa-db-de.com

Wie breche ich in Perl aus einer Schleife aus?

Ich versuche, eine break -Anweisung in einer for -Schleife zu verwenden, aber da ich in meinem Perl-Code auch strenge Subs verwende, erhalte ich die Fehlermeldung:

Bareword "break" ist nicht erlaubt, wenn "strict subs" in der ./final.pl Zeile 154 verwendet wird.

Gibt es eine Problemumgehung dafür (abgesehen von der Deaktivierung von strengen Subs)?

Mein Code ist wie folgt formatiert:

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

Oh, ich habe es gefunden. Sie verwenden last anstelle von break

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

Zusätzliche Daten (falls Sie weitere Fragen haben):

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

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

Einfach last würde hier funktionieren:

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

Wenn Sie verschachtelte Schleifen haben, verlässt last das Innerste. Verwenden Sie in diesem Fall Labels:

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

Bei gegebener last -Anweisung wird der Compiler veranlasst, aus beiden Schleifen herauszukommen. Das Gleiche kann in einer beliebigen Anzahl von Schleifen durchgeführt werden, und Beschriftungen können überall befestigt werden.

17
Kamal Nayan

Bei einer großen Iteration verwende ich gerne Interrupts. Drücken Sie einfach Ctrl + C beenden:

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

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