Что означает «~~» в Perl? - PullRequest
21 голосов
/ 22 июня 2010

В ответе SO daxim сообщает:

@array ~~ $scalar is true when $scalar is in @array

, на которые draegtun отвечает:

Начиная с 5.10.1+ важен порядок ~~.Таким образом, это должен быть $ scalar ~~ @ array

Как насчет небольшого учебника по ~~ со ссылкой (ями) на источник (и), включая следующие конкретные вопросы: Что такое ~~?Как называется ~~?Почему заказ имеет значение в одной версии, а не в предыдущей?

Обратите внимание, что хорошее резюме может не содержать всех деталей и может быть трудным для написания.Введение или учебник для начинающих были бы очень полезны, чтобы сэкономить время для кого-то, незнакомого с ~~, при расширении экспозиции этого Perlism.

Строки поиска : non-word-tilde-tilde non-word-at-sign.

Ответы [ 4 ]

27 голосов
/ 22 июня 2010

Ответ на вопрос «почему порядок имеет значение в одной версии, а не в предыдущей»: оператор умного сопоставления был плохо спроектирован в 5.10.0 таким образом, что затруднял его надежное использование, и сделал данное / когдаконструкция менее полезна, чем могла бы быть, поэтому семантика была изменена в 5.10.1, и все будущие версии будут делать вид, что версия 5.10.0 никогда не существовала.

В версии Smart Match 5.10.1+,левый операнд и правый операнд ~~ всегда обрабатываются по-разному.Как и в случае с оператором сопоставления регулярных выражений =~, левая сторона является «субъектом» сопоставления, а правая сторона - «шаблоном» для сопоставления - будь то простой скаляр, регулярное выражение, массив илиссылка на хеш, ссылка на код или что-то еще.Подробности подробно описаны в perlsyn.

Вам не стоит беспокоиться о версии 5.10.0, если вы уже не написали код, который зависит от семантики 5.10.0 (в этом случае вам следуетпереписать его, чтобы требовать 5.10.1, иначе он будет работать во всех будущих версиях perl).

19 голосов
/ 22 июня 2010

Smart Match, см. perldoc perlsyn

В ответ на запрос в комментарии я дам еще немного: Smart Match - оператор для произвольных типов данных, которыепытаясь понять смысл теста на равенство, не зная ничего, кроме типов аргументов, многие из тестов требуют сложных операций, таких как применение итераций и регулярных выражений

5 голосов
/ 22 июня 2010

Это оператор smartmatch .

В общем, когда вам нужна информация об операторах в Perl, смотрите Perldoc Perlop

5 голосов
/ 22 июня 2010

(украдено из Learn Perl): двоичный файл "~~" делает умное соответствие между своими аргументами.

http://perldoc.perl.org/perlsyn.html#Smart-matching-in-detail

Что это делает? «Это зависит» в основном от типа представленных аргументов. На странице, указанной выше, есть мучительные подробности о том, что это за вариации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...