Thread Decorator in Perl? (18 answers)
Opened by Ronnie at 2008-10-08 16:45

Ronnie
 2008-10-08 16:45
#115275 #115275
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
In Python kann man relativ einfach Decorator für Funktionen definieren. Ein Decorator ist nichts gänzlich anderes als ein Wrapper um eine Funktion. Ein vereinfachtes Beispiel in Perl sähe so aus:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl

use strict;
use warnings;

sub hello_world {
    my $from = shift;
    return "Hello World from " . $from;
}

sub decorate_h1 {
    my $sub     = shift;
    return sub { my @args = @_; return "<h1>" . $sub->(@args) . "</h1>" };
}

my $hello_headline = decorate_h1(\&hello_world);

print $hello_headline->("Perl"), "\n";

Das ist natürlich kein richtiger Decorator, sondern nur ein Wrapper. Für einen Decorator wäre es notwendig mit der erzeugten anonymen Funktion die Symboltabelle von hello_world zu überschreiben.

Ich hatte lange vermutet, dass die Attribute in Perl als Decorator verwendet werden, bin aber aus der Doku nicht schlau geworden. Hat jemand ein Beispiel wie man einen Decorator sinnvollerweise in Perl implementiert? Muss man wirklich die Symboltabelle manipulieren, oder geht es auch eleganter?

View full thread Decorator in Perl?