---
name: "Apache::RegistryLoader"
section: "3pm"
platform: "linux"
package: "libapache-mod-perl"
version: "1.29.0.4-4.1+etch1"
release: "Debian 4.0 (Etch)"
platforms: ["linux"]
url: "https://new.carta.tech/Apache::RegistryLoader"
---

# Apache::RegistryLoader(3pm)

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** `"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)
