in reply to do while loop isn't a really loop

next, last and redo can only be used to leave or restart a loop block. You can't use them in blockless loops like EXPR while EXPR; and EXPR for EXPR;. Remember, do is just another function.

next, last and redo can't be used to leave or restart a blockless while loop (EXPR while EXPR;). Remember, do is just another function.

Update: My initial explanation was incorrect. They work with blockless foreach and counting loops (EXPR for EXPR;).

>perl -wle"print('x'),last while 1; print('y');" x Can't "last" outside a loop block at -e line 1. >perl -wle"print('x'),last for qw(a b c); print('y');" x y
>perl -wle"do { print('x'); last } while 1; print('y');" x Can't "last" outside a loop block at -e line 1. >perl -wle"do { print('x'); last } for qw(a b c); print('y');" x y

That's rather inconsistent.

Replies are listed 'Best First'.
Re^2: do while loop isn't a really loop?
by appleii (Novice) on Nov 12, 2009 at 03:44 UTC
    It's a perl's bug?

      That redo, next and last control blockless for loops? perlsyn could be clearer.

      That redo, next and last don't control blockless while loops? perlsyn is extremely clear on that, but the documentation for redo, next and last could be clearer.