#!/usr/bin/perl -T
use strict;
use warnings;
use Date::Holidays::USFederal;
if ( is_usfed_holiday( '2018', '01', '01' ) ) { # strings
print "holiday\n";
}
else {
print "not holiday\n";
}
if ( is_usfed_holiday( 2018, 1, 1 ) ) { # numbers
print "holiday\n";
}
else {
print "not holiday\n";
}
exit;
not holiday
holiday
我认为Perl是一种基于上下文的语言,并且字符串在需要时自动用作数字。今天花了我一点调试时间。我不是专家,但这让我很困惑。
任何人都可以解释为什么会这样吗?
答案 0 :(得分:3)
is_usfed_holiday
使用join($;, @_)
作为哈希的关键字。因此,它使用字符串而不是其参数的数字。
解决方案:
is_usfed_holiday(0+$y, 0+$m, 0+$d)
is_usfed_holiday(map 0+$_, $y,$m,$d)
有人应与作者联系,提出以下问题:
is_usfed_holiday
应该对其输入进行规范化,以避免遇到问题。$;
。此外,有些人可能会发现is_usfed_holiday
的变体会使localtime
(例如is_usfed_holiday_time(localtime)
)的结果变得有用。