Вы ищете паттерн-матче.
if ($firsttenchars =~ m/OK/) { ... }
Это возвращает истину, если символьная строка 'OK'
(чувствителен к регистру) находится где-то внутри $firsttenchars
. Меня не волнует, как часто, и как только он находит это, он перестает смотреть.
Материал внутри //
- это регулярное выражение, короткое regex. Они используются для креации узоров. =~
- это binding operator, который связывает скалярное значение ($firsttenchars
) с совпадением шаблонов. m
m//
является оператором сопряжения. Существует также s///
, который используется для замены чего-либо шаблоном.
Вы можете прочитать perlrequick, perlre и perlretut для получения дополнительной информации. regex tag wiki here on Stack Overflow - потрясающий ресурс, который можно начать с регулярных выражений.
Оператор ~
является оператором побитового отрицания.
Унарный "~" выполняет побитовое отрицание, то есть дополнение 1. Например, 0666 & ~ 027 - 0640. (См. Также Integer Arithmetic and Bywise String Operators.) Обратите внимание, что ширина результата зависит от платформы: ~ 0 имеет ширину 32 бит на 32-битной платформе, но шириной 64 бит на 64-битной платформе, поэтому, если вы ожидаете некоторую ширину бита, не забудьте использовать оператор «&» для маскировки лишних битов.
Оператор ~~
называется smart match. Это было какое-то время в Perl, и это должно было делать умные вещи. Он ведет себя по-другому, основываясь на том, что у вас есть на RHS (правая сторона) и LHS (левая сторона). Это все еще считается экспериментальным, и многие люди в сообществе Perl считают это спорным. Вы использовали его с двумя скалярами, причем оба они содержат строки. Это превращает его в eq
, который проверяет равенство строк.
Любые строки равенство
как: Любой эк Любой
Полный обзор всех операторов в Perl можно найти в perlop. Обратите внимание, что это ссылки на самую последнюю версию (5.24 на момент написания). Ваш Perl может быть старше, и, возможно, не все из них.
Более быстрый способ проверки, если 'OK'
содержится внутри этой строки является the index
built-in. Он возвращает первое вхождение строки в другую строку. Поскольку он возвращает -1
, если он не находит эту строку, вам нужно явно проверить возвращаемое значение.
if (index($firsttenchars, 'OK') != - 1) { ... }
Это немного больше, чем писать по шаблону, но это намного быстрее.
Когда я прочитал название, я подумал, что вам нужно нечеткое совпадение, то есть 'ofobra' вместо' foobar'. Возможно, поэтому вам не удалось найти то, что вы хотели, особенно если английский не является вашим родным языком. Иногда трудно точно описать проблему. – simbabque
Да, это так верно, мне даже потребовалось несколько минут, чтобы написать это название, хотя на самом деле я не спросил кого-то на своем родном языке. –