Как выйти из цикла в Perl?

Я'пытаюсь использовать оператор break в цикле for, но поскольку я'также использую strict subs в своем коде Perl, я'получаю ошибку, говорящую:

Bareword "break" not allowed while "strict subs" используется в ./final.pl строка 154.

Есть ли обходной путь для этого (кроме отключения strict subs)?

Мой код отформатирован следующим образом:

for my $entry (@array){
    if ($string eq "text"){
         break;
    }
}
Комментарии к вопросу (1)
Решение

О, я нашел это. Вы используете last вместо break.

for my $entry (@array){
    if ($string eq "text"){
         last;
    }
}
Комментарии (4)

Дополнительные данные (если у вас возникнут вопросы):


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

                    last FOO;  # --->
                                   # |
                 }                 # |
          }                        # |
       }                           # |
 } # 
Комментарии (2)

Просто «last» будет работать здесь:

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

Если у вас есть вложенные петли, то last выйдет из самой внутренней части. Используйте метки в этом случае:

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

Учитывая, что last оператор заставит компилятор выходить из обоих циклов. То же самое можно сделать в любом количестве циклов, а метки можно исправить в любом месте.

Комментарии (0)

На большой итерации мне нравится использовать прерывания. Просто нажмите Ctrl + C для выхода:

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

while(!$exitflag) {
    # Do your stuff
}
Комментарии (2)