Una discusión en another question me hizo preguntarme: ¿qué tienen los sistemas de excepción de otros lenguajes de programación que Carece de Perl?¿Qué pasa con las excepciones en Perl?
excepciones incorporadas de Perl son un poco ad-hoc en que eran, al igual que el sistema de objetos de Perl 5, clase-de atornillados en el último momento, y sobrecargan otras palabras clave (eval
y die
), que se no dedicado específicamente a excepciones.
La sintaxis puede ser un poco fea, en comparación con los idiomas con la sintaxis integrada try/throw/catch tipo. Usualmente lo hago de esta manera:
eval {
do_something_that_might_barf();
};
if (my $err = [email protected]) {
# handle $err here
}
Existen varios módulos de CPAN que proporcionan azúcar sintáctico para añadir palabras clave try/catch y para permitir que la declaración fácil de jerarquías de clases de excepción y otras cosas.
El principal problema que veo con el sistema de excepción de Perl es el uso del especial [email protected]
global para contener el error actual, en lugar de un mecanismo de tipo catch
dedicado que podría ser más seguro, desde una perspectiva de alcance, aunque nunca personalmente se encuentra con cualquier problema con [email protected]
siendo mordido.
Tal vez las personas que al igual que otros lenguajes de programación hacen más errores. – mob
Oh mierda, ¿acabo de decir eso en voz alta? ¡Es una broma! – mob
Bueno, otros idiomas tienen excepciones y Perl no. Esa es la diferencia. Que los falsifiquemos no hace que Perl realmente tenga excepciones. –