in reply to Catching what DBI throws

It sounds like you're on the right track. What about taking it a step further and separating all database access code into a separate module? That way, you only have to catch the errors in a few places (select, update, delete), and your exception handling is much easier.