According to Damian:
> 
> Colin exemplifies:
>  
>    > $a = 1;
>    > @a = (1);
>    > @b = (1, 2, 3);
>    > @c = (4, 5, 6);
>    > 
>    > $a = $a ^+ @b;
>    > @a = @a ^+ @b;
>    > 
>    > print $a;  # 7
> 
> No. It will (probably) print: 4. Because:
> 
> 
>    > print @a;  # 7 or 2?
> 
> Prints: 2 2 3. Because:
>        $a = ($a,$a,$a) ^+ @b;
>        $a = (1,1,1) ^+ (1,2,3);
>        $a = (2,3,4);
>        $a = 4;

and

>   > print @a;  
>        @a = @a ^+ @b;
>        @a = (1,undef,undef) ^+ (1,2,3);        # or (1,0,0) ^+ (1,2,3)
>        @a = (2,2,3);

prints 2 2 3

So, does that mean:

$a = ($a) ^+ @b;
print $a; # prints: 3
        
# $a = ($a,undef,undef) ^+ @b  ...

My new confusion has to do with why does the hyperoperator expand $a to
($a,$a,$a), but (1) to (1,undef,undef)? Oh, it's because hyper-ops
expand an arg if it is short on *dimensions* and not *elements*.
(1) gets expanded to (1,undef,undef) by auto-vivification of list
elements, and not by action of the hyper-op, correct?

Trying to get the hang of parallelisms,
-C.

Reply via email to