私はbreak
ループ内でfor
ステートメントを使用しようとしていますが、私のPerlコードでも厳密なsubsを使用しているので、次のようなエラーが表示されます。
./final.plの154行目で "strict subs"が使用されている間は、ベアワード "break"は使用できません。
(厳密な潜水艦を無効にする以外に)これのための対応策がありますか?
私のコードは次のようにフォーマットされています。
for my $entry (@array){
if ($string eq "text"){
break;
}
}
追加データ(もっと質問がある場合):
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
}