【发布时间】:2011-09-06 03:37:51
【问题描述】:
尝试在 Perl 中清除一些变量,以下代码效果很好:
if ($year =~ /^(\d{4})$/) {
$year = $1;
} else {
&invalid("year");
}
在上面的例子中,$1 包含 $year(如果有效)。但是,当使用?: 运算符时,$1 在有效时包含“1”:
($year =~ /^(\d{4})$/) ? $year = $1 : &invalid("year");
有人知道我哪里有错吗?我很困惑为什么会这样。它只发生在这台机器上。或者更确切地说,我已经成功使用了 ?运算符用于返回多年的正确匹配变量。我还没有在任何其他机器上尝试过这段代码。
This is Perl, v5.8.8 built for x86_64-linux-thread-multi
【问题讨论】:
-
您确定这是您正在运行的代码吗?您能否包含一个小型的独立脚本来演示您的问题?
-
由于优先级问题,条件运算符内的赋值通常不正确。 (例如
c ? x=1 : x=2表示(c ? x=1 : x) = 2)您提供的代码没有您描述的问题或任何优先级问题。 -
OT:不要像
&invalid(...)那样用&调用子程序;它不符合您的预期...使用invalid(...) -
@pavel,或者更准确地说,它比大多数人预期的要多。 (它确实调用了 sub,这是预期的行为。)
-
@jonathan:它禁用原型检查,更重要的是,当不带参数使用时,子例程将使用
@_数组,就像调用例程时一样...
标签: regex perl cgi taint-checking