sub australianNationalUniversity { use AustralianNationalUniversity; AustralianNationalUniversity::search( $maxHits, %searchTerms ); my @results = AustralianNationalUniversity::getResults(); lock(@searchResults); push ( @searchResults, @results ); } #### # at the beginning of your code: use GenericSearch; # and then just ONE sub for all threads sub get_search { my $group = shift; GenericSearch::search($group, $maxHits, %searchTerms ); my @results = GenericSearch::getResults(); lock(@searchResults); push ( @searchResults, @results ); } #### my @search = grep /^_/, param(); # now remove the underscores $_ = substr($_,1) for @search; # now create the threads; my @thread = map { threads->new(sub {get_search($_)})}, @search; # and finally, join them when done $_->join for @thread;