use strict; use warnings; use Time::Local; use POSIX 'strftime'; while (1) { print "Enter year (yyyy) and month (mm), separated by a space: "; chomp(my $input = ); last if !$input; next unless $input =~ /(\d{4})\s+(\d\d?)/; my ($year, $month) = ($1, $2); my ($y, $m) = ($year, $month); $y -= 1900; if ($m == 12) { $m = 0; ++$y; } my $first = timelocal(0, 0, 0, 1, $m, $y); my $last = $first - 24*60*60; print "The last day of $month/$year will be a ", strftime('%A', localtime $last), "\n"; }