Я вот собираюсь смотреть в сторону 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
> [email protected] | http://moscow.pm.org

--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить