我有这个代码

#!/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";
}

不过,出于可读性考虑,我会坚持与您进行第一次比较。

09-11 18:41