_  _   ,_
/^\/^\-/ @D
~(________/ PERL.LT
|L |L
L L
Straipsniai  Funkcijos 
Funkcijos/redo - pradėti ciklą nuo pradžių
  • redo LABEL
  • 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.

algirdas@perl.lt 2005.04.11 - $dabar