The Apache::Registry class is essentially a CGI environment emulator that allows many CGI scripts to run without modification under mod_perl.
Because there are many differences between CGI and the Apache API, Apache::Registry has to do a great deal of work to accomplish this sleight of hand. It loads the scripts in its designated directory, compiles them, and stores them persistently in a memory structure. Before Apache::Registry runs a script, mod_perl will set up the various CGI environment variables, provided PerlSetupEnv is configured to On, which is the default. When the PerlSendHeader directive is On, mod_perl monitors the text printed by the script, intercepts the HTTP header, and passes it through send_cgi_header(). It also arranges for STDIN to be read from the request object when the script attempts to process POST data. Apache::Registry also monitors the modification dates of the script files it is responsible for and reloads them if their timestamp indicates they have been changed more recently than when they were last compiled.
Despite its complexity, Apache::Registry is easy to set up. The standard configuration consists of an Alias directive and a <Location> section:
Alias /perl/ /home/www/perl <Location /perl> SetHandler perl-script PerlHandler Apache::Registry Options +ExecCGI # optional PerlSendHeader On </Location>
After restarting the server, you can place any (well, almost any) Perl CGI script into /home/www/perl (or the location ...