Я вот собираюсь смотреть в сторону 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
