rayzit has asked for the wisdom of the Perl Monks concerning the following question:

Hi, i have to port a mod_perl application to apache2. It is but written rather cgi-style - the code is not packed in handlers. I need to retrieve $r that in all documentation is taken as "shift" from within a handler. In the application it is retrieved like that:
$r=Apache->request;
$rq=Apache::Request->new($r);
Unfortunately there is no method Apache2->request; But probably sth similar? Apache2::Request->new method needs this object... Would be great if you tell me, thanks

Replies are listed 'Best First'.
Re: missing $r porting to mod_perl2
by perrin (Chancellor) on Jan 09, 2008 at 16:47 UTC
    You should get $r passed in if you're using ModPerl::Registry or writing a handler. You can also access it by calling Apache2::RequestUtil->request. There's a handy porting guide on the mod_perl site.
      Thanks for your reply. I tried the Apache2::RequestUtil->request and it didnt work as expected. The old version didnt use Apache::Registry but Apache::PerlRun. But maybe it is a problem with the OS X Leopard, I dont know. It does not execute the scripts yet and doesnt deliver error messages in the error logs either. The browser offers me to download the file instead...

      Here a piece of httpd.conf
      ########################################################
      Alias /webnet/ "/Library/WebServer/Documents/WebNet/cgi/"
      PerlModule Apache2::compat
      PerlModule ModPerl::PerlRun
      PerlModule CGI::Session DBI DBD::PrimeBase Apache2::Request Apache2::Cookie Net::FTP Net::SMTP DirHandle MIME::Lite IO::All File::stat

      <Location /webnet>
      SetHandler perl-script
      PerlResponseHandler ModPerl::PerlRun
      PerlHandler Apache::PerlRun
      Options +ExecCGI
      </Location>
      ##########################################################

      I guess I'll better setup an apache2 on a linux box as I'm more used to that. But mod_perl and mod_perl2 do not coexist on the same box, do they? Or am i missing sth else? Help and ideas are highly appreciated...
        I tried the Apache2::RequestUtil->request and it didnt work as expected.
        It should work. What happened?
        The old version didnt use Apache::Registry but Apache::PerlRun.
        That doesn't matter.
        The browser offers me to download the file instead...
        That usually means you aren't sending a header.
        <Location /webnet> SetHandler perl-script PerlResponseHandler ModPerl::PerlRun PerlHandler Apache::PerlRun Options +ExecCGI </Location>
        Your PerlHandler setting should be removed. You may also want to PerlOptions +ParseHeaders
        But mod_perl and mod_perl2 do not coexist on the same box, do they?
        Sure they do. If you want to be especially careful, you can install a separate perl to use with mod_perl 2 so that none of the modules get installed in the main perl tree.