Почему "x = a или b" не работает в Perl?
На других языках я бы написал
testvar = onecondition OR anothercondition;
чтобы testvar был истинным, если любое из условий выполнено. Но в 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?
2 ответа
Положите скобки вокруг выражения,
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
@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";}