On Tue, Jul 28, 2009 at 10:42:01PM +0200, Moritz Lenz wrote: : I guess when I initialize @a[0] = [] it's the same, because then @a[0] : is still a scalar, right?
No, as in Perl 5 [] still produces a scalar object that hides the arrayness from list context, so it's like: $b = []; @a[0] = $b; It doesn't unwrap the scalar object to see what's in it. : Only when I wrote @a[0] := [] I'd get all items in @a[0]. That binds the Array in place of the current @a[0] container, just as $b = []; @a[0] := $b; would. Just as $obj and @$obj default differently in list context, so do [] and (). To put it another way, Array and Hash objects don't naturally interpolate into list context without some help from @ or % syntax (or equivalent method call). If I say: @a = 42, [1,2,3], { foo => 1, bar => 2, baz => 3 }; then @a will always end up with exactly 3 elements, just as if I'd said: $a = 42; $b = [1,2,3]; $c = { foo => 1, bar => 2, baz => 3 }; @a = $a, $b, $c; Larry