---
name: "Plack::App::CGIBin"
section: "3pm"
platform: "linux"
package: "libplack-perl"
version: "1.0051-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Plack::App::CGIBin"
---

# Plack::App::CGIBin(3pm)

cgi-bin replacement for Plack servers

## NAME

Plack::App::CGIBin - cgi-bin replacement for Plack servers

## SYNOPSIS

```
  use Plack::App::CGIBin;
  use Plack::Builder;
  my $app = Plack::App::CGIBin->new(root => "/path/to/cgi-bin")->to_app;
  builder {
      mount "/cgi-bin" => $app;
  };
  # Or from the command line
  plackup -MPlack::App::CGIBin -e 'Plack::App::CGIBin->new(root => "/path/to/cgi-bin")->to_app'
```

## DESCRIPTION

Plack::App::CGIBin allows you to load CGI scripts from a directory and convert them into a PSGI application.

This would give you the extreme easiness when you have bunch of old CGI scripts that is loaded using *cgi-bin* of Apache web server.

## HOW IT WORKS

This application checks if a given file path is a perl script and if so, uses CGI::Compile to compile a CGI script into a sub (like ModPerl::Registry) and then run it as a persistent application using CGI::Emulate::PSGI.

If the given file is not a perl script, it executes the script just like a normal CGI script with fork & exec. This is like a normal web server mode and no performance benefit is achieved.

The default mechanism to determine if a given file is a Perl script is as follows:

- •

  Check if the filename ends with `".pl"`. If yes, it is a Perl script.

- •

  Open the file and see if the shebang (first line of the file) contains the word `"perl"` (like `"#!/usr/bin/perl"`). If yes, it is a Perl script.

You can customize this behavior by passing `"exec_cb"` callback, which takes a file path to its first argument.

For example, if your perl-based CGI script uses lots of global variables and such and are not ready to run on a persistent environment, you can do:

```
  my $app = Plack::App::CGIBin->new(
      root => "/path/to/cgi-bin",
      exec_cb => sub { 1 },
  )->to_app;
```

to always force the execute option for any files.

## AUTHOR

Tatsuhiko Miyagawa

## SEE ALSO

Plack::App::File CGI::Emulate::PSGI CGI::Compile Plack::App::WrapCGI

See also Plack::App::WrapCGI if you compile one CGI script into a PSGI application without serving CGI scripts from a directory, to remove overhead of filesystem lookups, etc.
