use strict; use warnings; use DateTime; my @dirs = ... DIR: for my $dir (@dirs) { next DIR if (!($dir =~ /(\d{4})_(\d{2})_(\d{2})_(\d{2})/)); my $dir_time = DateTime->new( year => $1, month => $2, day => $3, hour => $4, time_zone => 'floating', ); if (0 <= DateTime->compare($dir_time, DateTime->now(time_zone => 'floating')) { print "whatever\n"; } }