print '%ERROR1: ' .Dumper \%ERROR1; 'Oracle' => { 'server1' => { 'BACKUP ALERT' => { 'DAILY' => { '1433471420' => 1 } }, 'FILESYSTEM ALERT' => { 'WARNING 85% FULL' => { '1433523904' => 1, '1433520305' => 1, '1433451904' => 1, '1433450109' => 1, '1433455504' => 1, '1433509506' => 1, '1433529308' => 1, '1433534713' => 1 } }, }, 'server2' => { 'FILESYSTEM ALERT' => { 'WARNING 85% FULL' => { '1433523635' => 1, '1433455225' => 1, '1433498427' => 1, '1433512846' => 1, '1433534424' => 1 } }, .. ... .. #### group Hostname Service Count State Alert Started Alert Duration Oracle server1 BACKUP ALERT 1 DAILY 1433471420 10 MINUTES Oracle server1 FILESYSTEM ALERT 8 WARNING 85% FULL 1433523904 1 HOUR Oracle server2 .. .. #### my @LIST = map { [ $_->[0], $_->[1], $_->[2], $_->[3], $_->[4], $_->[5],$_->[6] ] } sort { $a->[0] cmp $b->[0] || $b->[4] <=> $a->[4] || $a->[1] cmp $b->[1] || $a->[2] cmp $b->[2] || $a->[3] cmp $b->[3] } map { my $group = $_; map { my $host = $_; map { my $service = $_; map { my $state = $_; my $count = keys %{$ERROR1{$group}->{$host}->{$service}->{$state}}; my $ts1 = (sort (keys %{$ERROR1{$group}->{$host}->{$service}->{$state}}))[0]; my $ts2 = (sort(keys %{$ERROR1{$group}->{$host}->{$service}->{$state}}))[$count]; [ $group, $host, $service, $state, $count, $ts1, $ts2 ] } keys %{$ERROR1{$group}->{$host}->{$_}} } keys %{$ERROR1{$group}->{$_}} } keys %{$ERROR1{$_}} } keys %ERROR1; #### [ 'Oracle', 'server1', 'FILESYSTEM ALERT', 'WARNING 85% FULL', 8, '1433521920', { '' => undef } ], [ -- -