man Apache::RegistryLoader () - Compile Apache::Registry scripts at server startup
NAME
Apache::RegistryLoader - Compile Apache::Registry scripts at server startup
SYNOPSIS
#in PerlScript
use Apache::RegistryLoader ();
my $r = Apache::RegistryLoader->new;
$r->handler($uri, $filename);
$r->handler($uri, $filename, $virtual_hostname);
DESCRIPTION
This modules allows compilation of Apache::Registry scripts at server startup. The script's handler routine is compiled by the parent server, of which children get a copy. The Apache::RegistryLoader CWhandler method takes arguments of CWuri and the CWfilename. URI to filename translation normally doesn't happen until HTTP request time, so we're forced to roll our own translation.
If filename is omitted and a CWtrans routine was not defined, the loader will try using the uri relative to ServerRoot. Example:
#in httpd.conf ServerRoot /opt/www/apache Alias /perl/ /opt/www/apache/perl
#in PerlScript use Apache::RegistryLoader ();
#/opt/www/apache/perl/test.pl #is the script loaded from disk here: Apache::RegistryLoader->new->handler("/perl/test.pl");
To make the loader smarter about the uri->filename translation, you may provide the CWnew method with a CWtrans function to translate the uri to filename.
The following example will pre-load all files ending with CW.pl in the perl-scripts/ directory relative to ServerRoot. The example code assumes the Location URI CW/perl is an Alias to this directory.
{ use Cwd (); use Apache::RegistryLoader (); use DirHandle (); use strict;
my $dir = Apache->server_root_relative("perl-scripts/");
my $rl = Apache::RegistryLoader->new(trans => sub { my $uri = shift; $uri =~ s:^/perl/:/perl-scripts/:; return Apache->server_root_relative($uri); });
my $dh = DirHandle->new($dir) or die $!;
for my $file ($dh->read) { next unless $file =~ /\.pl$/; $rl->handler("/perl/$file"); } }
AUTHORS
Doug MacEachern
Stas Bekman (Rewrote the handler() to report and handle all the possible erroneous conditions)