Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何在每个月的第一个工作日运行脚本?_Perl_Unix - Fatal编程技术网

Perl 如何在每个月的第一个工作日运行脚本?

Perl 如何在每个月的第一个工作日运行脚本?,perl,unix,Perl,Unix,我必须在每个月的第一个工作日运行脚本。请建议我如何用Perl实现它 比方说,如果该国是国定假日,剧本应该在第二个工作日播出。 我有一个二进制文件,如果上一个工作日是特定国家/地区的假日,它将为我提供上一个工作日的输出。我建议您在周一至周五每天使用cron运行一次脚本 然后,脚本将进行初始测试,如果测试失败,则退出 测试将是(伪代码): 您必须编写自己的public\u holiday函数来返回一个真值,具体取决于某个日期是否是您所在州/国家的公共假日。CPAN包date::Manip有各种好东西

我必须在每个月的第一个工作日运行脚本。请建议我如何用Perl实现它

比方说,如果该国是国定假日,剧本应该在第二个工作日播出。
我有一个二进制文件,如果上一个工作日是特定国家/地区的假日,它将为我提供上一个工作日的输出。

我建议您在周一至周五每天使用
cron
运行一次脚本

然后,脚本将进行初始测试,如果测试失败,则退出

测试将是(伪代码):


您必须编写自己的
public\u holiday
函数来返回一个真值,具体取决于某个日期是否是您所在州/国家的公共假日。

CPAN包
date::Manip
有各种好东西来支持这类事情。”Date_NextWorkDay()对您来说似乎最合适。

您可以扩展“上一个工作日的输出”吗?如果不是假日,它会给出什么?今天的日期,输出将是“101001”,即yearmonthdate,如果我在8月1日运行,您可以扩展“在那个国家”吗?你对哪些国家感兴趣?但假设周一既不是假日也不是周末,它就开始了。。但是如何防止在星期二运行。它不会在星期二运行,因为上面的代码会检测到星期一是有效的一天,然后退出。阅读上面的伪代码。
if ( isWeekend( today ) ) {
    exit;
} elsif ( public_holiday( today ) ) {
    exit;
}
for ( day_of_month = 1; day_of_month < today; day_of_month++ ) {
    next if ( isWeekend( day_of_month ) );

    if ( ! public_holiday( day_of_month ) ) {
        # a valid day earlier in the month wasn't a public holiday
        # thus this script MUST have successfully run, so exit
        exit;
    }
}

# run script, because today is NOT the weekend, NOT a public holiday, and
#   no possible valid days for running exist earlier in this month
1;
sub isWeekend {
    my ( $epoch_time ) = @_;

    my $day_of_week = ( localtime( $epoch_time ) )[6];
    return( 1 ) if ( $day_of_week == 0 ); # Sunday
    return( 1 ) if ( $day_of_week == 6 ); # Saturday
    return( 0 );
}