Personally I'm a huge fan of
Net::SSH::Expect and
Parallel::ForkManager. Instead of sending a Perl script to the host and executing it, you could have a script that connects to each host and executes commands remotely (where the SSH object comes into play) and then return the results. Parallel ForkManager lets you do that on multiple hosts at once.
One caveat, obviously environments differ, but I found out that in my environment, setting max_procs (the maximum number of processes) to more than 20 saturated our LDAP server and started getting 'cannot connect' messages. Just some food for thought if you go that way.