У меня есть куча вопросов о том, как люди используют исключения в Perl. Я включил некоторые справочные примечания об исключениях, пропустите это, если хотите, но, пожалуйста, найдите минутку, чтобы прочитать вопросы и ответить на них.
Спасибо.
Фон для исключений Perl
Perl имеет очень базовую встроенную систему исключений, которая предоставляет spring -board для более сложного использования.
Например, die "I ate a bug.\n";
выдает исключение со строкой, назначенной [email protected]
.
Вы также можете выбросить объект вместо строки: die BadBug->new('I ate a bug.');
Вы даже можете установить обработчик сигнала, чтобы поймать suedo-сигнал SIGDIE. Здесь обработчик, который пересказывает исключения как объекты, если они еще не были.
$SIG{__DIE__} = sub {
my $e = shift;
$e = ExceptionObject->new( $e ) unless blessed $e;
die $e;
}
Этот шаблон используется в ряде модулей CPAN. но perlvar говорит:
Из-за сбоя реализации, $SIG { DIE} крючок называется четным внутри eval(). Не используйте это для переписать ожидающее исключение в [email protected]или как странная замена для переопределения CORE:: GLOBAL:: die(). Это странное действие на расстоянии может быть зафиксировано в будущий выпуск, чтобы $SIG { DIE} вызывается только в том случае, если ваша программа около выхода, как и оригинал намерение. Любое другое использование устарело.
Итак, теперь я задаюсь вопросом, является ли объектизация исключений в сигди злом.
Вопросы
-
Используете ли вы объекты исключений? Если да, то какой и почему? Если нет, почему бы и нет?
-
Если вы не используете объекты исключений, что побуждает вас их использовать?
-
Если вы используете объекты исключений, что вы ненавидите о них и что может быть лучше?
-
Является ли объектизация исключений в обработчике DIE плохими идеями?
-
Где я должен объективировать свои исключения? В моей обертке eval {}? В обработчике sigdie?
-
Есть ли какие-либо документы, статьи или другие ресурсы об исключениях вообще и в Perl, которые вы найдете полезными или просвещенными.
Перекрестная ссылка на Perlmonks.