On Tue, Apr 26, 2005 at 03:33:44AM +0800, Autrijus Tang wrote: > Another quick check on expression context for indexed expressions. > Please sanity-check the return value of want() below:
On Tue, Apr 26, 2005 at 03:33:44AM +0800, Autrijus Tang wrote:
: Another quick check on expression context for indexed expressions. : Please sanity-check the return value of want() below: : : @x[0] = want(); # scalar context
On Tue, Apr 26, 2005 at 03:56:37AM +0800, Autrijus Tang wrote:
: On Tue, Apr 26, 2005 at 03:33:44AM +0800, Autrijus Tang wrote: : > Another quick check on expression context for indexed expressions. : > Please sanity-check the return value of want() below: : > : > @x[0] = want(); # scalar context : > @x[want()] = $_; # scalar context : > @x[want()] = @_; # scalar context : > @x[0,] = want(); # list context : > @x[want(),] = $_; # list context : > @x[want(),] = @_; # list context : > $_ = @x[want()]; # scalar context : > @_ = @x[want()]; # list context : : Oh, and under the S02 rules above (the index expression inherits : outer context on RHS), Pugs currently does this: : : $_ = %x{ 1, 2 } : --- reduces to --- : $_ = %x{ [1, 2] } : --- reduces to --- : $_ = %x{ "1 2" } : : Which is, well, very surprising. Where did I get wrong?
I think S02 is probably wrong. It should be unknown/list context.
Sorry for the short answers, but I'm in Russia behind a flakey network connection, which is probably going away entirely at any moment (the network connection, not Russia.) I can clarify more next week when I get back.
On Fri, Apr 29, 2005 at 06:22:57AM -0700, Larry Wall wrote: > : @x[want()] = $_; # scalar context > : @x[want()] = @_; # scalar context
> Maybe "unknown" context, which defaults to list.
> : @x[0,] = want(); # list context > : @x[want(),] = $_; # list context > : @x[want(),] = @_; # list context > : $_ = @x[want()]; # scalar context > : @_ = @x[want()]; # list context
> No, I think they're all list context.
Okay. r2478 has them reverted to the original form, which inspects the declared return type of want() to see if it is a subtype of Scalar; if it is, then it is taken as scalar context; otherwise (or if multiple multisubs are possible), it defaults to list context.