扶凯

取势 明道 优术

作者为 扶 凯 发表

最流行的 Web 服务器环境中运行 Web 应用程序中主要是 CGI, FastCGI 和 mod_perl .CGI.pm 是 Perl 核心模块中的一个能运行在这些所有的环境中(只需要小的调整),这意味着大多数Web应用程序和框架以某种方式使用 CGI.pm 来处理环境的差异,因为它是最容易的.

CGI::PSGI 是 CGI 模块的子类,他能很容易地将现有的 CGI.pm 转移到 PSGI 应用的使用上来.例如,您有以下CGI应用程序:

use CGI;

my $q = CGI->new;
print $q->header('text/plain'),
"Hello ", $q->param('name');

这是一个简单的 CGI 的应用,我们怎么使用 CGI::PSGI 模块来转成 PSGI 啦.

use CGI::PSGI;

my $app = sub {
    my $env = shift;
    my $q = CGI::PSGI->new($env);
    return [ 
        $q->psgi_header('text/plain'),
        [ "Hello ", $q->param('name') ],
    ];
};

CGI::PSGI->new($env) 会取得 PSGI 环境的 hash .然后创建CGI::PSGI 的实例.这是一个 CGI.pm 的子类,全部的方法包括了 param(),query_string 之类,取得这些环境是从 PSGI 环境中取得的,而不是 CGI 的 ENV 的值.
psgi_header 是一个应用的方法.有点象 CGI 的 header 的方法,并返回状态码和一个数组的引用,其中包含HTTP头的列表.
下一个文章,我们会告诉你怎么转换现存的 web 的框架来使用 CGI.pm,和 CGI::PSGI.

 

来了就留个评论吧! 1个评论