in
Perl
- 06 11月, 2013
連想配列のキーを使って文を作成
Perlの技。と言うよりも別に言語に限らずですが
PerlにはHashと言う連想配列があるんですが
これを使って簡単なテンプレートに文字列を埋め込む処理を紹介
とあるトレーニングアプリを開いた時のメッセージ
こんにちは、Beckhamさん。 あなたの年齢は13歳です。 あなたの身長は170cmです。 今日もはりきってトレーニングしましょう!
当然 Paul さんが開いたら上記の表示が出てきてはおかしいので
名前や年齢・身長の数字の部分は、開いた人毎に変える必要があります。
今はWebフレームワークがあって、だいたいテンプレートが存在してますが
使わずに作っているサイトであれば下記のようなやりかたで
Webフレームワークのような事も再現できます。
まず下記のようなテンプレートファイル(sample.tmpl)を用意します。
こんにちは、__%name%__さん。 あなたの年齢は__%age%__歳です。 あなたの身長は__%height%__cmです。 今日もはりきってトレーニングしましょう!
出力するPerlでは下記のように処理をします。
my %user = ('name' => 'Beckham', 'age' => 13, 'height' => 170); my $data = (); my $tplt_fh = (); if (sysopen($tplt_fh, "sample.tmpl", O_BINARY | O_RDONLY)) { while(<$tplt_fh>) { $_ =~ s/__%(.*?)%__/$user{$1}/g; $data .= $_; } close($tplt_fh); } print $data;
上記の結果は下記のようになるはずです。
こんにちは、Beckhamさん。 あなたの年齢は13歳です。 あなたの身長は170cmです。 今日もはりきってトレーニングしましょう!
一番上と同じ状態になりましたね。
これは%userハッシュのキーnameに対しての値を__%name%__と書かれた場所に置換してます。
こうすることで、PerlでHTMLを出力する際も、CookieやDBの内容を画面に表示するときに
わざわざ1からHTMLタグをPerl上で書く必要がなく、テンプレートで管理することが出来ます。
今はWebフレームワークで同等の機能がすでに用意されてますが
原理としては上記のような形であること覚えておくと
もしかしたら環境制限のある仕事などで役に立つかもしれませんね。