テキストの整形はPerlの基本
Perlは
print "This report is created by $author.";
もう少しこったことをしたければ,
printf "This report is created on %04d/%02d/%02d.", $year, $month, $day;
優先順位の都合でうまく埋め込めなかったり,
use Time::Piece;
print "This report is created by $author",
"on ".Time::Piece->new->ymd.".\n",
あるいはシェルから受け継いだヒアドキュメントを使う手もあるのでした。
printf <<"END", $year, $month, $day;
This report is created by $author,
on %04d-%02d-%02d.
END
また,
format STDOUT =
This report is created by @*,
$author
on @*-@*-@*.
$year, $month, $day
.
write;
ただし,
例によって多様性を重視するPerlの世界では有名どころだけでも片手では数えられないだけのテンプレートモジュールがありますが,
今回からは何度かにわけてテンプレートまわりのモジュールについてまとめてみます。初回の今回は,
Text::Template
この系統のモジュールとしてはまず
これはCPANに登録されているPerlのテンプレート関連モジュールとしては最古のものなので,
Text::Templateの機能自体はヒアドキュメントに毛が生えたようなもので,
ヒアドキュメントの場合
use strict;
use warnings;
my $author = 'me';
my @items = (1, 2, 3);
print <<"END";
This report is created by ${author}.
@{[ do {
my $list = '';
for (@items) { $list .= "item $_\n" }
$list; # 最終的にこの値が埋め込まれます
}]}
END
Text::Templateの場合
use strict;
use warnings;
use Text::Template;
my $author = 'me';
my @items = (1, 2, 3);
my $template = <<'END'; # ここの部分は外部のファイルに切り出せます
This report is created by {$author}.
{
my $list = '';
for (@items) { $list .= "item $_\n" }
$list; # 最終的にこの値が埋め込まれます
}
END
print Text::Template->new(TYPE => 'STRING', SOURCE => $template)
->fill_in(HASH => { items => \@items, author => $author });
この例ではText::Templateに渡すテンプレートもヒアドキュメントで作成しているため違いが見えづらくなっていますが