I noticed another long-standing bug (I think the final result is wrong): % foo=(1 2) % bar=3 % print -l ${foo+$bar$foo} 31 2 % print -l ${foo+$foo$bar} 1 23 This is a case of the arrayness of the result being lost because the non-array, $bar, came after the array, $foo. Attached is a patch that fixes this by having multsub() only honor mult_isarr as a flag that indicates that a single-item result was really an array, not that a multi-item result should not be an array. ..wayne..