I've been asked to do similar things in the past for PgSQL, so you may try the results of my efforts - DBIx::AutoReconnect, or it's bloatier relative, DBIx::Roles::AutoReconnect. These modules detect DBI errors by transparently wrapping all method calls in eval, making them restartable, and check the connection status by calling $dbh->ping() ( vs $dbh->DBDEAD you were using ). I didn't test the logic on Sybase, but I'd like to know if it was useful there.
Comment on Re: DBD::Sybase - How to reconnect through err_handler
That is definitely something to take a look at :), atleast for new development. Merging it into legacy code may be a bit trickier (politically and technically).