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 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 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 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 perl-scripts/ directory relative to ServerRoot. The example code assumes the Location URI /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)
SEE ALSO
Apache::Registry(3), Apache(3), mod_perl(3)