while (<$fh_log>) { my ($month, $user) = /^LOGGING: \S+?-(\S+) \S+: STARTING FLUSH: (\S+)$/ or next; $flushes{$month}{$user}++; $flushes{$month}{TOTAL}++; } #### my %flushes = ( 'Aug-2008' => { 'ces' => 5, 'cjc' => 7, 'TOTAL' => 12, }, 'Jul-2008' => { 'mhs' => 1, 'ces' => 3, 'cjc' => 4, 'TOTAL' => 8, }, ); #### for my $month ( keys %flushes ) { print $month . "\n"; print 'Total: ' . $flushes{$month}{TOTAL} . "\n#####\n"; for my $user ( sort keys %{ $flushes{$month} } ) { next if $user eq 'TOTAL'; printf "%-20s%3d\n", $user, $flushes{$month}{$user}; } print "\n"; } #### for my $month ( keys %flushes ) { print $month . "\n"; print 'Total: ' . $flushes{$month}{TOTAL} . "\n#####\n"; for my $user ( sort { $flushes{$month}{$b} <=> $flushes{$month}{$a} } keys %{ $flushes{$month} } ) { next if $user eq 'TOTAL'; printf "%-20s%3d\n", $user, $flushes{$month}{$user}; } print "\n"; }