use strict; use warnings; use Time::Piece; use Test::More tests => 366 * 2 + 1; my $dstr = '01/01/2023'; for (1 .. 366) { my $t = Time::Piece->strptime ($dstr, '%d/%m/%Y'); my $nt = $t - 86400; isnt $dstr, $nt->dmy ('/'); my $ddiff = $t->mday - $nt->mday; ok ($ddiff < 0 || $ddiff == 1), '1 day different or month wrap'; $dstr = $nt->dmy ('/'); } is $dstr, '31/12/2021';