Thread Perlartikel auf rolfrost.de
(10 answers)
Opened by rosti at 2011-07-31 16:39
Ich würde das Modul von DBI ableiten Dann kann man gleich "$dbi->errstr()" etc. nutzen.
alternativ würde ich selber eine Error-Methode erstellen Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 sub error { my $self=shift; my $error=''; $error=$self->{_error} if($self->{_error}) $self->{_error}=''; return $error; } sub _set_error { my $self=shift; my $error=shift // ''; $self->{_error}=$error; } zusammen mit RaiseError => 0 und Code (perl): (dl
)
1 2 3 4 5 unless($self->{DBH}->do(...)) { $self->_set_error($self->{DBH}->errorstr()); return undef; } Ich mag es nicht sonderlich globale Variablen zu nutzen. Hier mag es nützlich und auch nicht schädlich sein, doch sollte man es sich gar nicht erst angewöhnen und vermeiden wo man es kann. Es ist zwar nett alles in eval zu packen, aber hier ist es unnötig, da DBI sauber arbeitet und kein die macht wenn man es nicht wünscht. Ich würde mit den Error sogar soweit gehen und einen Handler dafür erlauben: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 sub set_error_callback { my $self=shift; my $handler=shift // sub{}; return 0 unless(ref($error) eq 'CODE'); $self->{_error_handler}=$handler; return 1; } sub _set_error { my $self=shift; my $error=shift // ''; $self->{_error}=$error; $self->{_error_handler}->($self,$error) $self->{_error_handler}; } Das kann dann direkt in die Basisklasse. Last edited: 2011-08-01 06:08:45 +0200 (CEST) |