|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Dmitry Grebeniuk 2:469/105 08 Jul 2003 15:44:14 To : All Subject : обработка вложенных исключительных ситуаций -------------------------------------------------------------------------------- Хочется сделать обработку вложенных исключительных ситуаций и их передачу наподобие такого: { local $SIG{'__DIE__') = sub { print "exc: $@" }; { F = open "< file" or die "file open error: $!"; my $cleanup = sub { close F }; my $exception_handler = sub { &$cleanup; die "$@ (after cleanup)"; }; local $SIG{'__DIE__') = $exception_handler; # работа с F, где может встретиться исключительная ситуация: die "file exception"; # &$cleanup; }; }; (пример с файлами совершенно условен) Конечно же, сия наивность не прокатит - в момент внутреннего die() $SIG{__DIE__} указывает на $exception_handler. Придумалось решение - обернуть внутреннюю функцию в eval { block }, после которого написать die "$@ (re-raised)" if $@; , но это не очень красиво, имхо. Можно ли без eval добиться подобного поведения - передачи исключительной ситуации "наверх" изнутри обработчика? К примеру, в C++, не к ночи будет помянут, это делается простым оператором throw без аргументов... bye --- GoldED+/LNX 1.1.5 * Origin: gds/FH (2:469/105) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/18413f0abf41.html, оценка из 5, голосов 10
|