Вопрос

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

  

Bareword "перерыв" пока не разрешено   " строгие подписки " используется на ./final.pl   строка 154.

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

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

for my $entry (@array){
    if ($string eq "text"){
         break;
    }
}
Это было полезно?

Решение

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

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

Другие советы

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

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

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

Просто последний будет работать здесь:

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

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

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

while(!$exitflag) {
    # Do your stuff
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top