Perl 5.20 и судьба умного соответствия и заданного-когда?

Я только что установил Perl 5.18, и я получаю много предупреждений, подобных этому,

given is experimental at .\[...].pl line [...].
when is experimental at .\[...].pl line [...].
Smartmatch is experimental at C:/strawberry/perl/site/lib/[...] line [...].

Взглянув на эти предупреждения, о которых я никогда не слышал нигде, я мог найти это только в двух местах,

Perl Delta по-прежнему делает все возможное, чтобы упомянуть о том, что происходит с этими функциями, на полпути вниз, погруженным в стручок,

Интеллектуальное совпадение, добавленное в v5.10.0 и значительно переработанное в версии 5.10.1, является регулярной жалобой. Хотя есть несколько способов, в которых это полезно, он также оказался проблематичным и запутанным как для пользователей, так и для разработчиков Perl. Был предложен ряд предложений о том, как наилучшим образом решить эту проблему. Понятно, что smartmatch почти наверняка либо изменится, либо уйдет в будущем. Опираясь на его текущее поведение не рекомендуется. Предупреждения будут теперь выдаваться, когда парсер увидит ~~, данный или когда.

Я смущен тем, как можно было потянуть самые значительные изменения в Perl за последние 10 лет. Я начал использовать given, when и smartmatch повсюду. Есть ли больше информации об этих фьючерсах? Как кто-то находит их "запутанными"? Как эти функции могут измениться? Есть ли план для реализации этих функций с помощью модуля?

Ответ 1

Существуют проблемы с дизайном интеллектуального сопоставления. Решение о том, что должен делать любой данный TYPE ~~ TYPE, является наиболее часто неочевидным, непоследовательным и/или спорным. Идея заключается не в том, чтобы удалить интеллектуальное сопоставление; это исправить.

В частности, ~~ будет значительно упрощен, как вы можете видеть в предложении с помощью насоса 5.18. Решения о том, как должны соответствовать две вещи, будут выполняться с помощниками, такими как те, которые уже существуют в Smart:: Match.

... ~~ any(...)

Гораздо более читаемый, гораздо более гибкий (полностью расширяемый) и решает ряд проблем (например, "Когда X следует считать числом и когда его следует считать строкой?" ).

Ответ 2

Некоторые идеи могут быть получены путем чтения rjbs, предложенных изменений в smartmatch. В конце концов, он является насосом (менеджером релиза Perl), поэтому его комментарии и его взгляд на будущее более актуальны, чем большинство. Существует также много комментариев сообщества по этому вопросу, например, здесь. "Экспериментальный" статус действует, потому что, поскольку в будущем ситуация может измениться, он обязан информировать пользователей об этом факте, даже если мы не знаем, какие эти изменения будут.

Ответ 3

Хорошо, это то, что сказано в описании патча, который понизил этот набор возможностей до эксперимента:

Поведение данных /, когда/~~, вероятно, изменится в perl 5.20.0: либо умное совпадение будет удалено или удалено. В свете этого, пользователи этих функций должны быть предупреждены. Категория Для этих функций должно быть выдано предупреждение "experimental:: smartmatch" когда они используются.

Итак, если вы действительно можете отключить эти предупреждения, что-то вроде этого (источник):

no if $] >= 5.018, warnings => "experimental::smartmatch";

... это просто отводит глаза от проблемы.