Поскольку первое делает (потенциально) два сравнения, первое сравнивает $nis
с $grp
и, если это не удается, сравнивает 'pre-'.$nis
с $grp
, тогда как второе будет только когда-либо делать одно сравнение, $nis || 'pre-'.$nis
против $grp
.
Ваша проблема в том, что $nis || 'pre-'.$nis
не является квантовой суперпозицией , которая может принимать любое значение в зависимости от того, как вы на это смотрите, это одно значение либо $nis
, либо 'pre-'.$nis
.Если $nis
является правдивым (то есть это не пустая строка, undef, число 0 или строка «0»), тогда это значение будет $nis
.Если нет, то это значение будет 'pre-'.$nis
(что, учитывая правила истинности, означает, что 'pre-'.$nis
будет когда-либо только 'pre-'
или 'pre-0'
).
Если вы хотите сравнить с двумязначения, как правило, вам нужно сделать два сравнения ... но вы можете сделать это конкретное сравнение за один шаг, сделав значение, которое вы проверяете по регулярному выражению:
if ($grp =~ /^(:?pre-)?$nis/) {
print "match3\n";
}
I 'Впрочем, я буду придерживаться вашего первого сравнения для удобства чтения.