さて、Open Searchを使ったWebアプリケーションの開発に入っていきますが、いきなりアプリケーションを作る前に、出力をどうやってHTMLに整形するか考えてみましょう。
真っ先に思いつくのは、リスト2のようにPerlスクリプト中にHTMLを書くスタイルです。しかし、HTMLのデザインを変更するのにスクリプト本体を変更しなければいけなかったり、行数が増えてくるとスクリプトの可読性が低くなったりするので、この方法はあまりお勧めできません。
print "<html>";
print "<head><title>Open Search</title></head>";
printf ("<p><a href="%s">%s</a></p>\n", $_->{link}, $_->{title})
for (@{$feed->items});
:
:
そこで利用するのがテンプレートエンジン。マクロを実行できるテンプレートとしてHTMLを用意する方法です。これも利用例を見るのが分かりやすいと思います。Perlの代表的なテンプレートエンジンであるTemplate-Toolkit*(以下、TT)を使って先のスクリプトを整形してみましょう。
まず、スクリプトをリスト3のように書き換えて、TTで出力するように変更します。このようにTemplateインスタンスのprocessメソッドに、
を渡して実行すると、テンプレートファイルを読み取ってマクロを展開して出力してくれます。
#!/usr/local/bin/perl
use strict;
use warnings;
use WWW::OpenSearch;
use Template;
my $word = shift;
my $osxml = shift || "http://search.hatena.ne.jp/osxml";
my $engine = WWW::OpenSearch->new($osxml);
my $feed = $engine->search($word);
Template->new->process("./search.tt", { result => $feed }); # TT で出力
次に、スクリプトとは別に、テンプレートファイルを用意します。例えば検索結果をul、liタグを使ってマークアップするテンプレートはリスト4のようになります。これを実行すると、実行例3のように整形されて表示されます。テンプレートエンジンを使ったことで、スクリプトと出力のHTMLをきれいに分離できました。
<ul>
[% FOREACH item IN result.items -%]
<li>[% item.title | html %]</li>
[% END -%]
</ul>
このようにTTでは「[% var %]」や「[% FOREACH var IN list %]」といったマクロを使ってテンプレートを記述します。より詳しい使い方はCPANのTTのドキュメントを参照してください。
CPANではTemplateの名前で登録されている。
Copyright © ITmedia, Inc. All Rights Reserved.