Perl 字符串和数字产生不同的结果 输出

Perl 字符串和数字产生不同的结果 输出,perl,Perl,我认为Perl是一种基于上下文的语言,字符串在需要时会自动用作数字。今天这花了我一点调试时间。我不是专家,但这让我困惑 有人能解释为什么会这样吗?是usfed\u holiday使用join($;,@)作为散列的键。因此,它使用了严格化,而不是将其论点具体化 解决方案: not holiday holiday 有人应联系作者提出以下问题: is_usfed_holiday应规范其输入,以避免遇到问题 模块不应依赖于$的现有值 另外,有些人可能会发现,的一个变体is_usfed_holid

我认为Perl是一种基于上下文的语言,字符串在需要时会自动用作数字。今天这花了我一点调试时间。我不是专家,但这让我困惑


有人能解释为什么会这样吗?

是usfed\u holiday
使用
join($;,@)
作为散列的键。因此,它使用了严格化,而不是将其论点具体化

解决方案:

not holiday
holiday

有人应联系作者提出以下问题:

  • is_usfed_holiday
    应规范其输入,以避免遇到问题
  • 模块不应依赖于
    $的现有值

另外,有些人可能会发现,
的一个变体is_usfed_holiday
采用了
localtime
的结果(例如,
is_usfed_holiday_time(localtime)
)很有用。

我一意识到发生了什么,就实施了+0解决方案。谢谢请注意,污点标志
-T
在shebang行上无效。@Borodin我使用${^taint}验证了我系统上的污点标志,并进行了测试。它工作并产生预期的效果。“无用”是可移植的东西吗?当perl读取shebang行时,在编译过程中应用污染已经太晚了。这是一个致命错误,除非
-T
也应用于命令行,在这种情况下,它在shebang行上的外观是不相关的。我想你可以说它有一些用处,因为它可以防止代码在没有启用污染模式的情况下运行,但是它不能自己启用模式
not holiday
holiday
is_usfed_holiday(0+$y, 0+$m, 0+$d)

is_usfed_holiday(map 0+$_, $y,$m,$d)