I'm mostly using
DBIx-Class these days, which was started because of
Class-DBIs shortcomings. One of the newer features I love most is the SQL-Translator support. You can create DDL statements out of a schema design in Perl. But it should be also possible to create your schema classes by pointing it to an existing schema, tho I haven't used that yet. A big pro is the active community and the easyness of patch- and feature-submission.
I haven't met a join I couldn't form in native DBIC, rather than using SQL directly, but you might want to ask #dbix-class on irc.perl.org for your specific needs. Extending your classes is also rather easy by overloading specific methods (new, insert, update, delete, etc.)
Ordinary morality is for ordinary people. -- Aleister Crowley