#!/usr/bin/perl -w use strict; my $work={ "host1" => { userid=>"user1",args => [ "thing1" , "thing2, "red thing" , "blue thing" ] } ) "host2" => { userid=>"user2",args=> [ ] } "host3" => { userid => "user3", args=>[] } #etcetera }; foreach $host(keys %$work){ my $uid=$work->{$host}->{userid}; my @args=@{$work->{$host}->{args}}; if ( fork() == 0 ) { my $cmdline=sprintf("ssh %s\@$s /tmp/start %s",$uid,$host,join(" ",@args)); system($cmdline) } } wait() ; Wait here until the children exit exit(0);