Thread Argumente/Parameter wo prüfen ? (19 answers)
Opened by der_thomas at 2014-09-15 18:44

rosti
 2014-09-16 22:17
#177328 #177328
User since
2011-03-19
3492 Artikel
BenutzerIn
[Homepage]
user image
Noch was zur Fehlerbehandlung, viele CPAN- u.a. Perl-Module verwenden Carp. So wird bereits bei der Erstellung einer Instanz eine Exception geworfen, wenn die API nicht richtig angewandt wird:

Code (perl): (dl )
1
2
my $obj = Class->new( -foo => 123 ) or die $@;
my $obj = Class->new( -foo => 123 ) or print $@;


Was steckt dahinter? Vorab, ob Du in Deiner main (Anwendung) die() verwendest oder nicht, ist eine andere Sache. In beiden Fällen wird die Instanz gar nicht erst erstellt und in $@ steht drin, warum das so ist. In der Class->new() selbst wird die Exception mit croak("Falsches Argument") geworfen, damit der Anwender der Klasse (Anwender der API) einen Backtrace bekommt. Und der zeigt nicht auf die Zeile im Modul, sondern auf die Zeile in der Anwendung. Mehr Infos als Carp::croak liefert Carp::confess und die beiden anderen Methoden erzeugen Warnungen mit Backtrace.

Und ja, $@ ist eine globale Variable. Abgefragt wie obenstehend ist das jedoch atomar, in $@ kann nichts anderes stehen, als das, was bei der Instanzerstellung schiefgegangen ist.

Das Exception-Model kannst auch Du für gewöhnlichen Methodenaufrufe verwenden:
Code (perl): (dl )
$obj->foo('29.2.1901') or die $@;

Das vereinfacht die Fehlerbehandlung und braucht keine Sondervereinbarungen für Rückgabewerte. Das Modul Error schließlich ermöglicht try{}catch{} wie das in anderen PLs üblich ist.

View full thread Argumente/Parameter wo prüfen ?