- 締切済み
use constantについて
定数が定義されてるモジュールに、以下のようにして定義しています。 use constant CODE2NAME => { '000' => 'AAA', '100' => 'BBB', '200' => 'CCC', }; このキーになる部分を順番に取得する事は可能でしょうか? 例えば、通常のハッシュだと %hash = ( '000' => 'AAA', '100' => 'BBB', '200' => 'CCC', ); と定義しているとすると、 foreach $key ( keys %hash ) { ・・・ } こんな感じにキーを順番に取得出来るようにしたいのですが。。。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
constant プラグマは、要は定数部分を返す同名の関数を作ることに相当します。 なので、 foreach $key ( keys %{CODE2NAME()} ) { print "$key\n"; } のようにしてやればよろしいです。
- twinkleluz
- ベストアンサー率52% (98/185)
$hoge = CODE2NAME; foreach $key ( keys %$hoge ) { ... } で取得できると思います。 どうも、keys関数の引数は定数ではダメなようです。 定数の実体はハードリファレンスなので、いったん別の変数にリファレンスをコピーし、その変数からアクセスさせるとうまくいくようです。 # でももっといい方法があるかも
お礼
回答ありがとうございます。 なぜか残念ながら僕の環境では別変数にコピーしては 出来ませんでしたが、次の方法で実現出来ました。 foreach my $key (sort keys %{&CODE2NAME}){ ・・・ } ありがとうございました。
お礼
ご回答ありがとうございます。 最初に回答して頂いたtwinkleluzさんへの返信を用意 してる時に回答を頂いたようです。 twinkleluzさんへのお礼にも書きましたが、BLUEPIXYさん とホボ同じやり方で出来ました。 ただ・・・ foreach $key ( keys %{&CODE2NAME} ) { print "$key\n"; } という風に、要するに「&CODE2NAME」とする事によって 実現出来たのですが、CODE2NAME()では出来ませんでした。 ありがとうございました。