¿Cuál es la mejor manera de manejar excepciones en Perl?


He notado que Exception.pm y Error.pm no parecen ser ampliamente utilizados en la comunidad de Perl. ¿Se debe a la gran huella de eval para el manejo de excepciones?

También los programas Perl parecen tener una política mucho más indulgente con respecto al manejo de excepciones en general. ¿Hay una razón convincente para esto?

En cualquier caso, ¿cuál sería el mejor método para el manejo de excepciones en Perl?

Author: the Tin Man, 2010-10-24

1 answers

El consenso de la comunidad Perl parece ser que Try::Tiny es la forma preferida de hacer el manejo de excepciones. La" política indulgente " a la que se refiere probablemente se deba a una combinación de:

  • Perl no es un lenguaje completamente orientado a objetos. (por ejemplo, en contraste con Java donde no puedes evitar lidiar con excepciones.)
  • Los antecedentes de muchos desarrolladores de Perl. (Idiomas como C1 y shell no tiene mecanismos de excepción.)
  • El tipo de tareas la gente tiende a usar Perl para. (Pequeños scripts para munging de texto y generación de informes donde no se necesita el manejo de excepciones.)
  • Perl no tiene un mecanismo de excepción incorporado (bueno).

Tenga en cuenta que el último elemento significa que verá una gran cantidad de código como este:

eval { something() };
if ($@) {
    warn "Oh no! [$@]\n";
}

Eso es manejo de excepciones a pesar de que no usa la sintaxis try/catch. Sin embargo, es frágil y se romperá en una serie de casos sutiles en los que la mayoría de la gente no piensa. Try:: Tiny y el otro los módulos de manejo de excepciones en CPAN se escribieron para que fuera más fácil hacerlo bien.

1. C tiene setjmp() y longjmp(), que se pueden usar para una forma muy cruda de manejo de excepciones.

 48
Author: Michael Carman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-03 17:08:36