無名ハッシュコンストラクタのブレースの前に+を付けないといけないケース
気になったので調べてみた。
perlrefを見れば一発だった。
そもそも+を付けるって何
中かっこは、BLOCK を始めとして他のことにも使われますから、 開きの中かっこが BLOCK の開始でないことを Perl に教える ために文の最初の中かっこの前に + や return をつけて、 曖昧さをなくすようにする必要がある場合があります。
perlref - Perlのリファレンスとネストしたデータ構造 - perldoc.jp
どんなときに+を付けないといけないのか
perlrefのサンプルそのままなんだけど一応。
# sample.pl use strict; use warnings; use Data::Dumper; sub hashem { { @_ }; # ハッシュリファレンスを返したい } print Dumper hashem( qw/ a 1 b 2 / );
$ perl sample.pl $VAR1 = 'a'; $VAR2 = '1'; $VAR3 = 'b'; $VAR4 = '2';
ハッシュリファレンスを返すつもりが、配列が返される。
では、+を付けて実行すると
use strict; use warnings; use Data::Dumper; sub hashem { +{ @_ }; # ハッシュリファレンスを返したい } print Dumper hashem( qw/ a 1 b 2 / );
$ perl sample.pl $VAR1 = { 'a' => '1', 'b' => '2' };
想定通りに、ハッシュリファレンスが返される。
なるほど、納得!