Apologies for trying to resuscitate this old horse, but a new idea occurred to me.
Back in October I suggested that $a ^+= @b would act like reduce, but in discussion it was decided that it would act like length, by the interpretation: $a ^+= @b $a = $a ^+ @b $a = ($a, $a, $a, ...) ^+ @b $a = ($a+$b[0], $a+$b[1], ...) $a = (a list in scalar context ) $a = length(@b) I now pose the question: Is ^+= a "hyper assignment operator" or an "assignment hyper operator"? An "assignment hyper operator" would be interpreted as above, or with two arrays as: @a ^+= @b @a = @a ^+ @b @a = ($a[0] + $b[0], $a[1] + $b[1], ... ) A "hyper assignment operator" would be interpreted like this (doing the "hyper" part first): @a ^+= @b $a[0] += $b[0], $a[1] += $b[1], ... $a[0] = $a[0] + $b[0], $a[1] = $a[1] + $b[1], ... With two arrays the method is different, but the end result is the same. (One might be more efficient than the other, but I won't speculate on that here.) But with a scalar involved the method and the result is different. $a = length(@b) is the "assignment hyper operator" interpretation. The "hyper assignment operator" interpretation looks like this: $a ^+= @b ($a, $a, $a, ...) ^+= @b $a += $b[0], $a += $b[1], $a += $b[2], ... ....which is DWIM: $a = reduce(@b), assuming, of course that $a is initially zero. For @a = $b, the end result also appears to be the same. "assignment hyper operator" @a ^+= $b @a = @a ^+ $b @a = @a ^+ ($b, $b, $b, ...) @a = ($a[0]+$b, $a[1]+$b, $a[2]+$b, ...) "hyper assignment operator" @a ^+= $b @a ^+= ($b, $b, $b, ...) $a[0] += $b, $a[1] += $b, $a[2] += $b, ... ~ John Williams