I haven't had any serious difficulties with mod_perl, but I do not use Apache::Registry or the like. If you do mod_perl, I would highly recommend one of the popular templating systems, like Mason or Template::whichever.
The general rules to avoid problems are:
use strict;
use warnings;
(no warnings 'uninitialized' may be convenient if you deal with a lot of nulls from a database.)
Keep global variables to a few obvious necessities, like $dbh and $session. These should be initialized by your templating system or your handler function, before your page logic even gets a chance to run.