use threads; ... my $t1 = async{ system '...'; }; my $t2 = async{ system '...'; }; my $t3 = async{ system '...'; }; my $t4 = async{ system '...'; }; $_->join for $t1, $t2, $t3, $t4; #### $_->join for map async( sub{ system shift; }, $_ ), 'command1 args', 'command2 args', 'command3 args', 'command4 args';