1 2 3 4 5 6 7 8 9 10
sub machwas { my $self = shift; my $parm = shift; die 'Parameter of ' . __PACKAGE__ . '->machwas() must be between 0..9' if $parm<0 or $parm >9; #d machdies und das }
QuoteWo sollen übergebene Parameter geprüft werden, in den Klassenmethoden oder beim Aufrufer ?
1 2 3 4 5 6 7
use Class; # Klassenmethode my $instance = Class->new(); # Erstelle Objekt, eine Instanz der Klasse # Mit der Instanz eine Methode aufrufen $instance->foo();
$object->machwas(5);
1 2
$object->machwas(5) or return $gui->Fehlerseite( title => 'Eingabefehler', descr => 'Die Zahl muss zwischen 0..9 liegen' );
$obj->foo(5);
1 2
my $obj = Class->new( -foo => 123 ) or die $@; my $obj = Class->new( -foo => 123 ) or print $@;
$obj->foo('29.2.1901') or die $@;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
#!/usr/bin/perl use strict; use warnings; use Carp qw(confess); # Einfache Instanz der main my $m = bless{}; # Fehlerbehandlung in der main: # Script sterben lassen $m->ziffer() or die $@; # Ziffer von 0..9 # Fehlerbehandlung in der Methode: # Exception werfen sub ziffer{ my $self = shift; my $z = shift; return eval{ confess "Kein Argument übergeben" if ! defined $z; confess "Keine Ziffer übergeben" if $z !~ /^\d$/; # weitere Anweisungen # dürfen Exceptions werfen, wenn irgendwas nicht passt # die letzte Anweisung ist ein wahrer Wert (returned) 1; }; }
1 2 3
return eval{ croak "Kein Argument übergeben" if ! defined $arg{column}; ....
$objekt->del_column(column => $spalte) or warn $@;
$objekt->del_column(column => $spalte);
QuoteD.h. der Code der Methode wird nicht weiter ausgeführt, es passiert einfach nichts...Richtig so ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
# Konstruktor einer Klasse sub new{ my $class = shift; # Name der Klasse # Argumente in @_ z.B. als Hash # hier können wir default-Werte setzen # da ist auch gleich zu sehen, was fakt ist my %cfg = ( foo => undef, bar => '', @_); # @_ überschreibt die vorbelegten Werte # Pflichtfelder setzen wir auf undef return eval{ # Argumente prüfen # wenn was nicht passt, Exception schmeißen # code hierzu... my $self = bless{ # Attribute foo => $cfg{foo} or croak "foo wurde nicht übergeben", }, $class; # letzte Zeile im Block ist der returnvalü $self; # das wird zurückgegeben, wenn alles geklappt hat }; } # und draußen... my $obj = Class->new(%argumente) || do{ # hier machen wir das, was notwendig ist, wenn # das Objekt nicht erstellt werden konnte # Reason in $@ };
1 2 3 4 5 6 7
$objekt->del_column(column => $spalte) or errormessage($@); ... ... sub errormessage { print "************Error************\n"; print @_; }
$objekt->del_column(column => $spalte) or errormessage($@);
$objekt->del_column(column => $spalte) or return errormessage($@);