Почему Модуль коммутатора удерживался от использования в Perl 5.12?
Я знаю это a switch
/case
будьте сделаны с elsif
, но мне не нравится так очень.
Perl 5.10 представил реальный переключатель, называемый given-when
Старый Switch использовал исходный код фильтрация и другие ограничения .
Исходный коммутатор использует фильтр источника для выполнения своей работы, и это часто плохая идея. По сути, он предварительно обрабатывает ваш буквальный источник для создания нового кода, прежде чем perl его скомпилирует. Модуль никогда не предназначался для интенсивного использования, и это было скорее доказательством концепции, чтобы выяснить, как может выглядеть настоящая функция Perl.
Perl 5.10 добавил конструкцию given-when
, чтобы делать то, что большинство людей хотят от switch-case
, но она делает немного больше. Изучение Perl, 5-е издание посвящает ему целую главу вместе с умным сопоставлением. Однако в 7-м издании Learning Perl мы удалили эту главу, поскольку интеллектуальное сопоставление является экспериментальным, начиная с версии 5.18.
Вы не можете создать Perl given-when
с конструкциями if-elsif-else
. given-when
позволяет выполнять несколько блоков, а также добавлять межстраничный код. С помощью if-elsif-else
вы выполняете ровно одну ветвь.