Jonathan Scott Duff writes: > On Wed, Nov 19, 2003 at 12:49:21PM -0800, Larry Wall wrote: > > 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 } > > } > > So ... the only way to get Damians semantics ... > > On Wed, Nov 19, 2003 at 08:01:40AM +1100, Damian Conway wrote: > > * vector control structures like C<loop>, C<while>, and C<for> in > > a list context return a list of the values of the last statement > > each iteration evaluated; > > > > * vector control structures like C<loop>, C<while>, and C<for> in > > a scalar context return an integer indicating the number of > > times their block was iterated. > > ... is to surround the control structure with a gather { ... } ??
No. gather{} is a generator (assuming nothing about its name or existance whatsoever). It runs some code, gathering up each pick() (same assumption) into a list, and returning that. If I interpret Larry correctly, Damian's semantics won't be going in. The way you get each of those is: my @list = gather { while $cond { pick do {...} } } And similarly for each of the other constructs. But Damian's semantics will work for simple conditionals, it seems. One wonders what the return value of a loop will be: my $what = do { while $cond {...} } Luke > It seems like "gather" or whatever should be some sort of modifier to > for/loop/while/until > > @foo = for : gather @a -> $x { ... } > if for : gather @a -> $x { ... } < 3 { ... } # ick! > if : gather for : gather @a -> $x { ... } < 3 { ... } # ick!**2 > for : gather @a -> $x { ... } or @results; > for : gather @a -> $x { ... } or do { ... } > > Okay, so the syntax isn't great. I'm just brainstorming. > > Having a gather block just feels wrong to me. It's weird to say that > control structure X only has a result when placed inside of a special > block. But maybe it *needs* to be weird. > > > 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) } > > } > > Hmm. > > @foo = for :gather,default(@results) @a -> $x { ... } > > -Scott > -- > Jonathan Scott Duff > [EMAIL PROTECTED]