在其他语言中我会写
testvar = onecondition OR anothercondition;
如果任一条件是,则testvar为true。但在Perl中,这并不像预期的那样有效。
我想检查一个内容变量为空或者与特定正则表达式匹配的情况。我有这个示例程序:
my $contents = "abcdefg\n";
my $criticalRegEx1 = qr/bcd/;
my $cond1 = ($contents eq "");
my $cond2 = ($contents =~ $criticalRegEx1);
my $res = $cond1 or $cond2;
if($res) {print "One or the other is true.\n";}
我原本期望$ res包含" 1"或者在使用if()进行测试时,它会变为真。但它包含空字符串。
如何在Perl中实现这一目标?
答案 0 :(得分:19)
在表达式周围加上括号
my $res = ($cond1 or $cond2);
或使用更高优先级||
运算符
my $res = $cond1 || $cond2;
因为您的代码被perl解释为(my $res = $cond1) or $cond2;
,或者更准确地说,
perl -MO=Deparse -e '$res = $cond1 or $cond2;'
$cond2 unless $res = $cond1;
如果您使用的是use warnings;
,它还会警告您$cond2
,
Useless use of a variable in void context
答案 1 :(得分:1)
@jackthehipster:你已经完成了所有事情,只需为$cond1 or $cond2
添加大括号,如下面的代码所示:
my $contents = "abcdefg\n";
my $criticalRegEx1 = qr/bcd/;
my $cond1 = ($contents eq "");
my $cond2 = ($contents =~ $criticalRegEx1);
my $res = ($cond1 or $cond2);
if($res) {print "One or the other is true.\n";}