Piers posed the following puzzles: > @ary[0] = foo() # scalar
Yes. > @ary[1,2] = foo() # list context Yes. > @bar = 1; > @ary[@bar] = foo() # ? probably list or maybe scalar... List. With an explicit array as index, it's definitely a (one-element) slice. > @bar = (1,2); > @ary[@bar] = foo() # list? List. Same reason as previous. > @bar is constant = 1; > @ary[@bar] = foo() # We know at compile time there's only one thing in > # @bar. Does that mean foo() is in a scalar context > # now? List. Same reason as previous. > sub a_scalar { 1 }; > sub an_array { my @a = (1,2) } > sub context { wantarray ? (1,2) : 1 } sub context { want 'LIST' ?? (1,2) :: 1 } > @ary[a_scalar()] = foo() # ??? > @ary[an_array()] = foo() # ??? > @ary[context()] = foo() # ??? I'm not sure Larry has decided how this will be handled yet. If forced to guess, I'd guess the square brackets will impose scalar context on &a_scalar, &an_array, and &context, making the indexing operation a scalar look-up (not a slice), so each call to &foo is in scalar context. > At around this point, Dan was heard to say 'Mommy, make the bad man go > away!' Please don't scare the new Perl serf, Piers. > And, just for laughs: > > $ref = [1,2]; > @ary[$ref] = foo(); # probably a syntax error Unlikely. Scalar context, I'd expect (though Larry would have to confirm that). Damian