my $instance = Class->new(%args) or die $@; # z.B. in main, Zeile 815
instanz = Irgendwas.new(viel_sums)
Quote..Exception...Und zwar SOFORT und nicht erst irgendwann, wenn irgendwer eine Variable abfrägt..
2012-12-07T10:11:49 GwenDragonIch verwende bei fehlerhaftem Aufruf ein undef als return-Wert, meinetwegen noch als Liste mit weiterem Fehlerocde-/-meldung.
Wieso muss ein Konstruktor bei Fehlern eine gültige Instanz zurück geben? Ist das bei Programmierung/OOP so üblich oder nur für PHP-Leute?
1 2 3 4 5 6 7 8 9 10
sub new{ my $self = bless{}, shift; # sorry, I'm hurry return eval{ # von hier # stehen alle Initialisierungen, die eine # Exception werfen können # bis hier $self; # das geht return, wenn bis hier alles gutgegangen ist }; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
my $error=''; sub _val { my $self=shift; my $key=shift; if(@_) { $self->_error(); my $val=shift; unless($self->{sonstwo}->set($key => $val)) { $self->_error("Can't set $key => $val"); } } return $self->{sonstwo}->get($key); } sub ein_wert { shift->_val('ein_wert', @_); } sub noch_ein_wert { shift->_val('noch_ein_wert', @_); } sub _error { shift->{error}=shift//''; } sub error{ref($_[0])?$_[0]->{error}:$error}