use Date::Manip; use List::Util qw(reduce); sub earliest { reduce { Date_Cmp( $a , $b ) < 0 ? $a : $b } map { ParseDate($_) } @_ } sub latest { reduce { Date_Cmp( $a , $b ) > 0 ? $a : $b } map { ParseDate($_) } @_ } my $e = earliest( @dates ); my $l = latest( @dates );