Uma classificação rápida elegante em Perl com inspiração em Haskell

Então, se você leu meu artigo anterior , sou totalmente favorável a aprender muitas coisas e buscar inspiração em muitos lugares.

Tenho aprendido um haskell e cheguei a esta parte do livro onde há uma implementação de classificação rápida de haskell.

quicksort :: (Ord a) => [a] -> [a]  
quicksort
[] = []
quicksort
(x:xs) =
let smallerSorted = quicksort [a | a <- xs, a <= x]
biggerSorted
= quicksort [a | a <- xs, a > x]
in smallerSorted ++ [x] ++ biggerSorted

Observe como a implementação está literalmente dizendo a você o que está fazendo.

> If I get an empty list return an empty list
> if I have a list
>>> take the first element.
| get items smaller than first element THEN sort these
| get items larger than first element THEN sort these
| return
sorted smaller items
+ first element + sorted larger items

Eu queria capturar a mesma ideia e sentimento em perl, e assim fiz, é assim que parece:

Ok, não tenho ideia de por que @xs fica estranho aqui . Veja o código como essência aqui .

sub sort_
{
my @xs = @_;
if(scalar(@xs) == 0) {return ();}
my @lesser = sort_(grep { $_ < $xs[0] } @xs );
my @greater = sort_(grep { $_ > $xs[0] } @xs );
return (@lesser, $xs[0], @greater);
}

Uso:

my @items = (101, 1,90,10,4,2,100);
say
join ",", sort_ @items; # 1,2,4,10,90,100,101