我想在for
循環使用break
聲明,但因爲我也在我的Perl代碼使用嚴格的潛艇,我得到一個錯誤說:如何擺脫Perl中的循環?
裸詞「破發」不準而 「嚴格潛艇」在使用中./final.pl 線154
有沒有一種解決方法(除了禁用嚴格的潛艇)?
我的代碼的格式如下:
for my $entry (@array){
if ($string eq "text"){
break;
}
}
我想在for
循環使用break
聲明,但因爲我也在我的Perl代碼使用嚴格的潛艇,我得到一個錯誤說:如何擺脫Perl中的循環?
裸詞「破發」不準而 「嚴格潛艇」在使用中./final.pl 線154
有沒有一種解決方法(除了禁用嚴格的潛艇)?
我的代碼的格式如下:
for my $entry (@array){
if ($string eq "text"){
break;
}
}
雖然這僅僅是一種語義上的差異,除了與「下一個」命令的文本一致性之外,它並不等於其他很多。 – 2010-07-08 20:14:58
更不用說,'break'是一個實驗性的關鍵詞,在> 5.010的權利?所以你可能會得到一個非法的外部給定的塊錯誤,而不是你應該使用它。唯一可行的方法是,如果你在給定塊內使用了一個while循環,然後中斷,這在理論上會按照你想要的方式工作(並且只有)給定的塊只有while循環,並且假設你只是給了一些標量變量......但爲什麼所有這些工作只是爲了休息一下,它是(非常)糟糕的形式,更不用說了(blah!)只是說,它的「可能」不是一個好東西想法並不是你可能認爲這是 – osirisgothra 2014-09-01 15:50:29
由於某種原因,我完全無法記住這個關鍵字'最後'。總是以Google搜索'perl break loop'結尾:( – Thupten 2015-09-08 04:50:02
附加數據(如果您有更多的問題):
FOO: {
for my $i (@listone){
for my $j (@listtwo){
if (cond($i,$j)){
last FOO; # --->
# |
} # |
} # |
} # |
} # <-------------------------------
在我喜歡使用中斷大迭代。只需按下Ctrl鍵+Ç到退出:
my $exitflag = 0;
$SIG{INT} = sub { $exitflag=1 };
while(!$exitflag) {
# Do your stuff
}
只需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
聲明將使編譯器從兩個環路出來。在任何數量的循環中都可以做到這一點,並且標籤可以在任何地方固定。
如果你沒有「嚴格的潛艇」,你會得到一個運行時錯誤,而不是找到一個名爲「break」的子。 – 2008-11-19 20:43:16