Hi,
Larry Wall wrote:
> On Fri, Sep 09, 2005 at 04:40:11PM +0200, Juerd wrote:
> : Ingo Blechschmidt skribis 2005-09-09 15:12 (+0200):
> : > I agree that the comma operator creates an anonymous array, but I
> : > do not agree that it behaves as if it has [] around it.
> : >
> : > Creating an anonymous array does not require creating new
> : > containers --
> :
> : So comma in scalar context creates an array of aliases? That would
> : be a welcome difference.
>
> It might at that. Though doubtless there is a downside I'm not seeing
> yet...
($foo, $bar) = ($grtz, $baka);
say $foo, $bar;
# <newbie>Hm, $foo and $bar are changed to $grtz respectively
# $baka... So assigning to a list really assigns to the
# elements of the list! So the comma operator constructs
# a list of aliases, neat!
# Now let's see whether the following works as well:
($foo, $bar)[0] = $grtz;
# Ok, no error message.
say $foo;
# ...but why was $foo not changed?
# I thought the comma operator constructs a list of
# aliases...?</newbie>
Also note that the comma operator creating a list of aliases does *not*
affect regular [...] or assignment to an array:
(1,2,3)[1]++; # "Can't modify constant item 2"
my @a = (1,2,3); # @a's STORE method recognized that the RHS
# is an aggregate, so it created new containers.
@a[1]++; # No error
say @a[1]; # 3
[1,2,3][1]++; # No error, &circumfix:<[ ]> assigned to an
# array internally, so new containers were
# created.
--Ingo
--
Linux, the choice of a GNU | Row, row, row your bits, gently down
generation on a dual AMD | the stream...
Athlon! |