Perlでダブルクォーテーション中の関数の結果を展開する
Advent Calendar、今年は書くことが出来なかったのでちょっとした小ネタを。
printなんかで文字列と一緒に関数の値を表示するときには、下のように「.」で連結させるかprintfで表示させるのが一般的なのかなと思うのですが、
#!perl use strict; use warnings; use DateTime; print "Now it is " . DateTime->now( time_zone => "Asia/Tokyo" ); # or printf "Now it is %s", DateTime->now( time_zone => "Asia/Tokyo" ); # Now it is 2011-12-06T00:27:02
今の会社に入って知ったのですが、下のような書き方も出来るんですね。
#!perl use strict; use warnings; use DateTime; print "Now it is @{[ DateTime->now( time_zone => q{Asia/Tokyo} ) ]}"; # Now it is 2011-12-06T00:27:02
関数の戻り値を配列のリファレンスに入れて、それをデリファレンスしているように見えるのですが、何でこれで表示されるのかがわからない。。
と思って調べてみたら、既に2008年のAdvent CalendarでTAKESAKOさんが書かれていました。
というわけで、Advent Calendarは素晴しい企画ですね!