sub _quicksort_t { return @_ unless @_ > 1; my $pivot = shift; ## partition the data into 2 parts and run the standard recursive algorithm ## on those two partitions in separate threads; return combined (joined) results my $t1 = asyncl sub{ quicksort( grep $_ < $pivot, @_ ) }, @_; my $t2 = asyncl sub{ quicksort( grep $_ >= $pivot, @_ ) }, @_; return ( $t1->join, $pivot, $t2->join ); } sub quicksort_t { return @_ unless @_ > 1; my $pivot = shift; ## Partition and thread to a thread helper function my $t1 = asyncl sub{ _quicksort_t( grep $_ < $pivot, @_ ) }, @_; my $t2 = asyncl sub{ _quicksort_t( grep $_ >= $pivot, @_ ) }, @_; return ( $t1->join, $pivot, $t2->join ); }