redo コマンドは条件を評価することなくループブロックを再び実行する。
continue ブロックがもしあっても、実行されない。
LABEL を省略すると、最も内側の閉じたループを用いる。
このコマンドは通常、
入力された内容について自分自身に嘘をつくようなプログラムで用いる。
# 単純な Pascal コメント除去プログラム
# (注意: 文字列中に {} がないと仮定している)
line: while (<STDIN>) {
while (s|({.*}.*){.*}|$1 |) {}
s|{.*}| |;
if (s|{.*| |) {
$front = $_;
while (<STDIN>) {
if (/}/) { # コメントの終わり?
s|^|$front{|;
redo line;
}
}
}
print;
}