%jan = ('max' => 0, 'bytes' => 0); %feb = ('max' => 0, 'bytes' => 0); for (6..31) {$m[$_] = \%jan} for (32..59) {$m[$_] = \%feb} while(){ ($day, $value, $name) = split /\s+|$/; print "$day $value $name\n"; $m[$day]->{'max'} < $value ? ($m[$day]->{'max'} = $value, $m[$day]->{'bytes'} += $value, ++$m[$day]->{'files'}):( $m[$day]->{'bytes'} += $value, ++$m[$day]->{'files'}) ; $m[$day]->{$name}++; } print "jan\n"; foreach (sort keys %jan){ print "$_ $jan{$_}\n"; } print "feb\n"; foreach (sort keys %feb){ print "$_ $feb{$_}\n"; } __DATA__ 006 175 FILENAME 006 176 good.txt 006 12 bad.txt 007 1856 FILENAME 007 1854 good.txt 008 172 bad.txt 008 177 FILENAME 008 23 good.txt 010 42 bad.txt 032 175 FILENAME 033 2345 FILENAME 032 318 good.txt 033 100 bad.txt 034 175 FILENAME