Fehlerbehandlung in Perl-Modulen und -Klassen

Perl's Exceptionmodell ist für eine zweckmäßige Fehlerbehandlung sehr hilfreich

So hilfreich wie Perl's Exceptionmodell für eine zweckmäßige Fehlerbehandlung ist, so einfach ist es auch anzuwenden. Das Prinzip: Alles was einen Fehler verursachen kann, wird in einen eval-Block gesetzt. Für das Beispiel untenstehend soll der Konstruktor sicherstellen, dass tatsächlich eine ganze Zahl übergeben wurde, ansonsten wird keine Instanz der Klasse erstellt.

So wird vermittels Carp::croak('Fehlertext') im Fehlerfall eine Exception geworfen, dass ein sogenannter Backtrace gezeigt wird, welcher dem Entwickler den Weg zurück weist bis in die Zeile, wo der Fehler verursacht wurde. Aufgrund Exception verursachte Fehlertexte sind in $@ oder $^E zu finden. Letztendlich jedoch wird nicht geprüft, ob in $@ was drinsteht, sondern es wird der Rückgabewert des Konstruktors ausgewertet und der ist im Fehlerfall undefiniert.

package Number;

use strict;
use warnings;
use Carp;

sub new{
    my $class = shift;
    my $nr    = shift || 0;
    return eval{
        croak "Es wurde keine ganze Zahl übergeben!\n"
            if $nr !~ /^\d+$/;
        bless{ nr => $nr }, $class;
    };
}

# Auf diese Zeilennummer verweist der Backtrace
my $n = Number->new('asdf') or die $@;

Anbieter: nmq​rstx-18­@yahoo.de, die Seite verwendet funktionsbedingt einen Session-Cookie und ist Bestandteil meines nach modernen Aspekten in Perl entwickelten Frameworks.