I am looking for a Perl script which can give me the last Monday for any specified date.
e.g. For date 2011-06-11, the script should return 2011-06-06
Pretty simple stuff using the standard Perl library.
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Time::Local;
use POSIX 'strftime';
my $date = shift || die "No date given\n";
my @date = split /-/, $date;
$date[0] -= 1900;
$date[1]--;
die "Invalid date: $date\n" unless @date == 3;
my $now = timelocal(0, 0, 12, reverse @date);
while (strftime('%u', localtime $now) != 1) {
$now -= 24 * 60 * 60;
}
I'll leave it as an exercise for the reader to look up the various modules and functions used.
It's probably even simpler if you use DateTime.