sub list_sort { my @vals = @_; # trivial case: 0 or 1 items in the list return @vals if @vals < 2; my $split_val = shift @vals; my @smaller = grep { $_ < $split_val } @vals; my @larger = grep { $_ > $split_val } @vals; return list_sort(@smaller), list_sort(@larger); }