CGIでよく利用されているPerlを使って,実際にCGIプログラムを作ってみます。

 CGIのプログラム言語には,「Perl」や「Ruby」,「PHP」などがよく利用されています。ここでは古くから使われているPerlを使います。Perl は,スクリプトをそのまま実行できるインタプリタ方式の言語です*1。そのため,記述したプログラムがすぐに試せるという特徴があります。C言語に記述が似ており,printf命令などを同じように利用できます。

 Perlは特に,文字列の処理が得意です。文字列の加工などが簡単に行えます。さらに,Perl ver5.0以降では,よく使うロジックをライブラリのように集めた「モジュール」という仕組みが利用できます。用途にあったモジュールを機能を組み込むだけで,複雑なプログラムを簡単に記述できます。なお,この“モジュール”は,Apacheのモジュールやカーネルのモジュールとは別のものです。

 Fedora8では,Perl5.8.8が導入されています。

 Perlでは,各命令の最後に「; 」を付けます。文字を出力するprintf 命令であれば,

printf "Apacheで動的コンテンツを作成";

のように記述します。

 改行したい場合は文字列内に「n」を付けます。さらに,printf内で,「@」や「"」といった記号を文字として利用する場合は直前に「」マークを付けて「@」や「"」のように書きます。

 変数には頭に「$」を付けます。代入する際や値を利用する場合のどちらでも「$」を付ける必要があります。例えば,「$x」や「$var」のように記述します。

 Perl で利用できる主な命令を表1に示します。

表1●Perlの主な命令・制御文
表1●Perlの主な命令・制御文

 では,簡単なCGIプログラムをPerlで作成してみましょう。図1は,現在の時刻を取得し,Webブラウザで閲覧できるようにしたプログラムです。1行目の「#!/usr/bin/perl」はこのスクリプトを読み取って実行するPerlのインタプリタ・プログラムのパスを示しています*2

#!/usr/bin/perl
($sec, $min, $hour, $mday, $mon, $year) = localtime();
$mon = $mon + 1;
$year = $year + 1900;
printf "content-type: text/htmlnn";
printf "<html>n";
printf "<head>n";
printf "<title>現在の時刻</title>n";
printf "</head>n";
printf "<body>n";
printf "<p>今日は,$year年$mon月$mday日です。</p>n";
printf "<p>現在の時間は,$hour時$min分$sec秒です。</p>n";
printf "</body>n";
printf "</html>n";
exit 0;</code></pre></td>
図1●Perlで作成したCGIプログラムの例
図のプログラムは現在の時刻を取得して,HTML形式で出力する。

 空行を挟んだ3行目で,localtime()関数を使って現在の時刻を入手し,前半にある変数に秒,分,時,日,月,年に分けて代入しています。1月が0,2月が1となるため4行目で1を足しています。年では1900年から数えるため,1900を足しています。7行目以降はWebブラウザに送るHTMLを出力します。

 作成したファイルはCGIが実行できるディレクトリに配置し,実行権限を付加することで,Webブラウザからアクセスして,結果のHTMLが取得できます。