home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam  


9.3 The redo Statement

The third way you can jump around in a looping block is with redo . This construct causes a jump to the beginning of the current block (without reevaluating the control expression), like so:



while (

somecondition

) {
        # redo comes here
        

something

;
        

something

;
        

something

;
        if (

somecondition

) {
            

somestuff

;
            

somestuff

;
            redo;
        }
        

morething

;
        

morething

;
        

morething

;
}

Once again, the if block doesn't count - just the looping blocks.

With redo , last , and a naked block, you can make an infinite loop that exits out of the middle, like so:

{
        

startstuff

;
        

startstuff

;
        

startstuff

;
        if (

somecondition

) {
            last;
        }
        

laterstuff

;
        

laterstuff

;
        

laterstuff

;
        redo;
}

This logic would be appropriate for a while -like loop that needed to have some part of the loop executed as initialization before the first test. (In a later section entitled "Expression Modifiers ," we'll show you how to write that if statement with fewer punctuation characters.)