Hashからある値を取り出すとき、Keyに定数を使う場面でドツボにはまったのでメモ。
$hash{TYPE1} は$hash{'TYPE1'} と同義なので、文字列”TYPE1” をKeyにしてHashを見にいってしまいます。
上記のHashでは”TYPE1"に対するValueはセットされていないのでundefが返ります。
TYPE1がさす”1”をKeyにしてHashから値を取得する正しい方法は、
定数に () をつけましょう。
ちなみに、定数配列を利用する場合
use constant {
TYPE1 => 1,
TYPE2 => 2,
};
my %hash = (1 => 'aaa', 2 => 'bbb');
print $hash{TYPE1}; # undef が返る
$hash{TYPE1} は$hash{'TYPE1'} と同義なので、文字列”TYPE1” をKeyにしてHashを見にいってしまいます。
上記のHashでは”TYPE1"に対するValueはセットされていないのでundefが返ります。
TYPE1がさす”1”をKeyにしてHashから値を取得する正しい方法は、
print $hash{TYPE1()}; # 'aaa' が返る
定数に () をつけましょう。
ちなみに、定数配列を利用する場合
use constant VARS => ['aaa', 'bbb', 'ccc'];
foreach (@{VARS()}){
print $_;
}
※コメント投稿者のブログIDはブログ作成者のみに通知されます