---
name: "Apache::PerlRun"
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::PerlRun"
---

# Apache::PerlRun(3pm)

Run unaltered CGI scripts under mod\_perl

## NAME

Apache::PerlRun - Run unaltered CGI scripts under mod\_perl

## SYNOPSIS

```
 #in httpd.conf
```

```
 Alias /cgi-perl/ /perl/apache/scripts/
 PerlModule Apache::PerlRun
```

```
 <Location /cgi-perl>
 SetHandler perl-script
 PerlHandler Apache::PerlRun
 Options +ExecCGI
 #optional
 PerlSendHeader On
 ...
 </Location>
```

## DESCRIPTION

This module's **handler** emulates the CGI environment, allowing programmers to write scripts that run under CGI or mod\_perl without change.  Unlike **Apache::Registry**, the **Apache::PerlRun** handler does not cache the script inside of a subroutine.  Scripts will be "compiled" every request.  After the script has run, it's namespace is flushed of all variables and subroutines.

The **Apache::Registry** handler is much faster than **Apache::PerlRun**.  However, **Apache::PerlRun** is much faster than CGI as the fork is still avoided and scripts can use modules which have been pre-loaded at server startup time.  This module is meant for "Dirty" CGI Perl scripts which relied on the single request lifetime of CGI and cannot run under **Apache::Registry** without cleanup.

## CAVEATS

If your scripts still have problems running under the *Apache::PerlRun* handler, the *PerlRunOnce* option can be used so that the process running the script will be shutdown.  Add this to your httpd.conf:

```
 <Location ...>
 PerlSetVar PerlRunOnce On
 ...
 </Location>
```

## SEE ALSO

[*perl*(1)](/perl/1.md), *mod\_perl*(3), *Apache::Registry*(3)

## AUTHOR

Doug MacEachern
