Почему модуль Switch не рекомендуется использовать в Perl? - PullRequest
18 голосов
/ 13 апреля 2010

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

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

Ответы [ 3 ]

24 голосов
/ 13 апреля 2010
17 голосов
/ 15 апреля 2010

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

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

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

1 голос
/ 10 февраля 2017

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

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

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

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

...