# einfache Klasse für die Ausgabe eines Scripts # welches Eingaben erwartet, die zu prüfen sind # Benutzereingaben werden über Exceptions gehandelt # Beachte \n am Ende eines die() zur Unterdrückung des Backtrace package OUT; use strict; use warnings; use Getopt::Long; # Construction sub new{ my $class = shift; # Datenversteck für Ein/Ausgabe my $self = bless{ STASH => { name => undef, vname => undef, }, }, $class; return $self; } # Darstellung auf der Konsole # nenne es presenter oder view sub presenter{ my $self = shift; # feststellen ob es Parameter gibt # den code der entsprechenden Methode laden # und auf Exception prüfen if(@ARGV){ my $code = $self->can('control'); my $result = ''; # mögliche Exception fangen eval{ $result = $self->$code }; if($@){ print "Eingabefehler: $@\n"; } else{ print $result; } } else{ print $self->default; } } ########################### controller methods ############################ # keine Eingabe-Parameter # stellt die Sicht ohne Eingaben dar sub default{ my $self = shift; return "Bitte --name= und --vname= eingeben\n"; } # Eingabe-Parameter liegen vor # Anwendung Exception-Model: Der Code wird später geprüft sub control{ local $SIG{__WARN__} = sub{die "@_\n"}; # Warnungen GetOptions my $self = shift; GetOptions( 'name=s' => \$self->{STASH}{name}, 'vname=s' => \$self->{STASH}{vname}, ); die "Name nicht eingegeben\n" unless defined $self->{STASH}{name}; die "Vorname nicht eingegeben\n" unless defined $self->{STASH}{vname}; return qq( Name: $self->{STASH}{name} Vorname: $self->{STASH}{vname} ); } 1;######################################################################### # Sehr einfache Application package main; my $out = OUT->new; $out->presenter;