Als heute im Büro zwischenzeitlich der Subversion-Server nicht erreichbar war, so dass ich meinen Commit nicht machen konnte, unternahm ich einen Spaziergang im Haus zum verantwortlichen Admin. Der war zwar nicht da, aber im gleichen Büro unterhielt ich mich dann mit einem großen Fan von Python. Ich habe dann mal bei Wikipedia nachgelesen und bin über folgenden Satz gestolpert:
Python unterstützt (und nutzt ausgiebig) die Ausnahmebehandlung (engl. exception handling) als ein Mittel, um Fehlerbedingungen zu testen. Dies ist so weit in Python integriert, dass es sogar möglich ist, Syntaxfehler abzufangen und zur Laufzeit zu behandeln.
Das fand ich schon ziemlich krass. Das Programm kann also stellenweise syntaktisch fehlerhaft geschrieben sein, der Compiler meckert nicht und ich kann das selbst abfangen – coole Sache. Weil ich das ganze sowieso noch für die Arbeit mit .NET und C# brauche und mich das auch für den Perl-Parser für IMPULS interessiert, habe ich mich dann mal ganz allgemein mit Exceptions beschäftigt. Richtig schmunzeln musste ich als alter Handballer über die verwendeten Begriffe. Die Exception wird geworfen und irgendwo sitzt ein Catch-Block, der die irgendwann auffängt. Bildlich vorgestellt kann ich da beim Schreiben dieses Satzes gerade immernoch lachen.
Meine Glaskoogle hat mir dann für Exceptionhandling mit Perl die Seite Object Oriented Exception Handling in Perl ausgespuckt, wo das alles schön erklärt ist. Jetzt ratet doch mal, was bei der Ausführung des folgenden leicht abgewandelten Beispiels von jener Seite passiert:
#/usr/bin/perl -w use Error qw(:try); try { some code; code that might throw an exception; more code; return; } catch Error with { my $ex = shift; # Get hold of the exception object print "handle the exception\n"; } finally { print "do some more cleanup\n"; }; # < -- Remember the semicolon