You have existing functional Perl CGI programs and want them to run faster.
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>
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.