Thread Bad name after...
(52 answers)
Opened by bianca at 2015-02-19 12:08 Quote Meine Anmerkung $ref is not blessed hast Du wahrscheinlich nicht verstanden. bless segnet eine Referenz mit dem Namen einer Klasse (Package). Dein $ref ist lediglich eine Hash-Referenz. Des Weiteren definierst Du mehrere Funktionen im gleichen Scope, daher die Warnung redefined. Deklariere Deine Packages in den Dateien welche mit require eingebunden werden, damit landen gleichnamige Funktionen/Methoden in einem unterschiedlichen Scope. Fei von OOP: 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 23 24 # Datei Foo.pm package Foo; sub foo{} 1; # Datei Bar.pm package Bar; sub foo{} 1; # Datei Baz.pl package Baz; sub foo{}; 1; require Foo; Foo::foo(); require Bar; Bar::foo(); require "Baz.pl"; # beachte den Unterschied, weil nicht .pm Baz::foo(); Es ist also doch ein bischen mehr, was Du ändern musst. Wenn Du mit blessed Referenzen arbeiten willst, kommt OOP ins Spiel. Auch hier ist wieder die Package-Deklaration entscheidend: Code (perl): (dl
)
1 2 3 4 5 6 7 8 require Foo; # Datei siehe oben my $foo = bless{}, 'Foo'; # unschön, nur zur Veranschaulichung!!! # Besser: class Foo definiert einen Konstruktor $foo->foo(); # Aufruf über eine Instanz der Klasse Foo # Oder Aufruf der Funktion foo() als Klassenmethode Foo->foo(); Fazit: Die Package-Deklaration legt den Scope einer Methode fest, sie sind damit nicht redefined. Sie werden aufgerufen a) als Klassenmethode ClassName->method_name; b) mit dem Namen der Package PackageName::funktion_name(); c) über eine Instanz der Klasse $instanz->method_name; Last edited: 2015-02-19 20:48:12 +0100 (CET) |