redo
redo
komanda perleidžia ciklo bloką be sąlygos patikrinimo.continue
blokas, jei toks egzistuoja, nėra vykdomas. Jei LABEL praleistas, komanda skiriama pačiam giliausiam uždaromam blokui. Ši komanda normaliai naudojama programų, kurios mėgsta sau meluoti apie tik ką atliktą įvestį:
# supaprastintas Paskalio komentarų panaikintojas
# (warning: assumes no { or } in strings)
LINE: while (<STDIN>) {
while (s|({.*}.*){.*}|$1 |) {}
s|{.*}| |;
if (s|{.*| |) {
$front = $_;
while (<STDIN>) {
if (/}/) { # end of comment?
s|^|$front\{|;
redo LINE;
}
}
}
print;
}
redo
negali būti naudojamas perkartoti bloką, kuris gražina reikšmę, kaip kad eval {}
, sub {}
arba do {}
, o taip pat neturėtų būti vartojamas išeiti iš grep() arba map() operacijos.
Įsidėmėkite, kad pats blokas yra semantiškai identiškas ciklui, vykdomam vieną kartą. Tad redo
tokiame bloke evektyviai pavers jį į ciklinę konstrukciją.
Taip pat žr. continue supratimui kaip last
, next
ir redo
veikia.