I know this is an old thread, but I ran into an issue under mod_perl where cgiapp_init was being called on every request, not just at server (or process) start. I did some searches and found this: http://old.nabble.com/cgi%3A%3Aapplication%3A%3Adispatch-and-modperl-td29916199.html
Summary: they're both called on every request. Not sure if it's a change since this thread was posted but the information here doesn't seem to be correct.

cgiapp_init is going to get called with every request, obviously, because you're creating a new object each time -- this is typical Apache::Registry/ModPerl::Registry, running unmodified .cgi's under mod_perl

Well, apparently, (I guesstimate) since (some time around) CGI::Application 3.x it is no longer recommended to reuse CGI::Application objects, no longer recommended to call run repeatedly, as Bug #72909 for CGI-Application: persistence issues says CGI::Application is designed to have a new object created on each request. which is an assumption various ::Plugins and extensions make, so its best to play along and not reuse an object and not ->run ->run ->run

When putting a smiley right before a closing parenthesis, do you:

Use two parentheses: (Like this: :) )
Use one parenthesis: (Like this: :)
Reverse direction of the smiley: (Like this: (: )
Use angle/square brackets instead of parentheses
Use C-style commenting to set the smiley off from the closing parenthesis
Make the smiley a dunce: (:>
I disapprove of emoticons
Other