понедельник, 6 июня 2011 г.

Наконец-то исправлена обработка исключений в Perl 5.14

Все уже знают про выход Perl 5.14, но почему везде пишут лишь про новые плюшки?! Но то что была наконец-то решена древняя проблема с обработкой исключений, никто и не вспоминает.

В Perl мы используем die для генерации исключения и блочный eval для перехвата. Конструкция, думаю, знакома всем:
eval { 
  # some code 
  die "error"; 
  # some code  
}; 

if ($@) { 
    print "Error [$@] occured!"; 
}

Так вот, кроме того, что это выглядит коряво, так это еще и работает(до версии 5.14) не всегда хорошо. Проблема описана в моем посте "Чем плох eval?!"

В perl 5.14 произошли изменения в поведении die, warn и $@, что решило проблемы описанные в вышеупомянутом посте. Теперь можно не боятся, что деструктор затрет исключение.  Также  local $@ не испортит нам жизнь.

Более детально читайте в perldoc perldelta => Exception Handling.

Можно было бы отказаться и от Try::Tiny, но есть еще эстетические соображения :)

2 коммент.:

Meettya комментирует...

"Можно было бы отказаться и от Try::Tiny, но есть еще эстетические соображения :)"
Ну, кое-где эта эстетика мешает, типа return в mojolicious.

koorchik комментирует...

> Ну, кое-где эта эстетика мешает, типа return в mojolicious.
Я не в курсе, что там за такой мешающий return?

Отправить комментарий

Не забудьте добавить себя в постоянные читатели и включить уведомления о новых комментариях, либо воспользуйтесь RSS каналом ;)