Почему был Switch модуль устарел в Perl 5.12?
Я знаю, что a switch
/case
выполняется с elsif
, но мне это не очень нравится.
Почему был Switch модуль устарел в Perl 5.12?
Я знаю, что a switch
/case
выполняется с elsif
, но мне это не очень нравится.
Perl 5.10 представил реальный коммутатор, называемый given-when
Старый Switch используется фильтрующей источник и имел другое <а href= "http://search.cpan.org/perldoc?Switch#LIMITATIONS" rel= "nofollow noreferrer" > limitations.
Оригинальный 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
вы выполняете ровно одну ветвь.
Прежде всего, 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. Небезопасно использовать их, поскольку они будут изменяться в обратном-несовместимом виде (или, возможно, удалены) в будущем.