Thread Code printen (17 answers)
Opened by bianca at 2015-03-10 10:54

rosti
 2015-03-13 07:15
#180147 #180147
User since
2011-03-19
3492 Artikel
BenutzerIn
[Homepage]
user image
Mit my $var = sub {print "a"}; legst Du eine CodeReferenz in den Hauptspeicher. Das ist praktische ein fix und fertig kompilierter Code, der darauf wartet, ausgeführt zu werden. Druckbar ist die Source nicht.

Du kannst, wenn es um das Organisieren von Units geht, eine Factory bauen:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Datei Interface.pm als ein Beispiel

my $trailer = sub{
   my $self = shift;
};
my $init = sub{};
my $control = sub{};

# Letzte Anweisung in Datei
# das wird beim Einbinden mit do oder require zurückgegeben
# Code-Referenzen für Interface
{
    trailer => $trailer,
    init    => $init,
    control => $control
};


Und diese Datei(en) mit my $refs = do "interfaces/Interface.pm"; einbinden. Solche Units (Traits) haben keine Package-Deklaration und Du kannst beliebig viele davon anlegen. Die Subs werden dann im Namensraum derjenigen Package ausgeführt, welche die jeweilige Code-Referenz ausführt, sorge dafür, dass eine solche Datei nur einmal eingebunden wird.

In den Dateien selbst kannst Du auch weitere Module mit use einbinden. Das Interface für mein Framework habe ich so gebaut, da gibt es eine begrenzte Anzahl an Methoden, die immer denselben Namen haben und auf diese Art und Weise in unterschiedlichen Klassen ausgeführt werden. So gibt es keine Code-Redundanzen und keine redefined subs. Aufgrunddessen, dass die Codereferenzen von Instanzen beliebiger Klassen aufgerufen werden können, können solche Traits auch automatisiert über eine Attrappe (Mock) getestet werden. Letztendlich sind die Methoden von der aufrufenden Instanz unabhängig.

--rosti

View full thread Code printen