Обсуждение в другом вопросе заставило меня задаться вопросом: что в системах исключений для других языков программирования отсутствует Perl?
Встроенные исключения Perl - это несколько ad-hoc, поскольку они были, как и объектная система Perl 5, сортируются как запоздалая мысль, и они перегружают другие ключевые слова (eval
и die
), которые специально не предназначены для исключений.
Синтаксис может быть немного уродливым, по сравнению с языками со встроенным синтаксисом try/throw/catch type. Обычно я делаю это так:
eval {
do_something_that_might_barf();
};
if ( my $err = [email protected] ) {
# handle $err here
}
Существует несколько модулей CPAN, которые обеспечивают синтаксический сахар, чтобы добавить ключевые слова try/catch и обеспечить легкое объявление иерархии классов исключений и еще чего-то.
Основная проблема, которую я вижу в системе исключений Perl, - использование специального глобального [email protected]
для хранения текущей ошибки, а не выделенного механизма catch
-типа, который может быть более безопасным, с точки зрения перспективы, хотя я "никогда не сталкивался с какими-либо проблемами при запуске [email protected]
.