use IPC::Exe; ## exports bg() & exe() my $parallel_handle = bg sub { my ($payload) = @_; ## Run one after another, but parallel wrt to parent process ## &{ exe 'convert.sh', $payload, @ARGV }; die "Couldn't launch: $!/$?" if $! = $? >> 8; &{ exe 'load_db.sh', $payload }; warn "Couldn't launch: $!/$?" if $! = $? >> 8; }; my $payload = "ha ha!"; print "Background PID: ", $parallel_handle->($payload), "\n";