2016-11-03 32 views
2

n個の要素を含む配列(nが1より大きい)を指定すると、各要素が順番にキーであるハッシュ構造の要素を参照するエレガントな方法がありますか?例えば複数のキーの配列を持つPerlハッシュ

:このまたは類似した何かを考える

my @foo = ('a','b','z'); 

、私は次のようにアクセスしたいと思います:

$hash->{'a'}->{'b'}->{'z'} 

これは固定数の要素だった場合、それは簡単なことだろうが、私は、実行時に何本あるかを知ることはできません(確かに6または7を超えることはありませんが、そうでなければ推測できません)。

私が考えることができる唯一のパターンは、ループと参照を含み、不器用に見えます。半分のページを占めていないものがあるのか​​、Data :: Dumperが必要なのでしょうか?

+0

参照[ 'データ:: Diver'](https://metacpan.org/pod/Data::Diver)と['ハッシュ:: Flatten'を]( –

+0

@HåkonHæglandあなたのコメントを答えにするなら、私はそれを受け入れます。あなたはパンチにチョロバを打つように見えます。 –

+2

ありがとうございますが、チョロバの回答を受け入れてください。私は競争していません:) –

答えて

7

Data::Diverが存在する理由です:

#!/usr/bin/perl 
use warnings; 
use strict; 

use Data::Diver qw{ Dive }; 

my $hash = { a => { b => { z => 'HERE' } } }; 

my @foo = qw(a b z); 

print Dive($hash, @foo); 
+0

ありがとう。何かがあるはずだと思っていましたが、一般的な結果を返さなかったGoogle検索を理解できませんでした。 –

+0

'Dive($ hash、map \ $ _、@foo)'は安全です(数値キーを扱う)。 – ikegami

関連する問題