for my $division (keys %AG) { # ... for my $person (@{ $AG{$division} }) { # ... #### for my $division (values %AG) { # ... for my $person (@$division) { # ... } #### DB<1> %AG = ( GAHD => [ { name => "foo",}, {name => "bar",} ], GAGD => [ { name => "baz",}, {name => "foobar",} ] ); DB<2> x \%AG; 0 HASH(0x6005009f8) 'GAGD' => ARRAY(0x600500680) 0 HASH(0x600500740) 'name' => 'baz' 1 HASH(0x6005006e0) 'name' => 'foobar' 'GAHD' => ARRAY(0x6005007e8) 0 HASH(0x60005f150) 'name' => 'foo' 1 HASH(0x600500848) 'name' => 'bar' DB<3> for $division (values %AG) { for $person (@$division) {print $person->{name}, "\n"}}; baz foobar foo bar