我有这个代码
#!/usr/bin/perl
use warnings;
use strict;
my $nis = "qqq";
my $grp = "pre-qqq";
if ($nis eq $grp || 'pre-' . $nis eq $grp) {
print "match1\n";
}
if (($nis || 'pre-' . $nis) eq $grp) {
print "match2\n";
}
第一个
if
-语句起作用的地方,但是第二个不起作用。第二怎么了?
不用重复两次变量就可以做到吗?
最佳答案
因为第一个比较(可能)进行两个比较,第一个比较$nis
和$grp
,如果比较失败,则比较'pre-'.$nis
和$grp
,而第二个比较$nis || 'pre-'.$nis
和$grp
。
您的问题是$nis || 'pre-'.$nis
不是quantum superposition,它可以根据您的外观采用任何一个值,而是$nis
或'pre-'.$nis
的单个值。如果$nis
是真实的(也就是说,它不是一个空字符串,undef,数字0或字符串“0”),那么该值将是$nis
。如果不是,则该值为'pre-'.$nis
(给定真实性规则,这意味着'pre-'.$nis
只能是'pre-'
或'pre-0'
)。
如果要与两个值进行比较,通常需要进行两个比较...,但是可以通过对正则表达式进行测试的值来一步完成此特定比较:
if ($grp =~ /^(:?pre-)?$nis/) {
print "match3\n";
}
不过,出于可读性考虑,我会坚持与您进行第一次比较。