Quoteuse Foo;
Die Datei Foo.pm muss sich in einem Verzeichnis befinden, welches namentlich auch im @INC Pfad eingetragen ist. Gleichermaßen muss innerhalb der Datei package Foo; notiert sein.
Falsch. Es ist unerheblich, ob in Foo.pm ein package-statement steht, und welcher package-name es ist. Damit
use Foo; funktioniert, muss das Ding nur kompilieren und einen wahren Wert zurückliefern.
Will man objektorientiert arbeiten, wird der Packagename wichtig, ja.
QuoteMerke: Das @INC Array lässt sich mit use lib qw(/home /user); manipulieren. Dieses Pragma stellt sicher, dass ein Verzeichnispfad nur einmal im Array eingetragen wird.
Diese Aussage (nur einmal eingetragen) ist doch hier nur verwirrend. Hättest du ausführlich die manuelle Manipulation von @INC erklärt, wäre das erwähnenswert. Aber der wichtigere Unterschied, der dann zu erwähnen wäre, ist, dass man mittels "use lib" @INC zur compile time ändert, während man bei manueller Manipulation von @INC einen BEGIN-block schreiben muss (oder alternativ das Modul zur Laufzeit laden muss).
QuoteDes Weiteren wird mit der Package-Deklaration package Foo::Bar; ausgedrückt, dass Bar eine Klasse ist, die von Foo erbt.
Das ist einfach nur falsch. Es gibt keinen Automatismuss, wonach Foo::Bar von Foo erbt.
Du erwähnst oben "use Modulname" und "use lib". In deinem Beispiel unten schreibst du aber das eigentliche Skript mit in die Moduldatei, wodurch "use Number" und auch "use lib" unnötig wird.
Das ist aber in der Praxis später selten sinnvoll.
Aber wozu dann überhaupt die Erwähnung oben, wenn du es im Beispiel gar nicht anwendest?
Last edited: 2016-03-13 13:38:19 +0100 (CET)