use Time::Local 'timelocal_nocheck'; my ($m, $d, $y) = (8, 1, 2003); ## list dates between 0 and 6 days ago: my @dates; for my $days_ago (0 .. 6) { my @date_info = localtime timelocal_nocheck(0, 0, 0, $d-$days_ago, $m-1, $y-1900); push @dates, sprintf("%s-%s-%s", $date_info[4]+1, $date_info[3], $date_info[5]+1900); } ## convert list of dates to a regex my $regex = join "|", map quotemeta, @dates; print "$regex\n"; ## now you can do stuff like; ## if ($line =~ /^($regex)/) { ## print "this happened last week ($1)\n"; ## } __END__ 8\-1\-2003|7\-31\-2003|7\-30\-2003|7\-29\-2003|7\-28\-2003|7\-27\-2003|7\-26\-2003