lib::Apache::RegUissetrryCLoonatdreirb(u3t)ed
NNAAMMEE
Apache::RegistryLoader - Compile Apache::Registry scripts
at server startup
SSYYNNOOPPSSIISS
#in PerlScript
use Apache::RegistryLoader ();
my $r = Apache::RegistryLoader->new;
$r->handler($uri, $filename);
DDEESSCCRRIIPPTTIIOONN
This modules allows compilation of AAppaacchhee::::RReeggiissttrryy
scripts at server startup. The script's handler routine
is compiled by the parent server, of which children get a
copy. The Apache::RegistryLoader handler method takes
arguments of uri and the filename. 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 trans routine was not
defined, the loader will try using the uurrii relative to
SSeerrvveerrRRoooott. 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 new method with a trans
function to translate the uri to filename.
The following example will pre-load all files ending with
.pl in the ppeerrll--ssccrriippttss// directory relative to SSeerrvveerrRRoooott.
The example code assumes the Location URI /perl is an
AAlliiaass 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");
}
}
AAUUTTHHOORR
Doug MacEachern
SSEEEE AALLSSOO
Apache::Registry(3), Apache(3), mod_perl(3)