No offense, but it sounds like you haven't looked very closely at Class::DBI. The accessors don't have to match the columns, and mine often don't. You can add logic to your classes, and I usually do. It keeps object state while you edit the data and manages writing it back out to the databases, as well as doing lazy-loading, adding validation routines, etc. It's pretty much exactly like a DAO.