So, after all our discussions, my thinking regarding alternate blocks for loops is now running like this:
1. It would definitely be useful to be able to catch the failure of a block to iterate. 2. This ability should be available for all three types of block: C<while>, C<for>, and C<loop>. 3. The "obvious" syntax: while condition() { ... } else { ... } is fraught with difficulty because C<else> is already so closely bound to C<if> in the community consciousness. 4. Using C<else> also encourages the expectation of C<elsif>, C<elswhile>, C<elsunless>, C<elsinore>, etc. But I don't believe the language can comfortably bear the weight of such expectations. Or such keywords. 5. My preferred option would be to restrict the "alternative block" to only being a simple block (i.e. no cascading), and to introduce it with some other keyword. 6. C<otherwise> would seem to fit the bill rather nicely. So, I guess if Larry were to ask my opinion, I'd suggest that we allow: while condition() { ... } otherwise { ... } and: for @list -> $next { ... } otherwise { ... } and: loop ($i=0; i<$max; i+=2) { ... } otherwise { ... } I now confidently await Larry's coming up with an entirely different solution ;-) Damian