電子書籍の厳選無料作品が豊富!

設定ファイルにこのように設定されている際に

use constant SUUCHI_MAPPING => {
'one' => 'xxx',
'two' => 'yyy',
'three' => 'xxx',
'four' => 'zzz',
'five' => 'yyy',
'six' => 'yyy'
}

下記のような持ち方にして使用しやすくするにはどのような処理をしたらいいでしょうか。

use constant SUUCHI_FORMAT => {
xxx => ['one','three'],
      yyy => ['two','five','six'],
zzz => ['four']
};

A 回答 (2件)

「順序に意味がない」なら, SUUCHI_MAPPING のような構造を SUUCHI_FORMAT のような構造に変換するサブルーチンを書けばいい. 単純には


sub cvt {
my $foo = {};
while (my ($key, $val) = each %{$_[0]}) {
push @{$foo->{$val}}, $key;
}
$foo;
}
のようなサブルーチン (名前は適切なものにすべし) を使って
use constant SUUCHI_FORMAT => cvt(SUUCHI_MAPPING);
とすればできる, みたい.

もちろん, 順序が保存されるとは限りません (そもそもハッシュである以上順序は関係ない).
    • good
    • 0

確認ですが, SUUCHI_FORMAT における値の順序って, 何か意味はありますか? つまり,


xxx => ['one', 'three']
でなければならないのでしょうか, それとも
xxx => ['three', 'one']
であってもいいのでしょうか?

この回答への補足

いえ、値の順序に意味はまったくないです。
よろしくお願いします

補足日時:2012/08/10 07:36
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!