Nested Perl Hash -


i'm trying take value hash , use key next level hash, code works, thinking there has better way this.

is there way avoid k* array variables?

my @key = keys %data3; $devicetype = $key[0]; @k = keys %{$data3 {$devicetype} };  ## uber ugly, find better way. $measinfoid = $k[0];  @k1 = keys %{$data3 {$devicetype} {$measinfoid}}; $deviceid = $k1[0]; @k2 = keys %{$data3 {$devicetype} {$measinfoid} {$deviceid}}; $location = $k2[0]; @k3 = %{$data3 {$devicetype} {$measinfoid} {$deviceid} {$location}}; $measobjectldn = $k3[0];  print ("data: $devicetype, $measinfoid, $deviceid, $location, $measobjectldn\n");     foreach $m ( keys %{ $data3 {$devicetype} {$measinfoid} {$deviceid} {$location} {$measobjectldn} } ){   print("ok: $m\n"); } 

%data3 looks this:

$var1 = 'nthlrfe'; $var2 = {     'dia' => {         'njbb-hlr-2' => {             'njbb' => {                 'lte-1/dia-1' => {                     'diaunknownavps' => '0',                     'diacerrejsysinovl' => '0',                     'diaprotocolerrors' => '0',                     'diawrongprottype' => '0',                     'diamessagercvd' => '0',                     'diaoctetsent' => '0',                     'diacerrejprntinwhtlst' => '0',                     'diaoctetrcvd' => '0',                     'diamessagedscrd' => '0',                     'diacerrejconavailable' => '0',                     'diamessagesent' => '0',                     'diacerrejmaxconexcd' => '0'                 }             }         }     } }; 

thanks!

keys aren't sorted, "first key" won't same.

that said, if want compact bit, following should work:

my $devicetype = (keys %data3)[0]; .... $measinfoid = (keys $data3{$devicetype})[0]; .... $deviceid = (keys $data3{$devicetype}{$measinfoid})[0]; 

this ugly , not want guy comes after reading this.

keys work on hash refs hashes starting perl 5.14. if you're older that, you'll have dereference full on hash.


Comments

Popular posts from this blog

How to access named pipes using JavaScript in Firefox add-on? -

multithreading - OPAL (Open Phone Abstraction Library) Transport not terminated when reattaching thread? -

node.js - req param returns an empty array -