my %oslookup; while( my ($pc,$data) = each %hoh ) { push @{ $oslookup{$data->{'os'}} }, $pc; } # later on print "linux pcs are: ", join(',', @{$oslookup{'linux'} || []}, "\n";