Неясно, ДОЛЖНО ли ваше решение быть универсальным или нет.
Если НЕ all-perl, вы можете сделать что-то «в конце каждого дня» и «в конце каждой недели» (последнее означает просто конец воскресенья), используя планировщик вашей системы (cron
в Unix / Linux / MacOS, AT
пр Планировщик Windows в Windows).
В конце месяца вы можете запускать скрипт каждый день, но в начале, выходить, если не конец месяца. Логика для конца месяца (и конца недели в качестве бонуса) будет использовать что-то вроде:
use Time::Local qw ( timelocal_nocheck );
my @time_data = localtime() ;
my $current_dom = $time_data[3];
my $current_dow = $time_data[6];
$time_data[4]++; # Next month.
$time_data[3] = 0; # Last day of previous month.
@time_data = localtime ( timelocal_nocheck ( @time_data ) );
if ($current_dom == $time_data[3]) {
# Do end of month processing
}
if ($current_dow == 0) { # Sunday
# Do end of week processing
}
Наконечник шляпы: http://www.perlmonks.org/?node_id=418897