可変の表の出力
 
可変長の表をCGIで出力するときには、HTMLを外部ファイルとして作っておき、クライアントにHTMLを返す(CGIでは標準出力に出力)ときに、それを読み込み表を展開するようにすると、CGIプログラムがすっきりします。ただし、ファイルのI/Oが増えるため、サーバの負担は大きくなります(「テンプレートファイルを使う」も参照)。

HTMLテンプレートファイルには、CGIで展開する表の部分を通常の文章では使われないような、もちろんHTMLタグなどにも使われない特別なルールで書いておきます。ここでは展開する部分を
 

__@表@__


とすることにします。例えば、次のようなHTMLのテンプレートを定義します。
 
 
table_html.tmpl
<HTML>
<HEAD>
<TITLE>可変の表を出力</TITLE>
</HEAD>
<BODY>
<TABLE>
_@Table@__
</TABLE>
</BODY>
</HTML>

[サンプルプログラムの実行]
 

CGIでは、__@Table@__を置き換えます。
 
table_template.cgi
#!/usr/bin/perl
#
# table_template.cgi
#
# (C) Kaoru Fujita
#
use lib './lib';
require 'util.pl';

#
# 定数
#
$TmplLoc = './templates';
$Template = $TmplLoc.'/table_html.tmpl';
$TblName = 'Table';
open(FH, "<$Template")
        or exitError("テンプレートファイルがオープンできません: $Template");

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

# テーブルの作成
$g = 0x00;
for ($r=0x00; $r <= 0xff; $r+=0x10) {
        $table = $table.'<TR>';

        for ($b=0x00; $b <= 0xff; $b+=0x10) {
                $g = $b if ($r == $b);
                $rgb = sprintf("%02x%02x%02x", $r, $g, $b);
                $table = $table.'<TD BGCOLOR="#'.$rgb.'">&nbsp;</TD>';

        }

        $table = $table."</TR>\n";
}

while (<FH>) {
        s/__\@$TblName\@__/$table/g;
        print;
}

exit(0);

#--End of table_template.cgi