#!/usr/bin/env perl
use strict;
use warnings;
my %hash = (
'ScreenName1.Description1' => {
'ScreenName' => 'A',
'Description' => 'Desc1',
'Type' => 'On/Off'
},
'ScreenName2.Description2' => {
'ScreenName' => 'B',
'Description' => 'Desc2',
'Type' => 'Momentary'
},
'ScreenName3.Description3' => {
'ScreenName' => 'A',
'Description' => 'Desc3',
'Type' => 'Momentary'
},
'ScreenName4.Description4' => {
'ScreenName' => 'A',
'Description' => 'Desc4',
'Type' => 'On/Off'
},
'ScreenName5.Description5' => {
'ScreenName' => 'B',
'Description' => 'Desc5',
'Type' => 'On/Off'
},
);
my %parsed;
for (values %hash) {
push @{$parsed{$_->{ScreenName}}},
join ' ', @{$_}{qw{Description Type}};
}
print "*** Counts ***\n";
print "$_ - ", 0+@{$parsed{$_}}, "\n" for keys %parsed;
print "\n*** New hash (\%parsed) ***\n";
use Data::Dump;
dd \%parsed;
####
*** Counts ***
A - 3
B - 2
*** New hash (%parsed) ***
{
A => ["Desc1 On/Off", "Desc3 Momentary", "Desc4 On/Off"],
B => ["Desc2 Momentary", "Desc5 On/Off"],
}
####
*** Counts ***
B - 2
A - 3
*** New hash (%parsed) ***
{
A => ["Desc3 Momentary", "Desc1 On/Off", "Desc4 On/Off"],
B => ["Desc5 On/Off", "Desc2 Momentary"],
}