use Time::Local; sub is_last_day_of_month { my($y,$m,$d) = $_[0] =~ /(.{2,4})(..)(..)/; (gmtime(timegm(0,0,12,$d,$m-1,$y)+24*60*60))[4] != $m-1 } my $a = shift; print is_last_day_of_month($a) ? "$a: is last day of month\n" : "$a: is NOT last day of month\n";