Подтвердить что ты не робот

Почему модуль Switch устарел на Perl?

Почему был Switch модуль устарел в Perl 5.12?

Я знаю, что a switch/case выполняется с elsif, но мне это не очень нравится.

4b9b3361

Ответ 2

Оригинальный Switch использует исходный фильтр для выполнения своей работы, и это часто бывает плохой идеей. По сути, он предварительно обрабатывает ваш литеральный источник для создания нового кода, прежде чем компилирует его perl. Модуль никогда не был предназначен для использования в значительной степени, и это было скорее доказательством концепции, чтобы понять, как может выглядеть реальная функция Perl.

Perl 5.10 добавила конструкцию given-when, чтобы делать то, что большинство людей хочет от switch-case, но это совсем немного. Learning Perl, 5th Edition посвящает ему целую главу наряду с интеллектуальным сопоставлением. Тем не менее, в Learning Perl 7th Edition мы удалили эту главу, поскольку интеллектуальное сопоставление является экспериментальным по сравнению с v5.18.

Вы не можете создать Perl given-when с конструкциями if-elsif-else. given-when позволяет выполнять несколько блоков, а также добавлять межстраничный код. С помощью if-elsif-else вы выполняете ровно одну ветвь.

Ответ 3

Прежде всего, Switch не устарел. Это включение в ядро ​​было устаревшим в 5.12. Все это означает, что, хотя коммутатор был связан с Perl 5.8 и 5.10, он не поставляется в Perl 5.14 и новее. Это НЕ означает, что люди должны прекратить использовать модуль. Модуль все еще может быть установлен из CPAN отдельно от perl.

Помните, что многие, включая меня, советуют другим избегать использования Switch, но это не зависит от его усталости от ядра, и это намного предшествует 5.12. Использование коммутатора может привести к очень странным и трудным для отладки ошибок, поскольку оно изменяет ваш код до того, как Perl увидит его, и при этом обеспечит минимальную выгоду, если он вообще есть.

По этой причине, и поскольку Perl начал предлагать собственную альтернативу (given - when), было решено, что Switch больше не будет связан с perl.

К сожалению, given - when имеет проблемы и ретроактивно обозначен как экспериментальный в 5.18. Небезопасно использовать их, поскольку они будут изменяться в обратном-несовместимом виде (или, возможно, удалены) в будущем.