use Time::Local qw( timelocal_nocheck ); use POSIX qw( strftime ); my ($sec,$min,$hour,$day,$mon,$year) = localtime; for (0..3) { my $time = timelocal_nocheck($sec,$min,$hour,$day,$mon-$_,$year); print(strftime("%Y-%m", localtime($time)), "\n"); }