LINUX.ORG.RU

use Switch в Perl: насколько это ужасно?

 ,


0

1

Использую switch в своих программах, вроде всё хорошо было, но тут узнал, что это на самом деле парсинг и генерация перл-кода, и что это может привести к феерическим плохо диагностируемым глюкам.

Кто что думает по этому поводу?

И точно ли Moo с Moose такие штуки не используют? Уж больно там подозрительным образом синтаксис не похож на нативный перловый...

★★★★★

Кто что думает по этому поводу?

Использую нативный smart matching (который в свежих версиях будут выпиливать) и given-when.

Moose использовал в каталисте и dbix::class - вполне годно (хоть и считаю все это слишком сложным, тяжелым, временами глючным).

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

Да, может и проводит, но это устовшаяся практика, это умеют готовить и хорошо получается. Глюки можно даже с AUTOLOAD поймать, в перле таких инструментов хватает.

outtaspace ★★★
()

Использую elsif в простых случаях (ЕМНИП так в книге с верблюдом и советуют вместо switch), иначе хеш с функциями:

my %h=(
  a=>sub{},
  b=>sub{}
);
$h{$foo}->();

Switch в виде отдельного модуля не нужен

disarmer ★★★
()
Последнее исправление: disarmer (всего исправлений: 1)

Не пользуюсь и другим не советую. Да и автор модуля в секции BUGS всё описал.
А в Moose для нового синтаксиса вроде используются прямые манипуляции с optree. Типа как в Deve::Declare и Syntax::Feature::. Что более глобально и надёжно.

Olegymous ★★★
()
Ответ на: комментарий от joy4eg
use 5.010;

Или

use feature qw(switch);

Но smart match в последнее время не любят (начиная с 5.18). К свичу это тем боком, что given..when использует smart match

KennyMinigun ★★★★★
()
Последнее исправление: KennyMinigun (всего исправлений: 1)
for ($value) {
  when ($a) { ... }
  when ($b) { ... }
}

Безопасно и надежно. Про given() все расписано. Минус у when() в том, что для чисел имеется UB.

gh0stwizard ★★★★★
()

может привести к феерическим плохо диагностируемым глюкам

perl

Нашел чего бояться

buddhist ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.