Jak ograniczyć maksymalną liczbę równoległych wątków w perlu

Mam program (Perl), który uruchamia ogromną liczbę wątków (każdy odpowiedzialny za tworzenie grafiki na podstawie przetwarzania danych). Każdy wątek, z którego zaczynam korzystać:

my @threads //list to store threads that have been launched

push @threads,threads->create(\mySubName,params...);

Wątki odpalają się poprawnie, ale po pewnym czasie, po otwarciu kilku z nich, Perl ulega awarii (zakładam, że jest związany z pamięcią?). Więc moim rozwiązaniem jest ograniczenie liczby wątków, które otwieram na raz, wybrałem 15. I chcę dodać subprzed każdym wierszem, aby sprawdzić, czy jest w porządku odpalić następny wątek lub spać, gdy czekam na koniec. W ten sposób próbowałem to zrobić.

sub checkThreads{
    my $addThread = 0;
    until($addThread){
        my $totalThreads = 0;
        foreach my $task (@threads){
            if($task->is_running()){$totalThreads++;}
        }
        if($totalThreads <= 15 ){
            print "Ok to add new thread, carry on!\n";
            $addthread = 1;
        }else{
            print "Waiting for $totalThreads threads to fire next one...\n";
            sleep 2;
        }
    }
}

Więc za każdym razem, gdy chcę utworzyć nowy wątek, zadzwonię

&checkThreads;

A to z pewnością zadbałoby o opóźnienie, gdy czekam na oczyszczenie niektórych wątków. Problem polega na tym, że kiedy dzwonię do tego sub, w momencie, gdy trafię na linię, w której sprawdzam:

$task->is_running()

Program kończy działanie i przestaje działać bez żadnego błędu lub ostrzeżenia. Chcę tylko, aby sub, który liczy działające wątki, by je ograniczyć.

Jak mogę skutecznie wykonać tę liczbę?

Inne rzeczy, które próbowałem, oceniają następującą linię:

scalar(threads->list());

Ale to daje mi dziwną wartość, jak to jest niezmącone odniesienie, które według mnie wygląda:

threads=SCALAR(0x80fea8c)

questionAnswers(3)

yourAnswerToTheQuestion