Ingo Blechschmidt skribis 2005-09-09 11:59 (+0000):
> > > > \(@array,) is [ @array ], NOT map { \$_ } @array 
> > > I'm not sure of the []s, remember &postcirumfix:<[ ]> creates *new* 
> > > containers: 
> > That was the point. 
> > >     [EMAIL PROTECTED] = $bar; 
> > >     (@array,)[0] = $bar; 
> > AFAIK, these are the same thing, because the left side of [0] is in 
> > Array context, which is a scalar context, in which comma creates a new 
> > anonymous array ref. 
> To prevent misconceptions: You think that both 
>     [EMAIL PROTECTED]  = $bar;  # and 
>     (@array,)[0] = $bar; 
> change @array[0] to $bar, right? 

No, neither does.

[EMAIL PROTECTED] = $bar fills a new array with the elements of @array, and then
overwrites the first. The array is then discarded.

(@array,)[0] = $bar does the same, IIRC, because the LHS of .[0] is
object and thus scalar context, possibly specifically Array context, and
the comma operator then behaves as if it has [] around it: it creates an
anonymous array. Again, it's just the elements of @array that are used.

Now, (@array)[0] = $bar does assign to @array[0].

I think the comma operator in scalar context should not create arrays,
because that is wildly confusing for most people, and a dangerous trap
even for those who do grok it. We already have [] for creating anonymous
arrays, and here a second WTDI isn't buying us anything. Especially the
apparent similarity in the different (@array) and (@array,) is something
we should try to avoid.

>     (my $arrayref = [1,2,3])[1] = 42; 

[1, 42, 3]. With () for grouping, not lists, and [] working on
references as well as the original, you're assigning to $arrayref[1],
not the nonexistent second element of the nonexistent list.

>     sub *postcircumfix:<[ ]> ([EMAIL PROTECTED]) { 

Do postfix list operators exist in Perl 6? AFAIK, the only thing that
can create a list is list context, and I'm very unsure how anything that
can handle both a list and an item can be postfix.
> And, presuming that I've understood you correctly

Which I don't think you have.


Reply via email to