perl exception-handling error-handling eval

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



exception-handling error-handling (1)

El consenso de la comunidad de Perl parece ser que Try::Tiny es la forma preferida de hacer un 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. (p. ej., en contraste con Java, donde no se puede evitar tratar con excepciones).
  • El trasfondo de muchos desarrolladores de Perl. (Los lenguajes como C 1 y shell no tienen mecanismos de excepción).
  • El tipo de tareas por las cuales la gente tiende a usar Perl. (Pequeñas secuencias de comandos para la eliminación de mensajes de texto y la generación de informes donde no es necesario el manejo de excepciones).
  • Perl no tiene un mecanismo de excepción (bueno) incorporado.

Tenga en cuenta que el último elemento significa que verá muchos códigos como este:

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

Eso es manejo de excepciones aunque no use la sintaxis try / catch. Sin embargo, es frágil y se dividirá en varios casos sutiles en los que la mayoría de la gente no piensa. Try :: Tiny y los otros módulos de manejo de excepciones en CPAN se escribieron para que sea 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.

Me he dado cuenta de que Exception.pm y Error.pm no parecen ser ampliamente utilizados en la comunidad de Perl. ¿Eso 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 alguna razón convincente para esto?

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