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.
Its neither, its a matter scoping :)
If this is your mod_perl application
sub handler {
my $app = MyCGIAppSubclass->new;
$app->run;
}
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
But if your mod_perl application is
my $app = MyCGIAppSubclass->new;
sub handler {
$app->run;
}
Then init/setup is only done once, and only run is done upon every request.
So nothing changed, this are working as designed, as they always have.
See Understanding the application flow of CGI::Application and CGI::Application::Loop
See also the source of CGI::Application::FastCGI package CGI::Application::FastCGI;
use strict;
use base qw (CGI::Application);
use FCGI;
use CGI;
our $VERSION = '0.02';
sub run {
my $self = shift;
my $request = FCGI::Request();
$self->fastcgi($request);
while ($request->Accept >= 0) {
$self->reset_query;
$self->SUPER::run;
}
}
sub reset_query {
my $self = shift;
CGI::_reset_globals();
$self->{__QUERY_OBJ} = $self->cgiapp_get_query;
}
sub fastcgi {
my $self = shift;
@_ ? $self->{__FASTCGI} = shift : $self->{__FASTCGI};
}
1;
If you want to run CGI::Application as mod_perl handlers as I've shown above with persistent object, you will have to reset query, just like CGI::Application::FastCGI |