NAME

CGI::PSGI - Enable your CGI.pm aware applications to adapt PSGI protocol

CGI::PSGI - Adapt CGI.pm to the PSGI protocol

SYNOPSIS

use CGI::PSGI;

sub app {
    my $env = shift;
    my $q = CGI::PSGI->new($env);
    return [ $q->psgi_header, [ $body ] ];
}

DESCRIPTION

This module is for web application framework developers who currently uses CGI to handle query parameters. You can switch to use CGI::PSGI instead of CGI, to make your framework compatible to PSGI with a slight modification of your framework adapter. The framework should already be collecting the body content to print at one place, and not printing any content directly to STDOUT.

On the other hand, if you are an "end user" of CGI.pm and have a CGI script that you want to run under PSGI web servers, this module might not be what you want. Take a look at CGI::Emulate::PSGI instead.

Your application, typically the web application framework adapter should update the code to do CGI::PSGI->new($env) instead of CGI->new to create a new CGI object, in the same way that CGI::Fast object is initialized in a FastCGI environment.

CGI::PSGI is a subclass of CGI and handles the difference between CGI and PSGI environments transparently for you. Only the OO interface works this way. You should always create an object with CGI::PSGI->new($env) and should call a method on it. The function-based interface like use CGI ':standard' doesn't work with this module.

METHODS

CGI::PSGI adds the following extra methods to CGI.pm

env

$env = $cgi->env;

Returns the PSGI environment in a hash reference. This allows CGI.pm based application frameworks such as CGI::Application to access PSGI extensions, typically set by Plack Middleware components.

So if you enable Plack::Middleware::Session, your application and plugin developers can access the session via:

$cgi->env->{'plack.session'}->get("foo");

Of course this should be coded carefully by checking the existence of env method as well as the hash key plack.session.

psgi_header

my ($status_code, $headers_aref) = $cgi->psgi_header(%args); 

Works like CGI.pm's header(), but the return format is modified. It returns an array with the status code and arrayref of header pairs that PSGI requires.

If your application doesn't use $cgi->header, you can ignore this method and generate the status code and headers arrayref another way.

psgi_redirect

my ($status_code, $headers_aref) = $cgi->psgi_redirect(%args); 

Works like CGI.pm's redirect(), but the return format is modified. It returns an array with the status code and arrayref of header pairs that PSGI requires.

If your application doesn't use $cgi->redirect, you can ignore this method and generate the status code and headers arrayref another way.

AUTHOR

Tatsuhiko Miyagawa <miyagawa@bulknews.net>

Mark Stosberg <mark@summersault.com>

LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO

CGI, CGI::Emulate::PSGI