我希望我的.pl在每天,每周和每月结束时执行一项功能。该函数将做的是在一天结束时从html中获取一个整数并将其存储在.txt中以用于创建图形。
我已经知道如何使用perl脚本实现CGI和JS,所以这没有问题。我不清楚DateTime对象是否可以以这种布尔类型的方式使用。这听起来很简单,所以我希望有一个简单的答案。
答案 0 :(得分:3)
目前还不清楚你的解决方案是否必须是全方位的。
如果不是all-perl,你可以使用系统的调度程序(cron
进行“每天结束时”和“每周末”(后者只是指周日结束)。 Unix / Linux / MacOS,Windows上的AT
pr Windows Scheduler。
对于月末,您可以每天运行脚本,但在开始时,如果不是月末,则退出。月底(和周末作为奖金)的逻辑将使用类似的东西:
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
}
答案 1 :(得分:0)
以下是如何使用DateTime
触发函数的简单示例:
use 5.012;
use warnings;
use DateTime;
my $now = DateTime->now;
# example queue
my @jobs = (
{ after => $now->clone->subtract( hours => 1 ), sub => undef }, # done
{ after => $now->clone->subtract( hours => 1 ), sub => sub{ say "late" }},
{ after => $now->clone, sub => sub{ say "now" }},
{ after => $now->clone->add( hours => 1 ), sub => sub{ say "not yet" }},
);
for my $job (@jobs) {
if ($job->{after} <= $now && $job->{sub}) {
$job->{sub}->();
$job->{sub} = undef; # ie. clear from queue
}
}
以上内容将late
&amp;仅now
。
CPAN上有几个DateTime模块可能会有所帮助。
或者,有一个名为Schedule::Cron