Проблема
Многие используют 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 каналом ;)