使用if语句时是否可以在perl中匹配部分单词(包括bash示例)

Joa*_*nne 3 perl if-statement

在perl中匹配部分单词的正确方法是什么?例如,我要匹配“ CentOS”,以便匹配CentOS 6,CentOS 7和CentOS 8之类的结果。

我知道如何在bash中执行此操作,如下所示:

if [[ "$os" == *"CentOS"* ]]; then
   echo $centosversion
else
   echo $differentos
fi
Run Code Online (Sandbox Code Playgroud)

在上面的bash示例中,它将找到带有“ CentOS”的任何结果。

如何使用下面的perl代码实现此目标?

if ($os eq "CentOS") {
    print "$centosversion";
} else {
    print "$differentos";
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用:

($os eq *"CentOS"*)
Run Code Online (Sandbox Code Playgroud)

(($os eq *"CentOS"*))
Run Code Online (Sandbox Code Playgroud)

但这似乎是不正确的?

也许我完全错了,但是我对perl不太了解。我希望有人可以指出正确的方向。

Dav*_*oss 6

您可以使用index()函数-在其他字符串中查找字符串。

if (index($os, 'CentOS') != -1) {
  print "$centosversion";
} else {
  print "$differentos";
}
Run Code Online (Sandbox Code Playgroud)

另一个选择是正则表达式匹配。但是,对于固定的字符串,这可能会过大。

if ($os =~ /CentOS/) {
  print "$centosversion";
} else {
  print "$differentos";
}
Run Code Online (Sandbox Code Playgroud)

  • 我个人认为,即使固定字符串的正则表达式过大,它也更易于阅读,因此比“ index”更好。 (3认同)