http://qs321.pair.com?node_id=582109


in reply to Re: last in a do while loop
in thread last in a do while loop

LOOP: { charlie; last LOOP if bob; david; redo LOOP if alice; }

A more concise syntax:

for (;;) { charlie; last if bob; david; last if !alice; }

It's my understanding that for (;;) { ... } can be replaced simply with loop { ... } in Perl6.

Replies are listed 'Best First'.
Re^3: last in a do while loop
by Jenda (Abbot) on Nov 03, 2006 at 20:50 UTC

      There's one significant advantage (from the reader's point of view) to while (1):

      • The meaning of while (1) is straightforward to deduce by someone who has never seen it, whereas the meaning of for (;;) is not.

      There are minor advantages (from the reader's point of view) to for (;;):

      • for (;;) has no expression to read, while while (1) does. (Note the addition of loop { ... } in Perl 6.)

      • "(;;)" can be read as "ever". "For ever" sounds better than "while one", "while true" or "while ever" (and requires no mental backtracking). "While not done" would be a great reading, but translating "1" to "not done" is a stretch.

      • for (;;) is visually distinctive from naturally ending loops.

      Update: hum... while (!0) could be read as "while not done"...

        Well, we could write while (not 'done') { ... }, but even though it would work and it would read fine, I think it would actually confuse people ;-)

        Update: while ('not done') { ... } of course. Sorry. I guess I should not be here at 1am. Thanks Sidhekin.

        Don't know if/when this will get looked at but I was unaware that a do-while loop didn't operate like a loop so last doesn't "work" with it. My problem is I have a structure similar to this. I'm guessing what I need is a way to keep reading the next line in the file, but at times I had problems assigning $aVar = <AFile>. Would a similar loop construct with $aVar = <Afile> being the final statement in that bare loop work?
        while(<AFile>) { if(found keyword) do{ process keyword and next few lines if(done processing){ last } }while(<AFile>); # do some post processing } # Continue processing after this in the same file