Можно ли сопоставить частичное слово в perl при использовании оператора if (пример bash включен) - PullRequest
3 голосов
/ 08 ноября 2019

Как правильно сопоставить частичное слово в perl? Например, я хочу сопоставить «CentOS», чтобы сопоставить такие результаты, как CentOS 6, CentOS 7 и CentOS 8.

Я знаю, как это сделать в bash, например:

if [[ "$os" == *"CentOS"* ]]; then
   echo $centosversion
else
   echo $differentos
fi

В приведенном выше примере bash он найдет любой результат с «CentOS» внутри.

Как мне добиться этого с помощью приведенного ниже кода Perl?

if ($os eq "CentOS") {
    print "$centosversion";
} else {
    print "$differentos";
}

Я пытался использовать:

($os eq *"CentOS"*)

и

(($os eq *"CentOS"*))

Но это кажется неправильным?

Может быть, я делаю это совершенно неправильно, но я не знаю много о Perl. Я надеюсь, что кто-то может указать мне правильное направление.

1 Ответ

6 голосов
/ 08 ноября 2019

Вы можете использовать функцию index() - которая ищет строки внутри других строк.

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

Другой альтернативой может быть совпадение с регулярным выражением. Но для фиксированных строк это, вероятно, было бы излишним.

if ($os =~ /CentOS/) {
  print "$centosversion";
} else {
  print "$differentos";
}
...