Actually a flow control statement rather than a function. If there is a
continue BLOCK attached to a BLOCK (typically in a while or
foreach), it is always executed just before the conditional is about to
be evaluated again, just like the third part of a for loop in C. Thus
it can be used to increment a loop variable, even when the loop has been
continued via the next statement (which is similar to the C continue
statement).
last, next, or redo may appear within a continue
block. last and redo will behave as if they had been executed within
the main block. So will next, but since it will execute a continue
block, it may be more entertaining.
while (EXPR) {
### redo always comes here
do_something;
} continue {
### next always comes here
do_something_else;
# then back the top to re-check EXPR
}
### last always comes here
Omitting the continue section is semantically equivalent to using an
empty one, logically enough. In that case, next goes directly back
to check the condition at the top of the loop.