Introduction to mod_perl (part 2): mod_perl Quickstart - The "mod_perl rules" Apache Perl Module (Page 5 of 8 )
mod_perl is about running both scripts and handlers. Although I have started to present mod_perl using scripts because it's easier if you have written CGI scripts before, the more advanced use of mod_perl is about writing handlers. But have no fear. As you will see in a moment, writing handlers is almost as easy as writing scripts.
To create a mod_perl handler module, all I have to do is to wrap the code I have used for the script into a handler subroutine, add a statement to return the status to the server when the subroutine has successfully completed, and append a package declaration at the top of the code.
Just as with scripts you can use either the CGI API you are probably used to (save the following as Rules1.pm):
package ModPerl::Rules1;
use Apache::Constants qw(:common);
sub handler{
print "Content-type: text/plain\r\n\r\n";
print "mod_perl rules!\n";
return OK;
}
1; # satisfy require()
or the Apache Perl API that allows you to interact more intimately with
the Apache core by providing an API unavailable under regular Perl. Of course in the simple example that I show, using any of the approaches is fine, but when you need to use the API, this version of the code should be used (save as Rules2.pm):
package ModPerl::Rules2;
use Apache::Constants qw(:common);
sub handler{
my $r = shift;
$r->send_http_header('text/plain');
print "mod_perl rules!\n";
return OK;
}
1; # satisfy require()
Create a directory called ModPerl under one of the directories in @INC
(e.g. /usr/lib/perl5/site_perl/5.005), and put Rules1.pm Rules2.pm into it, the files should include the code from the above examples.
To find out what the @INC directories are, execute:
% perl -le 'print join "\n", @INC'
On my machine it reports:
/usr/lib/perl5/5.6.1/i386-linux
/usr/lib/perl5/5.6.1/usr/lib/perl5/site_perl/5.6.1/i386-linux/usr/lib/perl5/site_perl/5.6.1/usr/lib/perl5/site_perl.
Now add the following snippet to httpd.conf to configure mod_perl to execute the ModPerl::Rules::handler subroutine whenever a request to mod_perl_rules1 is made:
PerlModule ModPerl::Rules1
<Location /mod_perl_rules1>
SetHandler perl-script
PerlHandler ModPerl::Rules1
</Location>
Now you can issue a request
to:
http://localhost/mod_perl_rules1
and just as with our mod_perl_rules.pl scripts you will see:
mod_perl rules!
as the response.
To test the second module ModPerl::Rules2 add the
sameconfiguration, while replacing all 1's with 2's:
PerlModule ModPerl::Rules2<Location /mod_perl_rules2>
SetHandler perl-script
PerlHandler
ModPerl::Rules2</Location>[code]
And
to test use the URI:
http://localhost/mod_perl_rules2
Next: Is This All I Need to Know About mod_perl? >>
More Perl Articles
More By Stas Bekman