We also need to consider the "dimension" of referentiality. I can see three levels here. Given
@a.mung the .mung could return A) a modified @a (treat @a as mutable) B) a new array (treat @a as immutable) C) a remapped array whose elements refer back to @a's elements Currently .rotate is defined as A, but I could easily switch it to B, so you'd have to write @a.=rotate; to rotate in place. If we did that, then we could conceivably set things up with more PDLish C semantics so that @a .= mung # A semantics @b = @a.mung # B semantics @b := @a.mung # C semantics This implies, however, that the copy semantics of = are sufficiently clever to snapshot all the referenced values of @a before clobbering @a in the case of either: @a .= mung @a = @a.mung But list assignment really ought to be doing that in any case. Maybe .push is really sugar for .=append, and unshift is really sugar for .=prepend. Larry