---
name: "ModPerl::PerlRun"
section: "3pm"
platform: "linux"
package: "libapache2-mod-perl2"
version: "2.0.13-2+b2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/ModPerl::PerlRun"
---

# ModPerl::PerlRun(3pm)

Run unaltered CGI scripts under mod\_perl

## NAME

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

## Synopsis

```
  # httpd.conf
  PerlModule ModPerl::PerlRun
  Alias /perl-run/ /home/httpd/perl/
  <Location /perl-run>
      SetHandler perl-script
      PerlResponseHandler ModPerl::PerlRun
      PerlOptions +ParseHeaders
      Options +ExecCGI
  </Location>
```

## Description

META: document that for now we don't **chdir()** into the script's dir, because it affects the whole process under threads. `"ModPerl::PerlRunPrefork"` should be used by those who run only under prefork MPM.

## Special Blocks

### "BEGIN" Blocks

When running under the `"ModPerl::PerlRun"` handler `"BEGIN"` blocks behave as follows:

- •

  `"BEGIN"` blocks defined in scripts running under the `"ModPerl::PerlRun"` handler are executed on each and every request.

- •

  `"BEGIN"` blocks defined in modules loaded from scripts running under `"ModPerl::PerlRun"` (and which weren't already loaded prior to the request) are executed on each and every request only if those modules declare no package. If a package is declared `"BEGIN"` blocks will be run only the first time each module is loaded, since those modules don't get reloaded on subsequent requests.

See also `"BEGIN"` blocks in mod\_perl handlers.

### "CHECK" and "INIT" Blocks

Same as normal mod\_perl handlers.

### "END" Blocks

Same as `"ModPerl::Registry"`.

## Authors

Doug MacEachern

Stas Bekman

## See Also

`"ModPerl::RegistryCooker"` and `"ModPerl::Registry"`.
