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