use warnings; use strict; use Date::EzDate; use Data::Dumper; my @times = qw( 1176992127 1177011950 1177035464 1177059040 1177063718 1177074117 1177100432 1177135347 1177165344 1177193537 1177202407 1177222982 1177224344 1177271548 1177280164 1177290568 1177320406 1177369446 1177392779 1177418018 1177424739 1177450967 1177459364 1177488349 1177506719 1177533725 1177544267 1177554850 1177596791 ); my %date_count; foreach my $time (@times) { my $dt = Date::EzDate->new ($time); $date_count{$dt->{year}}++; $date_count{"$dt->{year}/$dt->{monthnum}"}++; $date_count{"$dt->{year}/$dt->{monthnum}/$dt->{dayofmonth}"}++; $date_count{"$dt->{year}/$dt->{monthnum}/$dt->{dayofmonth} $dt->{hour}"}++; } print "Year hits:\n", join ("\n", map {"$_ ($date_count{$_})"} sort grep {/^\d{4}$/} keys %date_count), "\n"; print "Day hits:\n", join ("\n", map {"$_ ($date_count{$_})"} sort grep {m!^\d{4}/\d\d/\d\d$!} keys %date_count), "\n"; #### Year hits: 2007 (29) Day hits: 2007/03/20 (5) 2007/03/21 (3) 2007/03/22 (5) 2007/03/23 (4) 2007/03/24 (2) 2007/03/25 (5) 2007/03/26 (4) 2007/03/27 (1)