我有一个函数检查数据是否有效(即非负数),并且应该警告然后退出子。我遇到的问题是警告被抑制了。谁能解释为什么警告被压制?
#!/usr/bin/perl
use strict;
use warnings;
my $a = b();
print "Function returned $a\n";
sub b
{
my $a = -1;
($a >= 0) || (warn "\$a is negative" && return 0);
print "Passed negative check\n";
return 1;
}
我收到的输出是
Function returned 0
答案 0 :(得分:7)
优先权问题。
warn "\$a is negative" && return 0
装置
warn("\$a is negative" && return 0)
你想要
warn "\$a is negative" and return 0
或
warn("\$a is negative") && return 0
更好的是,应用这两个更改。
warn("\$a is negative") and return 0
当你在参数列表周围省略pare时,要小心陷阱。
通常情况下,如果RHS表达式包含流控制表达式,例如and
,or
,die
,{{return
,请使用next
和last
1}},redo
或exit
。
实际上,为什么要检查warn
返回的内容?你真的想要
warn("\$a is negative"), return 0
或
do { warn "\$a is negative"; return 0 }
所以我们得到
$a >= 0
or warn("\$a is negative"), return 0;
或
$a >= 0
or do {
warn "\$a is negative";
return 0;
};
但我怀疑大多数人更愿意看到
if ($a < 0) {
warn "\$a is negative";
return 0;
}