Domanda

Sto cercando di usare un'istruzione break in un ciclo for , ma poiché sto anche usando sottotitoli rigidi nel mio codice Perl, sto ottenendo un errore che dice:

  

Bareword " break " non consentito mentre   "Sottoscrizioni rigide" in uso presso ./final.pl   linea 154.

Esiste una soluzione alternativa per questo (oltre a disabilitare i sottotitoli severi)?

Il mio codice è formattato come segue:

for my $entry (@array){
    if ($string eq "text"){
         break;
    }
}
È stato utile?

Soluzione

Oh, l'ho trovato. Si utilizza last anziché break

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

Altri suggerimenti

Dati aggiuntivi (in caso di ulteriori domande):

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

                    last FOO;  # --->
                                   # |
                 }                 # |
          }                        # |
       }                           # |
 } # <-------------------------------

Semplicemente last funzionerebbe qui:

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

Se hai cicli nidificati, last uscirà dal più interno. Usa le etichette in questo caso:

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

Data l'istruzione last farà uscire il compilatore da entrambi i loop. Lo stesso può essere fatto in qualsiasi numero di loop e le etichette possono essere riparate ovunque.

In una grande iterazione mi piace usare gli interrupt. Premi Ctrl + C per uscire:

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

while(!$exitflag) {
    # Do your stuff
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top