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が取得できます。

この先は会員の登録が必要です。今なら有料会員(月額プラン)が2020年1月末まで無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら