Все уже знают про выход Perl 5.14, но почему везде пишут лишь про новые плюшки?! Но то что была наконец-то решена древняя проблема с обработкой исключений, никто и не вспоминает.
В Perl мы используем die для генерации исключения и блочный eval для перехвата. Конструкция, думаю, знакома всем:
Так вот, кроме того, что это выглядит коряво, так это еще и работает(до версии 5.14) не всегда хорошо. Проблема описана в моем посте "Чем плох eval?!"
В perl 5.14 произошли изменения в поведении die, warn и $@, что решило проблемы описанные в вышеупомянутом посте. Теперь можно не боятся, что деструктор затрет исключение. Также local $@ не испортит нам жизнь.
Более детально читайте в perldoc perldelta => Exception Handling.
Можно было бы отказаться и от Try::Tiny, но есть еще эстетические соображения :)
В 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 коммент.:
"Можно было бы отказаться и от Try::Tiny, но есть еще эстетические соображения :)"
Ну, кое-где эта эстетика мешает, типа return в mojolicious.
> Ну, кое-где эта эстетика мешает, типа return в mojolicious.
Я не в курсе, что там за такой мешающий return?
Отправить комментарий
Не забудьте добавить себя в постоянные читатели и включить уведомления о новых комментариях, либо воспользуйтесь RSS каналом ;)