On Wed, Nov 19, 2003 at 09:12:01AM -0600, Jonathan Scott Duff wrote: : On Tue, Nov 18, 2003 at 09:36:31PM -0800, Larry Wall wrote: : > As for the original question that started this whole silly thread, : > control structures that return values should probably be considered : > some kind of generator, and have an explicit "yield"-like statement : > that is orthogonal to "last" and such. Such a generator would be : > explicitly marked, as with "do {...}" above, only different. The : > inside of such a generator after the loop is the natural place : > to say what happens if nothing in the loop "works". : : I don't understand ... Do you mean something like this? : : confer { : for @a -> $x { ... } || beget @results; : } : : where "confer" is the do-like marker and "beget" is the yield-like : statement. But why not this? : : for @a -> $x { ... } or do { ... } : : I need an example.
Sorry, I wasn't being very clear. It wouldn't be logically attached to the outside of the for, but to the inside of the "confer", or whatever: @foo = gather { for @a -> $x { pick $x if mumble($x) } DEFAULT { @results } } In which case you could also write: @foo = gather { DEFAULT { @results } for @a -> $x { pick $x if mumble($x) } } But it might be clearer to put it outside: @foo = gather { for @a -> $x { pick $x if mumble($x) } } or @results; On the other hand, putting the default up front is clearer if the block is long. Could even be something like: @foo = gather is default(@results) { for @a -> $x { pick $x if mumble($x) } } Larry