Okay, ich will euch erklären wofür das Programm gut ist:
Die Klasse Method enthält einen Namen sowie einen boolean der angibt, ob eine Methode der Klasse ausgeführt wurde oder nicht.
Wie gesagt, du definierst statische Variabeln, die in allen Instanzen gleich sind. Ich bezweifle, dass es das ist was du möchtest.
In meiner Main hab ich eine Hash in welcher als Key immer eine Instanz von Method liegt, und als Value eine Instanz einer Method oder erneut eine Hashtable.
Der Schlüssel eines Hash ist immer eine Zeichenkette, warum willst du dort eine Instanz abspeichern?
Der Ansatz ist reichlich krude und klingt nicht nach OOP.
Somit kommen wir zu dem Schluss, dass wir folgendes brauchen:
my %hashtable;my $method1= Method -> new();
my $method2= Method -> new();
my $method3= Method ->new();
my $method4= Method ->new();
my %hashtable2;
%hashtable={$method1=>$method2,$method2=>$hashtable2);
%hashtable2={method3=>$method4,$method4=>$method1};[/code]
Ich komme mit deinen Beispielcode nicht klar. Der Code ist nicht lauffähig.
Welchen Zweck möchtest du mit dem Hash erfüllen? Darüber hinaus solltest du dir die Links die ich und Alexander dir gezeigt haben zu Gemüte führen, damit würdest du schon einmal einen tieferen Einblick bekommen.
Oder in Klartext:
Eine Klasse welche eine Variable für einen Bool und einen String hat.
Es gibt keinen Klassen und was du als "hat eine Variabel" bezeichnest, sind statische Variabeln, die in allen Instanzen identisch sind.
Wir haben wohl ein etwas größeres Missverständnis:
Mit dem Code:my $combinatorics = Combinatorics ->new();
hält für mich die Variable $combinatorics die Instanz des Packages Combinatorics.
Das ist in dem Fall richtig.
somit hält
my $method1= Method -> new();
$method1 die Instanz von Method.
mit $method1::name || $method1::IsFulfilled möchte ich auf die Werte meiner Instanz zurückgreifen.
Das sind nicht die Werte der Instanz, sondern des package - das ist ein grosser Unterschied.
Ergo soll mein Code für
print $method1::name = "method1";
method1 zurückliefern
während print $method2::name = "method2";
method2 zurückliefern soll.
Dann musst du es so machen, wie ich es dir schon gezeigt habe oder du schaust dir noch mal die Dokumentation an, dort wird das sehr gut und ausführlich beschrieben.
Struppi.