use List::Util qw( max ); use POSIX qw( strftime ); my %by_date; for my $time (@times) { my $date = strftime('%Y-%m-%d', localtime($time)); $by_date{$date} = max($by_date{$date}||0, $time); } my @filtered_times = map $by_date{$_}, sort keys(%by_date);