Win8 Strawberry 5.8.9.5 (32) Fri 06/04/2021 21:34:07 C:\@Work\Perl\monks >perl use strict; use warnings; 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' }, ); my %ScreenNameValues; for my $hr (values %hash) { $ScreenNameValues{ $hr->{'ScreenName'} }++; } print Dumper \%ScreenNameValues; print "$_ == $ScreenNameValues{$_} \n" for sort keys %ScreenNameValues; my %ScreenNameDT; for my $hr (values %hash) { push @{ $ScreenNameDT{ $hr->{'ScreenName'} } }, "$hr->{'Description'} $hr->{'Type'}"; } print Dumper \%ScreenNameDT; ^Z $VAR1 = { 'A' => 3, 'B' => 2 }; A == 3 B == 2 $VAR1 = { 'A' => [ 'A Description of this button Momentary', 'A Description of this button On/Off', 'A Description of this button On/Off' ], 'B' => [ 'A Description of this button Momentary', 'A Description of this button On/Off' ] };