sub _property ($$;$) {     my $self   = shift;    # object     my $attr   = shift;    # attribute to get or set     my $setter = @_ == 1;  # is this method used as a setter?     my $value  = shift;    # value for the setter     # if we use "if (defined $value)" here, we can't set the values     # to undef! So we have to use this:     if ($setter) {         my $old_value = $self->{$attr};         $self->{$attr} = $value;         return $old_value;     }     else {         return $self->{$attr};     } } # sub _property sub uhrzeit ($;$) { return shift->_property('uhrzeit', @_) } sub stunden ($;$) { return shift->_property('stunden', @_) } sub minuten ($;$) { return shift->_property('minuten', @_) } sub sekunden($;$) { return shift->_property('sekunden', @_) } sub datum   ($;$) { return shift->_property('datum', @_) } sub tag     ($;$) { return shift->_property('tag', @_) } sub monat   ($;$) { return shift->_property('monat', @_) } sub jahr    ($;$) { return shift->_property('jahr', @_) } ...