Pythonにはsprintfっぽいことができる%演算子って言うのがある.これは普通のsprintfっぽくフォーマット文字列のの後に変数並べる使い方ができる.さらに便利な使い方があって,辞書を渡して辞書のキーをもとに文字列のフォーマットができて,
>>> print "%(name)s is %(age)d years old." % {'name':'yohei', 'age':21 } yohei is 21 years old.
こんなノリで,辞書を準備してやればかなり柔軟に文字列フォーマットができて便利.
これと同じようなことがPerlでもできないかと探していたら,偶然String::Fortmatっていうモジュールを見つけたので利用してみよう.
String::Formatモジュールが提供するstringf関数はフォーマット文字列と,ハッシュのリファレンスを引数にとる.そのハッシュのキーを%の後ろに付けて使える.うえのPythonのコードと同じことをやるのには,以下のように.
my $args = { n => 'yohei', a => 21, }; print stringf("%n is %a years old.\n", $args);
ハッシュのキーは1文字に制限されるので,Pythonのコードほど柔軟ではないな.しかし,それなりに使えそう.
実は,これPerlでやりたくて延々困ってたんだけど,ぜんぜん関係なしにPerl::Critic入れたら依存でString::Formatが入って知った.