If you're concerned about performance, Benchmark it, not against some production host. What works for me under my current environment, may not be the best way for you under your constraints. A general solution to monitoring availability of hosts is non-trivial. And make sure you're not optimizing prematurely.
The last time I was mucking about with ping, it was on a large scale internal network and I ended up using SNMP gets instead. If you usage needs to be efficient, you might want to look at Net::SNMP as well.