[Chapter 9] 9.3 The redo Statement
Author: Randal L. Schwartz, Erik Olson & Tom Christiansen
Date: 1999-07-02T01:34:10Z

#

| Chapter 9 Miscellaneous Control Structures |

## 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.)

9.2 The next Statement |  | 9.4 Labeled Blocks