【发布时间】:2020-10-17 09:38:13
【问题描述】:
我有一个字符串,当我用变量检查它时,它没有给我预期的结果。通过使用模式匹配机制,它可以正常工作。
这是 Perl 中的预期行为。如果不是,如何在不使用模式匹配的情况下解决此问题。
代码如下:
#!/usr/bin/perl
use strict;
use warnings;
my $day_of_week = "Monday";
if (($day_of_week ne "Monday") or ($day_of_week ne "Tuesday")){
print "In If. Today is $day_of_week.\n";
} else {
print "In else part\n";
}
这应该给出如下输出:
In else part
但它给了我:
In If. Today is Monday.
当我使用如下模式匹配更改if 条件时,它工作正常。
if ($day_of_week !~ /Monday|Tuesday) {
我担心的是为什么字符串匹配不符合条件。我在这里做错了吗?
【问题讨论】:
-
我认为你的意思是
if (not (($day_of_week eq "Monday") or ($day_of_week eq "Tuesday"))),而不是你写的:if (($day_of_week ne "Monday") or ($day_of_week ne "Tuesday")) -
@HåkonHægland 你是对的。这意味着多个模式不适用于
ne条件? -
ne :如果左参数是字符串不等于右参数,则返回 true。 or :称为逻辑或运算符。如果两个操作数中的任何一个不为零,则条件为真。在您的情况下
("$day_of_week" ne "Monday")返回零,但对于这种情况 `("$day_of_week" ne "Tuesday") 返回 1,因此条件变为真。 and: 运算符:称为逻辑与运算符。如果两个操作数都为真,则条件为真。 -
$foo ne 'bar' or $foo ne 'baz'之类的东西总是正确的;如果任一操作数为真,则 or 表示真,并且$foo始终是ne至少您的多项选择之一
标签: perl if-statement string-matching