@array ~~ $scalar is true when $scalar is in @array
на который отвечает draegtun:
От 5.10.1 + порядок ~~ важен. Таким образом это должен быть $scalar ~~ @array
Как насчет маленькой краткой информации о ~~
со ссылкой (ссылками) на источник (источники) включая следующие конкретные вопросы: Что ~~
? Что ~~
названный? Почему порядок имеет значение в одной версии, но не в предыдущей?
Обратите внимание, что хорошая сводка не может получить все подробности и может быть тверда записать. Введение или краткая информация были бы очень полезны, чтобы сэкономить время для кого-то незнакомого с ~~
при расширении воздействия этого Perlism.
Строки поиска: non-word-tilde-tilde
non-word-at-sign
.
На конкретный ответ «почему порядок имеет значение в одной версии, а не в предыдущей»: оператор интеллектуального сопоставления был плохо спроектирован в 5.10.0, что затрудняло надежное использование , и сделал данную конструкцию / when менее полезной, чем она могла бы быть, поэтому семантика была изменена с 5.10.1, и все будущие версии будут делать вид, что версии 5.10.0 никогда не существовало.
В версии 5.10.1+ версия интеллектуального сопоставления, левый операнд и правый операнд для ~~
всегда обрабатываются отдельно. Как и в случае с оператором сопоставления регулярных выражений = ~
, левая сторона является «субъектом» сопоставления, а правая часть - «шаблоном» для сопоставления - будь то простой скаляр или регулярное выражение, ссылка на массив или хэш, ссылка на код или что-то еще. Подробности подробно описаны в perlsyn.
Вам не следует вообще беспокоиться о версии 5.10.0, если вы еще не написали код, зависящий от семантики 5.10.0 (в этом случае вам следует переписать его так, чтобы он требовал 5.10.1, иначе он будет ломается во всех будущих версиях Perl).
Smart Match, см. perldoc perlsyn
По запросу в комментарии я дам немного больше: Smart Match - это оператор для произвольных типов данных, которые пытается понять смысл теста на равенство, зная не что иное, как типы аргументов, многие из тестов требуют сложных операций, таких как итерация и применение регулярного выражения
(украдено из Learn Perl): двоичный "~~" точно соответствует своим аргументам.
http://perldoc.perl.org/perlsyn.html#Smart-matching-in-detail
Что он делает? «Это зависит» в основном от типа предоставленных аргументов. На указанной выше странице есть мучительные подробности о том, какие есть варианты.
Это оператор smartmatch .
В общем, если вам нужна информация об операторах в Perl, см. Perldoc Perlop