Nobody suggested using connect_cached, where the documentations says :
The cached database handle is replaced with a new
connection if it has been disconnected or if the "ping" method fails
Would that not solve OP's problem?
Well, Apache::DBI should already be doing a ping and a successful re-connect if needed. If that isn't working with Apache::DBI, there's no reason to think it will work better with connect_cached. Also, Apache::DBI has some additional things in it (avoiding caching connections during startup, protection from dangling transactions at the end of a request) that might be needed.