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は素晴しい企画ですね!