NB Jogger's blog

NBが好きなのです

[Perl]定数をHashのKeyに使用するときの注意点

2008-09-14 05:16:46 | プログラム
Hashからある値を取り出すとき、Keyに定数を使う場面でドツボにはまったのでメモ。


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 $_;
}


コメントを投稿