I pass my configuration into the CGI::Application object. Of course, that change to operating everything during BEGIN is somewhat unusual as well. The perl interpreter running the parent's code doesn't reach INIT, CHECK or the normal runtime until the ->run call has completed. I wonder if that would cause problems for anyone or if fatal errors would interact poorly since to perl, this is all during the code-parsing stage.
PerlMonks::Summoner -> new
(
TMPL_PATH => TEMPLATEROOT . 'PerlMonks_Summoner/',
PARAMS => {
encryption_key => ...,
url => ...,
dbh => undef,
change => undef,
dbi_dsn => 'dbi:Pg:dbname=perlmonks',
dbi_username => 'perlmonks',
dbi_password => '...', },
)->run;