I got one suggestion: add another layer of abstraction.
Put all your DBI stuff into a subclass, like AuthorWeb::DBI. I personally, would reccomend DBI::DWIW
, but a straight DBI subclass is fine.
You ought to add the magical AUTOLOAD => \&catch_my_exception, to the run_modes.
You also ought to set tmpl_path in your .cgi
my $app = AuthorWeb->new(
tmpl_path => 'tmpl',
Also, saying stuff like
use CGI::Application qw( 2.4 );
use CGI qw( 2.7 );
might not hurt (i find this to be the most neglected general programming practice amongst folk, cause it works on their system).
Since you're using XML and XSLT, you might wanna migrate to AxKit.