use warnings; use strict; use Data::Dumper; my %hash = ( 'ScreenName1.Description1' => { 'ScreenName' => 'A', 'Description' => 'A Description of this button', 'Type' => 'On/Off' }, 'ScreenName2.Description2' => { 'ScreenName' => 'B', 'Description' => 'A Description of this button', 'Type' => 'Momentary' }, 'ScreenName3.Description3' => { 'ScreenName' => 'A', 'Description' => 'A Description of this button', 'Type' => 'Momentary' }, 'ScreenName4.Description4' => { 'ScreenName' => 'A', 'Description' => 'A Description of this button', 'Type' => 'On/Off' }, 'ScreenName5.Description5' => { 'ScreenName' => 'B', 'Description' => 'A Description of this button', 'Type' => 'On/Off' }, ); print Dumper(%hash); #### for $key (sort keys %hashc) { print "$key: \n"; for $ele (keys %{$hash{$key}}) { # my $p=0; # #if ($ele{'ScreenName'} =~ /A/){ # $p++; # } else { # #print "\n $ele{'ScreenName'} --- $p \n"; # $p=0; # } print " $ele: \t\t" . $hash{$key}->{$ele} . "\n"; } }