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