sub merge { my ($f, $s, @r) = @_; push @r => shift @{$$f [0] < $$s [0] ? $f : $s} while @$f && @$s; (@r, @$f, @$s); } sub merge_sort; sub merge_sort { @_ <= 1 ? @_ : merge [merge_sort @_ [0 .. @_ / 2 - 1]], [merge_sort @_ [@_ / 2 .. $#_]] }