Perlの公式のライブラリCPANには、色々と有用なクラスが用意されている。その中から今日はHTML-FillInForm-Liteを紹介したい。
一般的なテンプレートライブラリは、HTMLの中に色々な記号を書き込んで、この記号を手がかりにデータや部品を埋め込む。PHPで有名なSMARTYなんかもこのタイプで、そもそも、PHP自身だって、一種のテンプレートといえないこともない。
フォームに文字列を設定する場合は、PHPだけで書くとこんなコードになる。
<input type="text" name="ADDR" value="<?php print htmlspecialchars(\$arydata["ADDR"]);?>" />
こんなものを沢山書くのは結構面倒です。それでも単純なのでエディッターで置換したりして作成することもできます。それが、セレクトボックスになると、これはもうプログラムでも使って、生成しないと大変なことになります。
このようの面倒なことはプログラムで行ってしまえばよいということで、PerlではHTML::FIllInFormというクラスが公開されいます。このクラスは、HTML::ParserというParserでHTML全てをちゃんと真面目に、解析して処理しています。HTML::Perserは、プログラム的には正しいのですが、如何せん全然関係ないHTML全部を解析することになって結構重い処理になります。
そこで考えられたのが、正規表現でフォームを書き換えてしまうHTML-FillInForm-Liteというクラスです。
用意するのは単純な値をいてれいないフォームのHTMLです。
test01.html
<body>
<table>
<tr>
<td width="100">氏名</td>
<td >
姓<input type="text" name="NAME1" value="" size=10 />
名<input type="text" name="NAME2" value="" size=10 />
</td>
</tr>
<tr>
<td width="100">郵便番号</td>
<td ><input type="text" name="POSTAL" value="" size=8 /></td>
</tr>
.....
これに対して、ハッシュでデータを用意します。
my %data = (
"NAME1" => "ビット",
"NAME2" => 'スター',
"POSTAL" => "060-0061",
"AREA" => "北海道",
"ADDR" => "札幌市中央区南1条西6丁目21")
my $h = HTML::FillInForm::Lite->new();
print $h->fill( "test01.html", \%data );
あとは、ファイルを指定して出力するだけです。
SMARTYのような高機能なテンプレートなどと異なって、単純に値を代入するだけの機能しかありませんが、入力フォームなどを作成するには、結構重宝しそうです。
HTML-FillInForm-Liteは、PurePerlで書かれているので、他の言語にも移植されていて、PHPにも移植されています。現在Perlのバージョンより古いものを基準にしているのか、