より便利なsprintf - String::Format

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が入って知った.