Thread Eine Frage der Ehre, Perls OOP und class UNIVERSAL (6 answers)
Opened by rosti at 2025-05-10 10:53

rosti
 2025-05-10 10:53
#197001 #197001
User since
2011-03-19
3570 Artikel
BenutzerIn
[Homepage]
user image
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?
http://blog.rolfrost.de/

The art of steam.

View full thread Eine Frage der Ehre, Perls OOP und class UNIVERSAL