Ответ 1
О, я нашел его. Вы используете last
вместо break
for my $entry (@array){
if ($string eq "text"){
last;
}
}
Я пытаюсь использовать оператор break
в цикле for
, но поскольку я также использую строгие подмножества в своем коде Perl, я получаю сообщение об ошибке:
Запрет "разбить" "строгие субтитры" в использовании на. /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; # --->
# |
} # |
} # |
} # |
} # <-------------------------------
Просто 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
заставит компилятор выйти из обоих циклов. То же самое можно сделать в любом количестве циклов, а метки можно фиксировать где угодно.
На большой итерации мне нравится использовать прерывания. Просто нажмите Ctrl + C, чтобы выйти:
my $exitflag = 0;
$SIG{INT} = sub { $exitflag=1 };
while(!$exitflag) {
# Do your stuff
}