2011-05-11 80 views
3

我剛開始學習Perl腳本語言,並有一個問題。Perl編程:繼續塊

在Perl中,什麼是具有whiledo while循環continue塊工作的合乎邏輯的理由,但不能與for循環?

+2

在Perl中13年,我從未編程過一個繼續塊。主要是因爲可以在循環結尾放置相同的語句。它基本上就像一個「下一個」的行爲。但是,當我不想在迭代中再做任何事情時,我只「接下來」。編寫for(; cond(); iteration())...並更容易獲得相同的行爲。 – Axeman 2011-05-11 12:44:18

+0

我同意,Axeman。因爲肯定更可取,並且具有相同的行爲。謝謝。 – madCode 2011-05-11 14:38:09

回答

2

可以使用continue塊隨處可見它是有道理的:與whileuntilforeach循環,以及「基本」塊 - 這是不是另一份聲明中的一部分塊。請注意,對於列表迭代構造,您可以使用關鍵字for而不是foreach,當然,在這種情況下,您可以使用continue塊。

正如其他人所說,for (;;)循環已經有一個continue部分 - 你會首先執行哪一個?

continue塊也因爲語法上,這是一個非常不同的事情(do是一個內置函數取塊作爲它的參數,而while部分是一個語句修飾詞)不do { ... } while ...工作。我想你可以使用它們的雙捲曲結構(基本塊內部參數塊),如果你真的必須:

do { 
    { 
     ...; 
     continue if $bad; 
     ...; 
    } 
    continue { 
     ...; # clean up 
    } 
} while $more; 
4

我懷疑continue塊沒有在for循環使用,因爲它是完全等同於for環路的第三表達(遞增/遞減等)

例如。下面的代碼塊大多當量:

for ($i = 0; $i < 10; $i++) 
{ 
} 

$i = 0; 
while ($i < 10) 
{ 
} 
continue 
{ 
    $i++; 
} 
+0

感謝:-)我現在明白了! – madCode 2011-05-11 14:39:16

+0

我們不能簡單地做:$ i = 0; while($ i <10) { $ i ++; }我在這裏錯過了什麼嗎? – jackOfAll 2018-02-12 04:39:47

7

http://perldoc.perl.org/functions/continue.html

如果 存在附加到 一個BLOCK(通常在一段時間或 的foreach一個繼續BLOCK ),在條件即將被 再次評估之前,總是僅執行 ,就像的第三部分 for循環在C.

意味着在for循環中,第三個參數是繼續表達,例如for (initialization; condition; continue),所以不需要。在另一方面,如果在foreach風格使用for,如:

for (0 .. 10) { 
    print "$i\n"; 
} continue { $i++ } 

這是可以接受的。

+0

真棒@TLP!我完全明白了。謝謝! – madCode 2011-05-11 14:38:40

+0

該語法是正確的,但在此上下文語法中被解釋爲foreach語句。如果你會使用for和foreach作爲foreach會更好。你會被很多錯誤阻止。 – Znik 2016-02-05 11:41:37

+0

@Znik不可能犯錯誤,因爲'for'和'foreach'實際上是相同函數的別名。 – TLP 2016-02-05 14:54:10