redo LABEL
redo EXPR
redo

redo 命令會重新啟動迴圈區塊,而不會再次評估條件。如果有的話,continue 區塊不會執行。如果省略 LABEL,命令會指到最內層的封閉迴圈。redo EXPR 形式在 Perl 5.18.0 開始提供,允許在執行階段計算標籤名稱,其他方面與 redo LABEL 相同。想要欺騙自己剛輸入什麼的程式通常會使用這個命令

# a simpleminded Pascal comment stripper
# (warning: assumes no { or } in strings)
LINE: while (<STDIN>) {
    while (s|({.*}.*){.*}|$1 |) {}
    s|{.*}| |;
    if (s|{.*| |) {
        my $front = $_;
        while (<STDIN>) {
            if (/}/) {  # end of comment?
                s|^|$front\{|;
                redo LINE;
            }
        }
    }
    print;
}

redo 無法傳回通常會傳回值的區塊的值,例如 eval {}sub {}do {}。它會執行流程控制行為,排除任何傳回值。不應使用它來離開 grepmap 執行。

請注意,區塊本身在語意上與執行一次的迴圈相同。因此,此類區塊內的 redo 會有效地將其轉換為迴圈結構。

另請參閱 continue,以了解 lastnextredo 的運作方式。

與大多數命名運算子不同,它的優先順序與賦值相同。它也不受「看起來像函數」規則的約束,因此 redo ("foo")."bar" 會導致「bar」成為 redo 參數的一部分。