my @objectInterfaceMethods = qw( db user pass db_handle ); foreach my $method ( @objectInterfaceMethods ) { # anonyme sub erzeugen my $sub = sub { my( $self, @params ) = @_; $self->{ $method } = $params[0] if @params; return $self->{ $method }; }; # sub # sub in der symboltabelle unter dem Namen $method verankern no strict 'refs'; *{ $method } = $sub; } # foreach sub new { my( $class, @params ) = @_; croak 'class name needed in constructor' if ref $class; my $self = bless( {}, $class ); $self->init( @params ) if scalar @params; return $self; } sub init { my( $self, %params ) = @_; foreach my $param ( keys %params ) { if( $self->can( $param ) ) { $self->$param( $params{$param} ); } else { croak( "Invalid param '$param'" ); } } # foreach # hier eventuell noch ueberpruefen, ob alle benoetigten parameter gesetzt sind # ... $self->connect(); return $self; } sub connect { my $self = shift; my $dbh = DBI->connect("dbi:mysql:" . $self->db, $self->user, $self->pass) or croak "DB-error: $DBI::errstr\n"; $self->db_handle( $dbh ); return $self; }