[Moscow.pm] Обработка исключений

Dmitry Karpich meettya на gmail.com
Чт Фев 10 01:17:14 PST 2011


Я вот собираюсь смотреть в сторону AOP для таких вещей, как раз чтобы не закидывать код кучей эвалов.
Мухи отдельно, котлеты отдельно.
Явцы до того же дошли, кстати.
Докладец был на Питерской конференции, запись есть в онлайне и куча инфы на IBM-овском сайте про AOP как парадигму и принципы использования.


On Feb 10, 2011, at 12:01 PM, Alexey Shrub wrote:

> Всем привет,
> решил тут покрасивше сделать обработку исключений, бегло глянул - полно
> модулей которые делают джаваподобный синтаксис, но честно говоря нет
> желания глубоко в них вникать, предполагаю что у всех у них могут быть
> проблемы как например у Error.pm - появляются замыкания там где их никто
> не ждёт
> http://axkit.org/docs/presentations/tpc2001/exceptions.axp/a.pdf
> понятное дело что он работает в куче проектов, справляются как-то, но
> нет желания выискивать проблемы возникшие из-за подобных вещей (хотя
> Try::Tiny возможно неплохой вариант - юзал кто?).
> Поэтому решил использовать чисто перловый синтаксис и нарисовал такую
> конструкцию:
> 
> use strict;                                                                                                                    
> use feature ':5.10';                                                                                                           
> use Carp;                                                                                                                      
> use ExceptionTest;                                                                                                             
> 
> 
> my $obj = new ExceptionTest();                                                                                                 
> 
> eval {                                                                                                                         
>  $obj->function1();                                                                                                           
>  1;                                                                                                                           
> } or do { given( $@ ) {                                                                                                        
>  when ( $_->isa('Exception::XML') ) {                                                                                     
>    say 'XML error';                                                                                                           
>  }                                                                                                                            
>  when ( $_->isa('Exception::HTTP') ) {                                                                                    
>    say 'HTTP error';                                                                                                          
>  }                                                                                                                            
>  default { croak 'Unknown error: '.$_ }                                                                                       
> }}
> 
> в методе function1 исключения генерятся так (объекты исключений
> самописные для примера)
> die new Exception::HTTP( code => 404, message => 'Not Found' );
> В многопоточной среде видимо нужно ещё в один блок заворачивать и
> локализовать в нём $@, но тогда совсем уродливо будет
> 
> С точки зрения синтаксиса не идеально, к сожалению не работает без do
> т.е. хотелось бы иметь вместо
> } or do { given( $@ )
> } or given( $@ ) 
> 
> тогда синтаксил был бы чище, но не получается, получаю синтаксическую
> ошибку - не понимаю почему, может кто знает?
> 
> 
> 
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org



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