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.