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