Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 обработка вложенных исключительных ситуаций   Dmitry Grebeniuk   08 Jul 2003 15:44:14 
 Re: обработка вложенных исключительных ситуаций   Artem Chuprina   08 Jul 2003 18:44:11 
Архивное /ru.perl/18413f0abf41.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional