sub mergesort { @_ < 2 and return @_; my @low = mergesort( @_[0 .. $#_ / 2] ); my @high = mergesort( @_[$#_ / 2 + 1 .. $#_] ); map !@high || @low && $low[0] <= $high[0] ? shift @low : shift @high, 1..@_; }