Pregunta

Estoy tratando de usar una instrucción break en un bucle for , pero como también estoy usando subs estrictos en mi código Perl, obtengo un error al decir:

  

Bareword " break " no permitido mientras   " estrictos subs " en uso en ./final.pl   línea 154.

¿Hay alguna solución para esto (además de deshabilitar los subs estrictos)?

Mi código tiene el siguiente formato:

for my $entry (@array){
    if ($string eq "text"){
         break;
    }
}
¿Fue útil?

Solución

Oh, lo encontré. Utiliza last en lugar de break

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

Otros consejos

Datos adicionales (en caso de que tenga más preguntas):

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

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

Simplemente last funcionaría aquí:

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

Si tiene bucles anidados, entonces last saldrá de lo más interno. Use etiquetas en este caso:

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

dada last hará que el compilador salga de ambos bucles. Lo mismo se puede hacer en cualquier número de bucles, y las etiquetas se pueden arreglar en cualquier lugar.

En una iteración grande me gusta usar interrupciones. Simplemente presione Ctrl + C para salir:

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

while(!$exitflag) {
    # Do your stuff
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top