sprintf()関数

普段Perl使ってて、sprintf()ってよく使うんだけど、Perlの場合、引数の部分に配列を指定して、たとえば以下のように書ける。

my @list = ('foo', 'bar');
my $str = sprintf('%s, %s', @list);

これは、

my $str = sprintf('%s, %s', @list);

my $str = sprintf('%s, %s', 'foo', 'bar');

と同じだから、引数の数が書式指定と一致しておkになります。

これ、配列に値を入れといてあとで使えるから便利なんだけど、これってPHPとかRubyとか他の言語だとできないんですね。配列が、Perlでいうところの配列リファレンスなので、sprintf('%s, %s', list);とかやると引数がすくないよ!っていわれるわけです。もちろんPerlでもsprintf('%s, %s', \@list);ってやったらNGなわけですが。

Pythonだとタプルを指定すればいいので、リストで持ってても、

list = ['foo', 'bar']
'%s, %s' % tuple(list)

とかしてリストからタプルにしてやればいいんだけど。

ということに今日気づいた。
普段何気なくやってることも他の言語を使うと普通じゃないことに気づくという。
まー、Perlはそういうのが多そうだけど。

追記(2008/11/20):
コメントで教えてもらいました。Rubyはできます。

sprintf('%s, %s', *list)

あとStringクラスに%というメソッドもある。

'%s, %s' % list

PHPも実はできたりしないかな・・。

    • -

sprintf - perldoc.perl.org
プログラミング言語 Ruby リファレンスマニュアル
プログラミング言語 Ruby リファレンスマニュアル
PHP: sprintf - Manual
http://www.python.jp/doc/2.4/lib/typesseq-strings.html