CGI::Compile を試してみた

CGI::Compile とは miyagawa さんが作成した 既存のcgiスクリプトを書き換え無しにPSGI仕様に変換してくれるモジュールです。 一口に変換といっても新しくファイルが作られる訳ではなく実行時にPSGI仕様に合うようにしてくれるようです。

これを使うことでmod_perlのようなpersistentな状態を簡単に作り出してくれる便利モジュールですね。

簡単な hello world で試してみた

hello.cgi

#!/usr/bin/perl

use strict;
use warnings;
use CGI;

my $cgi = CGI->new();

print "Content-Type: text/html\n\n";

my $name = $cgi->param("name");

print "Hello ";
print defined $name ? $name . "!" : "world!";

name パラメータを渡すと Hello name! と表示されるだけの簡単なプログラムです。

この cgi スクリプトを plackup で起動できるように CGI::Compile に hello.cgi を渡す psgi ファイルを作成します

hello.psgi

use CGI::Emulate::PSGI;
use CGI::Compile;

my $cgi_script = "hello.cgi";
my $sub = CGI::Compile->compile($cgi_script);
my $app = CGI::Emulate::PSGI->handler($sub);

.psgi ファイルが出来たらplackupで起動させるだけです。

$ plackup -a hello.psgi
Plack::Server::Standalone: Accepting connections at http://0:5000/

ブラウザからhttp://localhost:5000/?name=fuga とアクセスすると Hello fuga! と表示されます。

既存のcgiを書き換えしなくても動く所がすごいですね。

created:

Back to top