On 23 Sep 2002, Simon Cozens wrote:
> [EMAIL PROTECTED] (Luke Palmer) writes:
> > Since we now have an explicit flattening operator (unary *), there's no
> > need to differentiate between a "real" list and a reference to one.
>
> What context does "push" impute on its operands?
>
> If
> push @a, [1,2,3,4];
> and
> push @a, 1,2,3,4;
> are going to be the same, you'll have real problems. I don't fancy doing
> push @a, [[1,2,3,4]];
>
> And if you get around that by special-casing push to take an list of scalar
> contexts, then, well, urgh.
Aha! Kudos, Simon, this (alongside Aaron's message) was a stumper. But I
think I've got it!
push @a: [1,2,3,4];
pushes an array ref onto @a.
push @a: *[1,2,3,4];
pushes 1, 2, 3, and 4 onto @a (as it would without the * and []).
[$a, $b] = [$b, $a];
is a syntax error (assignment to non-lvalue).
[$a, $b] ^= [$b, $a];
Assigns $a to $b and $b to $a. C<my> would return a list of its
declarees, so:
my($a, $b) ^= [1, 2];
would work. Finally,
[1,2,3][1] == 2
means
[1,2,3].[1] == 2
which is fine.
Luke