Проблема
Многие используют Try::Tiny. Все в этом модуле хорошо, только не хватает вот чего-то вроде:
try { die Class1->new(); } catch('Class1') { # Catch all exceptions of Class1 } catch('Class2') { # Catch all exceptions of Class2 } catch { # Catch other exceptions }К сожалению, сделать такой синтаксис, не убрав "::Tiny" с названия модуля, не так просто. Кроме того, переписывать Try::Tiny вообще нет никакого желания.
Решение 1
Немного подумав я пришел к такому варианту:try { die Class1->new(); } catch { when ('Class1') { # Catch all exceptions of Class1 } when ('Class2') { # Catch all exceptions of Class1 } default { # Catch other exceptions } }Чтобы такой синтаксис заработал необходимо перегрузить "~~" ("Smart match") для ваших объектов исключений. Вот пример реализации
Решение 2
Если нет возможности перегрузить "~~", то можно пойти другим путем, добавить некий хелпер, например "e"
Важно!!! Нужно помнить, что код после блока "default" не будет выполнен!
0 коммент.:
Отправить комментарий
Не забудьте добавить себя в постоянные читатели и включить уведомления о новых комментариях, либо воспользуйтесь RSS каналом ;)