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

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

Запрет "разбить" "строгие субтитры" в использовании на. /final.pl строка 154.

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

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

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

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

Просто 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 заставит компилятор выйти из обоих циклов. То же самое можно сделать в любом количестве циклов, а метки можно фиксировать где угодно.

Ответ 4

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

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

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