Re: Quickcheck of context of index expressions
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 Good. : @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. Larry
Re: Quickcheck of context of index expressions
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. Larry
Re: Quickcheck of context of index expressions
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. I think allowing unknown LHS index expression to default to scalar context is a bit more useful here. Since we have: @x[0] = @y;# scalar @x[0,] = @y;# list This may be more intuitive: @x[idx()] = @y;# scalar @x[idx(),] = @y;# list Than this: @x[+idx()] = @y;# scalar @x[idx()] = @y;# list But I don't really feel strongly one way or another, as long as it is specced down. :) Thanks, /Autrijus/ pgpQVFZNKCIEY.pgp Description: PGP signature
Re: Quickcheck of context of index expressions
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. Thanks, /Autrijus/ pgp0HZ5CR3H7H.pgp Description: PGP signature
Re: Quickcheck of context of index expressions
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? Thanks, /Autrijus/ pgpWPjfDiyNHu.pgp Description: PGP signature