in reply to A better way for walking through HoHoH ?
ZlR:
I sometimes use this trick: Rather than reference the top hash everywhere, I create a reference to the "current" hash in each level of the loop, like so:
#!/usr/bin/perl -w use strict; use warnings; my %rez = ( 'host1' => { 'tgt' => { 'target_0011' => { '11C3' => '0C5C', '11E3' => '0C7C' }, }, 'wwn' => [ 'foobar' ] }, ); for my $curHost (keys %rez) { my $host = $rez{$curHost}; # Use $$host{key} at this level print "HOST: $curHost\n"; for my $curDev (keys %{$$host{tgt}}) { my $dev = $$host{tgt}{$curDev}; # Use $$dev{key} at this level # without using trick: my $bar = $rez{$curHost}{tgt}{$curDev}{'11E3'}; # with trick: my $foo = $$dev{'11C3'}; print " DEV $curDev contains: ", join(", ", sort keys %$dev +), "\n"; } }
This way, your references aren't a foot and a half long. You can easily add or remove a level of your structure pretty easily, too, since you needn't edit a bazillion lines of code--only the ones where you change levels. I normally use this trick when (a) I suspect that I'll have to rearrange the structure or (b) my references get too long.
...roboticus
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: A better way for walking through HoHoH ?
by ZlR (Chaplain) on Mar 24, 2010 at 13:40 UTC |