@nqounetです。

先日書いたPSGIとCGIの比較ですが、厳密には同じではありません。

CGIで書いたほうは、かなり簡素化しています。

簡素化せずに書くとどうなるのか、一部を試してみます。

request_method と path_info

改めてMojoliciousで書いた方を見てみましょう。

1
2
3
use Mojolicious::Lite;
get '/' => {text => 'Hello World!'};
app->start;

get/があると思いますが、コレに相当することをCGIで書いてみましょう。

1
2
3
4
5
6
7
#!/usr/bin/env perl
use strict;
use warnings;
if ($ENV{'REQUEST_METHOD'} eq 'GET' and $ENV{'PATH_INFO'} eq '/' or $ENV{'PATH_INFO'} eq '') {
print "Content-Type: text/plain\n\n";
print 'Hello World!';
}

%ENVは環境変数です。

CGIの場合は、ApacheなどのウェブサーバーがCGIを実行する時に環境変数をセットします。

それをPerlで取り出す時に%ENVを使います。

%ENVは特別な変数ですが、扱い方は普通のハッシュと同じです。

なので、一覧を見るときにはkeyseachなどが使えます。

1
2
3
4
5
6
7
for my $key (keys %ENV) {
print "$key = $ENV{$key}\n";
}
# または
while (my ($key, $value) = each %ENV) {
print "$key = $value\n";
}

CGIを勉強するにしても、約束事というか色々な決まり事を覚える必要があります。

どうせ覚えるなら、最新の情報を覚えておいたほうが良いのではないでしょうか。

残念ながら、Mojoliciousが動作するPerlのバージョンはv5.10以降なので、まだまだ多くのレンタルサーバーでは使えません。

でもご安心ください。

v5.8にも対応しているMojoliciousがあります。

コレで、レンタルサーバーでも動きますね。

strict と warnings

CGI側にある表記として、use strictuse warnginsがありますが、何故Mojoliciousの方には書いてないのか疑問に思った方。とても素晴らしいです。

実はMojolicious::Liteと書くとこれらを自動的に有効にしたことになります。

最近ではuse utf8も有効になるようになっています。

use strictは口が酸っぱくなるほど言っていることですが、それも最近の動向としては書かなくても自動的にuse strictの状態になろうとする方向になっています。

ところで、Perlの必要なバージョンを書くとそれ以前のPerlでは動作しないようになるのですが、(安定版で言うと)v5.12以降を指定すると自動的にuse strictの状態になります。

1
2
3
4
#!/usr/bin/env perl
use utf8;
use 5.012;
say 'Hello, world!';

そして、ついでにsayというコマンドも使えるようになるので、簡単なサンプルを書くようなときには便利な記法だと思います。

検索ワードは perl -cgi

Perlは古くからある言語なので、インターネットと共に発展してきました。

検索してみると情報量は多いのですが古いものも多く、そのせいで最近の情報が手に入りにくいと思います。

ただ、CGIの情報を取り除くだけでも見た目は大分良くなりますので、検索ワードはperl -cgiが良いと思います。

googleであれば、過去1年分のみを検索したりもできます。

是非お試しください。