|
|
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
|