in reply to Given month last day

my $last_day_month = $t->month_last_day($month); #??
Won't work since month_last_day doesn't accept arguments; it returns the object attribute value. So you have to have an object created with the month in question in order to get the last day of the month.

But you can chain the method calls:

$last_day = Time::Piece->new->month_last_day;

What do you mean when you say # Create Time::Piece New Object for the dates? It would be helpful to know what you are trying to accomplish overall. The new() method without arguments creates an object for "now", and if you pass other attributes in but not the year, it will assume you mean the current year. So if you loop through the months and create a T::P object for each one, you will get the last day of the month for months in the current year. This is not accurate if you use the list for other years: as toolic said, due to leap years you will need pass the year to the object creator if you want your code to correctly handle years other than the current year.

#!/usr/bin/perl use strict; use warnings; use feature qw/ say /; use Time::Piece; for my $year (2015, 2016) { say sprintf("$year/%02d: ", $_), Time::Piece->strptime("$year $_", " +%Y %m")->month_last_day) for 1,2; } __END__
Output:
$ perl 1140366.pl 2015/01: 31 2015/02: 28 2016/01: 31 2016/02: 29 $
The way forward always starts with a minimal test.