[Moscow.pm] А как вы бросаете исключения?

Иван Бессарабов ivan на bessarabov.ru
Вт Авг 21 03:54:01 PDT 2012


В книге [Perl Best Practices ][1] есть глава Error Handling, где Damian Conway
очень подробно рассуждает об исключениях. Он приходит к идеи что стоит
создавать иерархии исключений с помощью [Exception::Class][2].

 [1]: http://shop.oreilly.com/product/9780596001735.do
 [2]: https://metacpan.org/module/Exception::Class

Иерархия исключений — это здорово, но иногда сильно избыточно. Perl die крут
тем что в качестве параметра он принимает скаляр, что позволяет
запихнуть в $@ объект (именно так и работает Exception::Class и другие
подобные модули) или же запихнуть в $@ ссылку на что-нибудь.

Так что, можно рассмотреть в качестве варианта кидать исключения как-то так:

    die { error_number => 123, error_text => 'login failed' };


21 августа 2012 г., 12:37 пользователь Alexandr Alexeev
<afiskon на gmail.com> написал:
> Сейчас я делаю примерно так:
>
> use Try::Tiny;
>
> try {
> # ...
> } catch {
>   if($_ =~ /LOGIN_FAILED/) {
>     # ...
>   } elsif($_ =~ /SOME_OTHER_ERROR/) {
>     # ...
>   } else {
>     die $_;
>   }
> };
>
> Не покидают мысли, что делаю что-то не так. Ну хотя бы потому что eq
> наверное будет побыстрее =~, а еще легко допустить опечатку (тесты -
> это хорошо, но прыгать без запасного парашюта знаете ли...). В общем,
> поведайте мне пожалуйста, как лично вы работаете с исключениями и что
> нынче принято считать best practice?
>
> --
> С уважением, Александр
> Личный блог: http://eax.me/
> Мой форум: http://it-talk.org/
> Мой Twitter: http://twitter.com/afiskon
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org


Подробная информация о списке рассылки Moscow-pm