It would be better if you showed more complete code. Don't show passwords, but do flesh out what you have for:
$self->dbh_config($data_source, $username, $auth, \%attr);
That's from CGI::Application::Plugin::DBH's SYNOPSIS. You should show us your equivalent code.
Unfortunately, "just hangs" does not help us at all. I'd be surprised if there's no feedback at all about this. The absence of "200 OK" in the log output could be telling; please show us what's there (error.log, access.log, others).
Just a wild guess, but do check that you're not interpolating strings with special characters; e.g. pass$word.
The sprintf() function is useful in many cases, not just number formatting. See its documentation for a huge number of examples.