Что “~~” означает в Perl?

В ТАК ответ 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.

21
задан Community 23 May 2017 в 12:02
поделиться

4 ответа

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

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

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

27
ответ дан 29 November 2019 в 06:46
поделиться

Smart Match, см. perldoc perlsyn

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

19
ответ дан 29 November 2019 в 06:46
поделиться

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

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

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

5
ответ дан 29 November 2019 в 06:46
поделиться

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

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

5
ответ дан 29 November 2019 в 06:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: