#!/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"; } }