Una discussione su another question mi ha fatto riflettere: che cosa hanno i sistemi di eccezioni di altri linguaggi di programmazione?Cosa c'è di rotto sulle eccezioni in Perl?
eccezioni built-in di Perl sono un po 'ad hoc in quanto erano, come il sistema oggetto Perl 5, sorta-di imbullonati su come un ripensamento, e sovraccarico altre parole chiave (eval
e die
) che sono non dedicato specificamente alle eccezioni.
La sintassi può essere un po 'brutta, rispetto alle lingue con sintassi incorporata try/throw/catch. Io di solito faccio così:
eval {
do_something_that_might_barf();
};
if (my $err = [email protected]) {
# handle $err here
}
Ci sono diversi moduli CPAN che forniscono zucchero sintattico per aggiungere parole chiave try/catch e per consentire la facile dichiarazione di gerarchie di classi eccezione e quant'altro.
Il problema principale che vedo con il sistema di eccezione di Perl è l'uso dello speciale globale [email protected]
per contenere l'errore corrente, piuttosto che un meccanismo dedicato catch
-tipo che potrebbe essere più sicuro, dal punto di vista dell'ottica, sebbene non abbia mai Incontrare personalmente eventuali problemi con [email protected]
ottenere munged.
Forse la gente che come gli altri linguaggi di programmazione fanno più errori. – mob
Oh merda, l'ho appena detto ad alta voce? Stavo solo scherzando! – mob
Bene, altri linguaggi hanno eccezioni e Perl no. Questa è la differenza. Il fatto che li fingiamo non rende il Perl davvero eccezioni. –