Sto provando a usare un’istruzione break
in un ciclo for
, ma visto che sto usando anche sottotitoli rigidi nel mio codice Perl, sto ricevendo un errore che dice:
Bareword “break” non consentito mentre “strict subs” in uso alla riga ./final.pl 154.
C’è una soluzione per questo (oltre a disabilitare i sottotitoli rigidi)?
Il mio codice è formattato come segue:
for my $entry (@array){ if ($string eq "text"){ break; } }
Oh, l’ho trovato. Usi l’ ultimo invece della rottura
for my $entry (@array){ if ($string eq "text"){ last; } }
Dati aggiuntivi (nel caso abbiate più domande):
FOO: { for my $i ( @listone ){ for my $j ( @listtwo ){ if ( cond( $i,$j ) ){ last FOO; # ---> # | } # | } # | } # | } # <-------------------------------
Semplicemente potrebbe funzionare qui:
for my $entry (@array){ if ($string eq "text"){ last; } }
Se hai cicli annidati, l’ last
uscirà dall’interno. Utilizza 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’ last
dichiarazione, il compilatore uscirà da entrambi i loop. Lo stesso può essere fatto in qualsiasi numero di loop e le etichette possono essere fissate ovunque.
In una grande iterazione mi piace usare gli interrupt. Basta premere Ctrl + C per uscire:
my $exitflag = 0; $SIG{INT} = sub { $exitflag=1 }; while(!$exitflag) { # Do your stuff }