如何使用DateTime对象执行功能?

时间:2010-08-16 19:03:20

标签: html perl datetime cgi

我希望我的.pl在每天,每周和每月结束时执行一项功能。该函数将做的是在一天结束时从html中获取一个整数并将其存储在.txt中以用于创建图形。

我已经知道如何使用perl脚本实现CGI和JS,所以这没有问题。我不清楚DateTime对象是否可以以这种布尔类型的方式使用。这听起来很简单,所以我希望有一个简单的答案。

2 个答案:

答案 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
}

帽子提示:http://www.perlmonks.org/?node_id=418897

答案 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

的完整cron克隆