#!/usr/bin/env perl use warnings; use strict; my $new1 = Term_Choose1->new( { farbe => 'blau', aus => 'Holz' } ); print $new1->choose( { farbe => 'gelb' } ); my $new2 = Term_Choose2->new( { farbe => 'blau', aus => 'Holz' } ); print $new2->choose( { farbe => 'gelb' } ); package Term_Choose1; sub new { my $class = shift; my ( $self ) = @_; return bless $self, $class; } sub choose { my $self = shift; my ( $opt ) = @_; $self = { %$self, %$opt } if defined $opt; $self->{farbe} //= 'grün'; $self->{nummer} //= 34; $self->{aus} //= 'Eisen'; return map { sprintf "%10s : %s\n", $_, $self->{$_} } sort keys %$self; } 1; package Term_Choose2; sub new { my $class = shift; my ( $opt ) = @_; my $defaults = { farbe => 'grün', nummer => 34, aus => 'Eisen' }; my $self = { %$defaults, %{$opt//{}} }; return bless $self, $class; } sub choose { my $self = shift; my ( $opt ) = @_; $self = { %$self, %$opt } if defined $opt; return map { sprintf "%10s : %s\n", $_, $self->{$_} } sort keys %$self; } 1;