新しいblogに移行しました

新ブログ "All Yout Bugs Are Belong To Ass" に移行しました!

2010-12-07

[Perl]明示的なハッシュリファレンスの指定について知った

ハッシュリファレンスを書くとき、
my $a = { hoge => 'fuga' };
のように書くわけですが、とあるPerlコードを覗いていたとき、
my $a = +{ hoge => 'fuga' };
のような記述を見かけたわけです。
ぱっと見て、'+'が何なのかよく解らなかったので、Twitterで聞いてみたところ、
  • 明示的にハッシュリファレンスを渡している
  • 単項の+はNOPなのでB::Deparseで同一になるはず
とご教示いただきました。ありがとうございます。

実際に確認してみました。
スクリプトは以下のように記述。
use warnings;
use strict;
use Data::Dumper;

my $a = { hoge => 'fuga' };
my $b = +{ hoge => 'fuga' };

B::Deparseに通してみたところ。
$ perl -MO=Deparse ./hoge.pl
use Data::Dumper;
use warnings;
use strict 'refs';
my $a = {'hoge', 'fuga'};
my $b = {'hoge', 'fuga'};

たしかに同一ですね。syntax-sugarと思ってOKそうです。

0 件のコメント: