Почему в Perl 5 оператор Smart-Match считается сломанным? [закрыто]

17

Я видел множество комментариев по всему интернету. Оператор умного матча Perl не работает . Я знаю, что изначально он был частью Perl 6, затем был реализован в Perl 5.10 по сравнению со старой версией спецификации, а затем был исправлен в 5.10.1 для соответствия текущей спецификации Perl 6.

Устранена ли проблема в 5.10.1+ или есть другие проблемы с оператором smart-match, которые делают его проблематичным на практике?

Какие проблемы?

Существует ли еще более обновленная версия (возможно, Perl 6), которая устраняет проблемы?

Изменить: Чтобы уточнить, я не спрашиваю об ошибках, а скорее мнение, что предполагаемое поведение ~~является плохим.

Шон Макмиллан
источник
Разве это не было бы лучше для SO?
3
Так что, кажется, ненавидит вопросы, на которые невозможно ответить с помощью фрагментов кода в наши дни.
Шон Макмиллан
2
Я не думаю, что он относится к SO, он требует концептуального объяснения того, почему оператор Perl Smart-Match считается неработающим.
Яннис
1
Из того, что я вижу в вашей ссылке, видно, что smart-match является (или был) рекурсивным, поэтому он может привести к бесконечной рекурсии только потому, что массив (возможно косвенный) содержит ссылку на себя.
user281377 28.11.11
2
@SeanMcMillan - ТАК ненавидит много вещей в эти дни: /
Ладья

Ответы:

14

Люди часто путают проблемы, возникающие с оператором smartmatch, с проблемами, возникающими с given/whenконструкцией, например, проблема лексики $_.

Я пришел к мнению, что если вы используете оператор smartmatch только для литералов, то вы не сойдете с ума. Я не могу дать никаких обещаний о любой другой ситуации. Попытки выяснить, что $a ~~ $bделает, достаточно, чтобы заставить любого порядочного человека начать кричать в безумии и вообще взять другой язык программирования.

Или, по крайней мере, это то, что я получил от Ларри, когда он редактировал раздел smartmatch 4-го издания Programming Perl .

tchrist
источник
4

Оператор умного матча не был «сломан» , но в нем было много ошибок. Perl v5.12 исправил это, а Perl v5.14 усовершенствовал его ИМХО. Итак, чтобы ответить на ваш вопрос, Perl v5.12 и выше исправляет эту проблему. Вы можете попробовать это с более поздними версиями Perl v5.10, но я знаю, что это работает лучше в Perl 5.12+.

Редактировать: чтобы ответить на ваши изменения, смотрите этот блог . Прочитав статью, я считаю, что она достаточно ответила на ваш вопрос.

динамический
источник