Thread Eine Frage der Ehre, Perls OOP und class UNIVERSAL
(6 answers)
Opened by rosti at 2025-05-10 10:53
Nun, ich habe in einer meiner Klassen zwei Funktionen/Methoden:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 sub IO::String::readon{ my $self = shift; # hier das FileHandle my $len = shift; my $offs = shift; $offs = defined $offs ? $offs : $self->tell; $self->seek($offs,0); $self->read(my $buffer, $len); return $buffer; } sub IO::File::readon{ my $self = shift; # hier das FileHandle my $len = shift; my $offs = shift; $offs = defined $offs ? $offs : $self->tell; $self->seek($offs,0); $self->read(my $buffer, $len); return $buffer; } Die völlig identisch sind, also redundanter Code. Sie werden aufgerufen über ein Handle, was entwicklungsbedingt sowohl eine Instanz von IO::File als auch IO::String sein kann. Um diese Code-Redundanz los zu werden, bin ich nun auf diesen Trichter gekommen: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 sub UNIVERSAL::readon{ my $self = shift; # hier das FileHandle my $len = shift; my $offs = shift; $offs = defined $offs ? $offs : $self->tell; $self->seek($offs,0); $self->read(my $buffer, $len); return $buffer; } Mit dem Wissen, daß ja alle Perl-Klassen von UNIVERSAL erben und damit auch jede Methode die man auf diese Art und Weise der UNIVERSAL-Klasse unterjubeln kann im redundanten Code zu vermeiden. Was sagt Ihr denn dazu? |