use strict;
use warnings;
use Data::Dumper;
print Dumper {
one => sub { return 1 }->(),
two => sub { return 2 }->(),
hoge => sub { return () }->(),
fuga => sub { return () }->()
};
便宜上、今は関数は無名関数にしています。
関数の返り値を使って、ハッシュのリファレンスを作りたい時に、上記のようなケースになった場合、下記のデータ構造がDumpされます。
$VAR1 = {
'one' => 1,
'hoge' => 'fuga',
'two' => 2
};
hogeというキーにfugaという値が代入されてしまっていて、意図したデータ構造になりません。
意図したデータ構造は以下のような形です。
$VAR1 = {
'one' => 1,
'fuga' => undef,
'hoge' => undef,
'two' => 2
};
値を代入するために呼び出す関数を修正しない限りは、予め初期値を入れる他ないのでしょうか?
print Dumper {
one => sub { return 1 }->() || undef,
two => sub { return 2 }->() || undef,
hoge => sub { return () }->() || undef,
fuga => sub { return () }->() || undef
};
もっと良い解決方法というか、こうやったらいいよっていう方法があったら教えてください。
よろしくお願いします。
ちょっと面倒ですけど、強制的にスカラーコンテキストにするというのはいかがでしょうか。
use strict; use warnings; use Data::Dumper; print Dumper { one => scalar(sub { return 1 }->()), two => scalar(sub { return 2 }->()), hoge => scalar(sub { return () }->()), fuga => scalar(sub { return () }->()) };