$teilnehmer = member->new('thomas', 46);
1 2
$genre_dict = dict->new(genredict); # liest die Daten der Datei 'genredict' ein und erzeugt daraus einen (Objekt)Hash. $besitzer_dict = dict->new(besitzerdict);
$genre_dict = dict->new(@daten);
@daten = ();
2014-04-25T22:16:22 der_thomasSpricht etwas gegen so eine Vorgehensweise ?
Quotenaja in lehrbüchern steht das man für 2 arten der dict 2 klassne hat die gemeinsamkeiten in gemeinsamer oberklasse.
hab leider nicht alles was du schreibst verstanden
s/\bkurzform\b/Langform/i;
1 2 3 4
package Members; package Members::File; package Members::MySQL; package Members::Oracle;
QuoteSpricht etwas gegen so eine Vorgehensweise ?
Ich frage deshalb weil ich das so noch nicht gesehen habe...was aber nun auch nicht viel bedeutet ;)
tie my %cfg, 'Config::IniFiles', -file => $path;
my $member = Member->new or die $@;
croak "Ich brauche entweder einen Dateinamen oder einen Namen für die Person";
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
#!/usr/bin/perl use v5.12; use warnings; package Trk_dict; sub new { (my $classname, my $file) = @_; my @inhalt; my %dict; open( my $FH, '<:unix:encoding(UTF-8)', $file) or die "Datei konnte nicht geöffnet werden\n"; while (<$FH>){ push (@inhalt, $_); } close $FH; chomp @inhalt; %dict = @inhalt; # @inhalt = (); # Sollte automatisch beim Verlasen von 'new' gelöscht werden ? my $self = \%dict; return bless($self, $classname); } sub translate { (my $self, $_) = @_; while ((my $key, my $value) = each %$self){ s/\b$key\b/$value/i; } s/\b[a-z]\b//gi; #verbleibende einzelne Zeichen löschen s/ +/ /g; #doppelte und mehr Leerzeichen entfernen s/\A //; #Leerzeichen am Anfang entfernen s/ \z//; #Leerzeichen am Ende entfernen return $_; } 1;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#!/usr/bin/perl use v5.12; use warnings; use Trk_dict; my $genre_objekt = Trk_dict->new('genre_dict'); my $namen_objekt = Trk_dict->new('namen_dict'); my $eingabe = " h H fo h a b c g noch was "; my $ausgabe = $genre_objekt->translate($eingabe); print ">$ausgabe<\n"; $eingabe = " h Christine "; $ausgabe = $namen_objekt->translate($eingabe); print ">$ausgabe<\n";
Quote>H�rspiel Fotografie Computer Geschichte noch was<
>Hans Christine<
use Carp;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
package Trk_dict; use IO::File; use strict; use warnings; use Carp; sub new{ my $class = shift; # weitere Argumente verbleiben in @_ my $file = shift; return eval{ my $self = bless{}, $class; my $fh = IO::File->new; $fh->open($file, O_RDONLY) or croak "IO-Err open File '$file': $!"; binmode $fh, ':utf8'; # usw. $fh->close; $self; # letzte Zeile im eval-BLock, das ist der return-Valü }; }
1 2 3 4 5 6 7 8
my @inhalt; # [...] while (<$FH>){ push (@inhalt, $_); } close $FH; chomp @inhalt;
chomp(my @inhalt = <$FH>);
(my $classname, my $file) = @_;
my ($classname, $file) = @_;
2014-04-27T18:46:55 MuffiFür was ist denn der eval gut?
1 2 3 4 5
DBI->connect_cached( "DBI:mysql:$basename:$CFG{$basename}{host}:$CFG{$basename}{port}", $CFG{$basename}{user}, $CFG{$basename}{pass}, {RaiseError => 1, PrintError => 0} );
my $obj = Class -> new or die $@;
1 2 3 4 5 6 7 8 9
sub new { my ($classname, $file) = @_; my @inhalt; my %dict; open( my $FH, '<:unix:encoding(UTF-8)', $file) or die "$file konnte von Trk_dict nicht geöffnet werden\n"; ... ...
1 2 3 4 5 6 7 8 9 10 11
sub new { my ($classname, $file) = @_; my @inhalt; my %dict; my $FH; if (!open($FH, '<:unix:encoding(UTF-8)', $file)){ open ($FH, '>:unix:encoding(UTF-8)', $file); open ($FH, '<:unix:encoding(UTF-8)', $file)} ... ...
my $dict = Dict->new( file => $file); # or wir machen was Anderes
1 2 3 4
my $dict = Dict->new( file => $file) || do{ # lots of code ;) # Vorsicht, wenn wir hier jetzt wieder eine EX werfen, wird $@ überschrieben! };
1
2
3
4
5
6
7
8
9
10
11
12
13
// Java Comics
Brille brille = new Brille; // geht komischerweise immer
// aber
// brille.gucken("nah");
// könnte ja eine EX werfen, wehe Du testest das nicht, daher
try{
brille.gucken("fern");
}
catch(){
brille.gucken("nah");
}
// na also, warum nicht gleich so ;)
// ungetestet
QuoteLass mal z.B. Berechtigungen beim öffnen fehlen, dann gehts dahin.
1 2 3 4 5 6 7 8 9 10 11
# Frontend ... my $genre_objekt = Trk_dict->new('genre_dict7'); if ($genre_objekt =~ /Dateilesefehler.*/){say "$genre_objekt";exit} ... # Klasse ... open( my $FH, '<:unix:encoding(UTF-8)', $file) or return "Dateilesefehler: '$file' konnte von Trk_dict nicht geöffnet werden\nGrund: $!\n"; ...
Quotemy $dict = Dict->new( file => $file); # or wir machen was Anderes
Der im Modul verfasste Grund "IO-Error: $!" steht in der main verfügbar somit in $@. Wir können das ignorieren oder auch untrennbar miteinander verbinden:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
sub new { my ($classname, $file) = @_; open( my $FH, '<:unix:encoding(UTF-8)', $file) or return "Dateilesefehler: '$file' konnte von Trk_dict nicht geöffnet werden\nGrund: $!\n"; chomp(my @inhalt = <$FH>); close $FH; # Prüfen ob Dateiinhalt Hash tauglich ist if (($#inhalt+1) % 2 and $inhalt[$#inhalt] eq "\n"){pop @inhalt} if (($#inhalt+1) % 2){return "Dateiinhalt inkonsistent\n"} push @inhalt, "_file", $file; # wird benötigt zum automatischen Speichern my %dict = @inhalt; my $self = \%dict; bless($self, $classname); }
1 2 3 4 5 6 7 8
.... # Main ... my $genre_objekt = Trk_dict->new('genre_dict'); if ($genre_objekt =~ /Dateilesefehler.*/){say $genre_objekt;exit} if ($genre_objekt =~ /Dateiinhalt.*/){say $genre_objekt;exit} ....
1 2 3 4 5 6 7
my $obj; eval { $obj = Trk_dict->new('genre_dict7'); }; if ($@) { print $@; }
1 2 3 4
my $obj = Trk_dict->new('genre_dict7'); unless (defined $obj) { print $Trk_dict::last_error; }
print $obj->error if $obj->has_error;
1 2 3 4 5 6 7 8
sub error { my $x=$_[0]->{error}; $_[0]->{error}=''; $x } sub has_error{ $_[0]->{error}? 1 : 0 } sub ... { ... $self->{error}='Das ist ein Fehler' unless $ok ; ... }
$obj->set_error_handler(sub{ print "$_[1]\n" });
1 2 3 4 5 6 7 8
sub on_error{ $_[0]->{error}->(@_) if $_[0]->{error} } sub set_error_handler{ $_[0]->{error}=$_[1] if ref $_[1] eq 'CODE' } sub ... { ... $self->on_error('Das ist ein Fehler') unless $ok ; ... }
QuoteDas has_error hat einen entscheidenden Nachteil.
Und da red ich aus Erfahrung, den Einfall hatte ich nämlich auch schon und hab mich regelmäßig drüber geärgert.
Und zwar: Man vergissts.