use warnings; use strict; my %hash = ( 'Alarms.Alarm Acknowledge' => { 'ScreenName' => 'Alarms', 'Description' => 'Alarm Acknowledge', 'Type' => 'On/Off', }, 'Flow Diagram.Sequence Hold' => { 'ScreenName' => 'Flow Diagram', 'Description' => 'Sequence Hold', 'Type' => 'Momentary', }, 'Flow Diagram.Sequence Advance' => { 'ScreenName' => 'Flow Diagram', 'Description' => 'Sequence Advance', 'Type' => 'Momentary', }, 'Flow Diagram.Sanitize Enable/Disable' => { 'ScreenName' => 'Flow Diagram', 'Description' => 'Sanitize Enable/Disable', 'Type' => 'On/Off', }, 'Trend to USB.Start/Stop Trend Toggle' => { 'ScreenName' => 'Trend to USB', 'Description' => 'Start/Stop Trend Toggle', 'Type' => 'On/Off', }, 'Alarms.Alarm Reset' => { 'ScreenName' => 'Alarms', 'Description' => 'Alarm Reset', 'Type' => 'On/Off', }, 'Alarms.Alarm Trigger' => { 'ScreenName' => 'Alarms', 'Description' => 'Alarm Trigger', 'Type' => 'Momentary', }, ); my %HashCount; $HashCount{ $hash{$_}{ScreenName} }{0}++ foreach keys %hash; my $ScreenkeyOld = 'Old'; my $i = 1; foreach my $key ( sort keys %hash ) { my $Screenkey = $hash{$key}{ScreenName}; my $Description = $hash{$key}{Description}; my $Type = $hash{$key}{Type}; if ( $Screenkey eq $ScreenkeyOld ) { $i++; #print "$Screenkey <$i>\n"; #Debug $HashCount{$Screenkey}{$i} = "\\t \\t \\t \\t\& \\mytabhead{$Description} \\t\& $Type \\t\\\\ \\hline \\n $i - $Screenkey - $ScreenkeyOld"; } else { $i = 1; #print "$ScreenkeyOld -> $Screenkey <$i>\n"; #Debug $HashCount{$Screenkey}{$i} = "\\mytabhead{$Screenkey} \\t\& \\mytabhead{$Description} \\t\& $Type \\t\\\\ \\hline \\n $i - $Screenkey - $ScreenkeyOld"; } $ScreenkeyOld = $Screenkey; } use Test::More tests=>1; is_deeply \%HashCount, { 'Alarms' => { '0' => 3, '1' => '\\mytabhead{Alarms} \\t& \\mytabhead{Alarm Trigger} \\t& Momentary \\t\\\\ \\hline \\n 1 - Alarms - Trend to USB', '2' => '\\t \\t \\t \\t& \\mytabhead{Alarm Acknowledge} \\t& On/Off \\t\\\\ \\hline \\n 2 - Alarms - Alarms', '3' => '\\t \\t \\t \\t& \\mytabhead{Alarm Reset} \\t& On/Off \\t\\\\ \\hline \\n 3 - Alarms - Alarms', }, 'Flow Diagram' => { '0' => 3, '1' => '\\mytabhead{Flow Diagram} \\t& \\mytabhead{Sequence Advance} \\t& Momentary \\t\\\\ \\hline \\n 1 - Flow Diagram - Alarms', '2' => '\\t \\t \\t \\t& \\mytabhead{Sequence Hold} \\t& Momentary \\t\\\\ \\hline \\n 2 - Flow Diagram - Flow Diagram', '3' => '\\t \\t \\t \\t& \\mytabhead{Sanitize Enable/Disable} \\t& On/Off \\t\\\\ \\hline \\n 3 - Flow Diagram - Flow Diagram', }, 'Trend to USB' => { '0' => 1, '1' => '\\mytabhead{Trend to USB} \\t& \\mytabhead{Start/Stop Trend Toggle} \\t& On/Off \\t\\\\ \\hline \\n 1 - Trend to USB - Old', }, } or diag explain \%HashCount;