Recipe 11.15 Speeding Up Perl CGI Programs with mod_perl

Problem

You have existing functional Perl CGI programs and want them to run faster.

Solution

If you have the mod_perl module installed, you can configure it to run your Perl CGI programs, instead of running mod_cgi. This gives you a big performance boost, without having to modify your CGI code.

There are two slightly different ways to do this.

For Apache 1.3 and mod_perl Version 1:

Alias /cgi-perl/ /usr/local/apache/cgi-bin/ <Location /cgi-perl>     Options ExecCGI     SetHandler perl-script     PerlHandler Apache::PerlRun     PerlSendHeader On </Location> Alias /perl/ /usr/local/apache/cgi-bin/ <Location /perl>     Options ExecCGI     SetHandler perl-script     PerlHandler Apache::Registry     PerlSendHeader On </Location>

For Apache 2.0 and mod_perl Version 2, the syntax changes slightly:

PerlModule ModPerl::PerlRun Alias /cgi-perl/ /usr/local/apache2/cgi-bin/ <Location /cgi-perl>     SetHandler perl-script     PerlResponseHandler ModPerl::PerlRun     Options +ExecCGI </Location> PerlModule ModPerl::Registry Alias /perl/ /usr/local/apache2/cgi-bin/ <Location /perl>     SetHandler perl-script     PerlResponseHandler ModPerl::Registry     Options +ExecCGI </Location>

Discussion

By using mod_perl's CGI modes, you can improve the performance of existing CGI programs without modifying the CGI code itself in any way. Given the previous configuration sections, a CGI program that was previously accessed via the URL http://www.example.com/cgi-bin/program.cgi will now be accessed via the URL http://www.example.com/cgi-perl/program.cgi to run it in PerlRun mode or via the URL http://www.example.com/perl/program.cgi to run it in Registry mode.

The primary difference between PerlRun and Registry is that, in Registry, the program code itself is cached after compilation, whereas in PerlRun mode, it is not. While this means that code run under Registry is faster than that executed under PerlRun, it also means that a greater degree of code quality is required. In particular, global variables and other careless coding practices may cause memory leaks, which, if run in cached mode, could eventually cause the server to run out of available memory.

When writing Perl CGI code to run under mod_perl, and, in general, when writing any Perl code, it is recommended that you place the following two lines at the top of each program file, following the #! line:

use strict; use warnings;

Code that runs without error messages, with these two lines in them, runs without problems under Registry.

strict is not available prior to Perl 5, and warnings is not available prior to Perl 5.6. In versions of Perl earlier than 5.6, you can get behavior similar to warnings by using the -w flag to Perl. This is accomplished by adding it to the #! line of your Perl programs:

#!/usr/bin/perl -w

See Also

  • Programming Perl, Third Edition, by Larry Wall, Tom Christiansen, and Jon Orwant (O'Reilly)



Apache Cookbook
Apache Cookbook: Solutions and Examples for Apache Administrators
ISBN: 0596529945
EAN: 2147483647
Year: 2006
Pages: 215

Similar book on Amazon

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net