#! perl -slw use strict; use threads; sub grandCentral { my @t = map threads->create( $_ ), @_; return map $_->join, @t; } sub runme { my $arg = shift; sleep $arg * 2; return $arg; } sub a{ runme( 1 ) } sub b{ runme( 2 ) } sub c{ runme( 3 ) } sub d{ runme( 4 ) } my $start = time; my @results = grandCentral( \&a, \&b, \&c, \&d ); print for @results; printf "Took %d seconds\n", time - $start; __END__ C:\test>centralDispatch.pl 1 2 3 4 Took 8 seconds