NAME
    Mojolicious::Plugin::CGI - Run CGI script from Mojolicious

VERSION
    0.18

DESCRIPTION
    This plugin enable Mojolicious to run Perl CGI scripts. It does so by
    forking a new process with a modified environment and reads the STDOUT
    in a non-blocking manner.

SYNOPSIS
  Standard usage
      use Mojolicious::Lite;

      plugin CGI => [ '/script' => '/path/to/cgi/script.pl' ];
      plugin CGI => {
        route => '/mount/point',
        script => '/path/to/cgi/script.pl',
        env => {}, # default is \%ENV
        errlog => '/path/to/file.log', # path to where STDERR from cgi script goes
        before => sub { # called before setup and script start
          my $c = shift;
          # modify QUERY_STRING
          $c->req->url->query->param(a => 123);
        },
      };

      app->start;

  Support for semicolon in query string
      plugin CGI => { support_semicolon_in_query_string => 1 };

    The code above need to be added before other plugins or handler which
    use "url" in Mojo::Message::Request. It will inject a "before_dispatch"
    hook which saves the original QUERY_STRING, before it is split on "&" in
    Mojo::Parameters.

    This is an EXPERIMENTAL feature.

ATTRIBUTES
  env
    Holds a hash ref containing the environment variables that should be
    used when starting the CGI script. Defaults to %ENV when this module was
    loaded.

  ioloop
    Holds a Mojo::IOLoop object.

METHODS
  emulate_environment
      %env = $self->emulate_environment($c);

    Returns a hash which contains the environment variables which should be
    used by the CGI script.

    In addition to "env", these dynamic variables are set:

      CONTENT_LENGTH, CONTENT_TYPE, HTTP_COOKIE, HTTP_HOST, HTTP_REFERER,
      HTTP_USER_AGENT, HTTPS, PATH, PATH_INFO, QUERY_STRING, REMOTE_ADDR,
      REMOTE_HOST, REMOTE_PORT, REMOTE_USER, REQUEST_METHOD, SCRIPT_NAME,
      SERVER_PORT, SERVER_PROTOCOL.

    Additional static variables:

      GATEWAY_INTERFACE = "CGI/1.1"
      SERVER_ADMIN = $ENV{USER}
      SCRIPT_FILENAME = Script name given as argument to register.
      SERVER_NAME = Sys::Hostname::hostname()
      SERVER_SOFTWARE = "Mojolicious::Plugin::CGI"

  register
      $self->register($app, [ $route => $script ]);
      $self->register($app, %args);
      $self->register($app, \%args);

    "route" and path need to exist as keys in %args unless given as plain
    arguments.

    $route can be either a plain path or a route object.

COPYRIGHT AND LICENSE
    Copyright (C) 2014, Jan Henning Thorsen

    This program is free software, you can redistribute it and/or modify it
    under the terms of the Artistic License version 2.0.

AUTHOR
    Jan Henning Thorsen - "jhthorsen@cpan.org"

