2012-11-26 3 views
6

Ich erstelle mein eigenes Modul, nennen wir es X::Y. Natürlich befindet sich das Modul in der Datei X/Y.pm.Wie kann ein Perl-Modul seinen eigenen Weg finden?

Nehmen wir an, Y muss ein externes Programm aufrufen, prog. Idealerweise würde ich einfach prog in X setzen, also kann ich X/prog laufen lassen. Ich möchte keinen Hardcode X/prog s vollen Pfad haben, und damit das Modul unabhängig vom aktuellen Arbeitsverzeichnis funktioniert.

Wie kann ich den vollständigen Pfad eines Moduls innerhalb eines Moduls finden? Oder gibt es einen besseren Weg, dies zu tun?

Antwort

9

Der vollständige Pfad zur aktuell ausgeführten Quelldatei wird von Perls spezifischem Literal __FILE__ geliefert.

Ich würde jedoch bevorzugen, das externe Programm dort zu sehen, wo es normalerweise sein würde, und der Pfad dort entweder als Konstante im Perl-Code kodiert oder in der Umgebungsvariablen PATH enthalten ist.

-1

Sobald ein Modul geladen ist, ist der Pfad in der globalen Variablen %INC. Schauen sie auf, müssen Sie eine einfache Umwandlung zu tun:

  1. Änderung :: im Paketnamen zu /
  2. anhängen .pm

die Lage des Moduls finden X::Y, würden Sie schau in $INC{"X/Y.pm"}.

4

Borodin beantwortet die Frage, aber einige relevante Informationen:

FindBin - findet das Verzeichnis, das das Skript aus (Verwendung im Skript selbst oder in einem Paket durch sie geladen) ausgeführt wurde

Neil Bower's CPAN modules for getting a module's path - detaillierte Bewertung von Modulen, um den Pfad eines anderen Moduls zu finden.