• 締切済み

use constantについて

定数が定義されてるモジュールに、以下のようにして定義しています。 use constant CODE2NAME => {   '000' => 'AAA',   '100' => 'BBB',   '200' => 'CCC', }; このキーになる部分を順番に取得する事は可能でしょうか? 例えば、通常のハッシュだと %hash = (   '000' => 'AAA',   '100' => 'BBB',   '200' => 'CCC', ); と定義しているとすると、 foreach $key ( keys %hash ) { ・・・ } こんな感じにキーを順番に取得出来るようにしたいのですが。。。 よろしくお願いします。

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

constant プラグマは、要は定数部分を返す同名の関数を作ることに相当します。 なので、 foreach $key ( keys %{CODE2NAME()} ) { print "$key\n"; } のようにしてやればよろしいです。

taru73
質問者

お礼

ご回答ありがとうございます。 最初に回答して頂いたtwinkleluzさんへの返信を用意 してる時に回答を頂いたようです。 twinkleluzさんへのお礼にも書きましたが、BLUEPIXYさん とホボ同じやり方で出来ました。 ただ・・・ foreach $key ( keys %{&CODE2NAME} ) { print "$key\n"; } という風に、要するに「&CODE2NAME」とする事によって 実現出来たのですが、CODE2NAME()では出来ませんでした。 ありがとうございました。

回答No.1

$hoge = CODE2NAME; foreach $key ( keys %$hoge ) { ... } で取得できると思います。 どうも、keys関数の引数は定数ではダメなようです。 定数の実体はハードリファレンスなので、いったん別の変数にリファレンスをコピーし、その変数からアクセスさせるとうまくいくようです。 # でももっといい方法があるかも

taru73
質問者

お礼

回答ありがとうございます。 なぜか残念ながら僕の環境では別変数にコピーしては 出来ませんでしたが、次の方法で実現出来ました。 foreach my $key (sort keys %{&CODE2NAME}){ ・・・ } ありがとうございました。

関連するQ&A