last and next

Contents | Up | Prev | Next

# 8.1. last and next

Within the `while` and `for` loops one can use two special commands, called `last` and `next`. `last` terminates a loop prematurely while `next` skips the rest of the remaining loop body, skips to the loop condition and if it is met, executes the loop again.

By default, `last` and `next` operate on the most innermost loop. However, the loop to which they relate can be controlled by labeling the requested loop and specifying this label as a parameter to `last` or `next`.

The following example is a rewrite of the "All A's" program using `last`:

    print "Please enter a string:\n";
    $string=<>;
    chomp($string);

    # The first position in the string.
    $position = 0;

    while ($position < length($string))
    {
        $char = lc(substr($string, $position, 1));

        if ($char ne "a")
        {
            last;
        }

        # Increment the position
        $position++;
    }

    # If the position is the end of the string it means the loop was not
    # terminated prematurally, so an "a" was not encountered.
    if ($position == length($string))
    {
        print "The string you entered is all A's!\n";
    }
    else
    {
        print "At least one of the characters in the string " .
            "you entered is not \"A\".\n";
    }

This program prints a left-tilted pyramide:

    print "Please enter the length of the pyramide:\n";
    $size = <>;
    chomp($size);

    ROW_LOOP: for $row (1 .. $size)
    {
        for $column (1 .. ($size+1))
        {
            if ($column > $row)
            {
                print "\n";
                next ROW_LOOP;
            }
            print "#";
        }
    }

"ROW_LOOP" is the label for the outer loop, and it can be seen that `next` uses it as a parameter. All in all, `next` and `last` are sometimes very convenient (but don't tell it to Edsgar W. Dijkstra's face!), so you will see them being used often.

Contents | Up | Prev | Next