Weiß ein Perl-Modul, wo es installiert ist?

7

Ich habe begonnen, ein Perl-Paket zu erstellen, das eine Standard-E-Mail-Vorlage enthält.

Das MANIFEST sieht ungefähr so ​​aus:

%Vor%

Momentan weiß ich, wo das Modul (und die Vorlage) ist - aber weiß das Modul selbst, wo es auf der Festplatte ist? Könnte das Modul die Standardvorlage ohne meine Hilfe finden?

%Vor%

Gibt es eine bessere Möglichkeit, einen Schablonentext einzubinden oder einen besseren Ort für das Einfügen der Schablone?

Jegliche Verweise auf CPAN-Module, die etwas ähnliches tun, wären willkommen.

Vielen Dank im Voraus.

    
CoffeeMonster 13.04.2009, 05:54
quelle

7 Antworten

9

Jede Perl-Datei hat Zugriff auf die Variable __FILE__ , die den vollständigen Pfad angibt. So etwas sollte den Trick machen:

%Vor%

Wenn Sie nur noch "Daten" -Dateien mit Ihren Modulen bündeln möchten, sehen Sie sich File :: ShareDir , das eine Möglichkeit bietet, dies zu tun.

    
potyl 13.04.2009, 06:28
quelle
7

Die Verwendung von% INC kann in Fällen irreführend sein, in denen die Datei nicht genau mit dem Paketnamen übereinstimmt. (Dies ist ein Anti-Pattern, aber es passiert, manchmal aus berechtigten Gründen.) Wenn Sie Dateien suchen möchten, die handliche __FILE__ Token ist deine beste Wette. Beispielmodul, das sich selbst lokalisieren kann:

%Vor%

Verwendung:

%Vor%     
John Siracusa 03.12.2009 14:29
quelle
5

Sie können %INC hash verwenden, wenn das Modul bereits geladen ist. Zum Beispiel:

%Vor%     
Ivan Nevostruev 03.12.2009 14:07
quelle
3

Perl zeichnet den Speicherort der Datei auch in der Variable% INC auf. Sie können das verwenden, wenn __FILE__ nicht verfügbar ist. Detaillierte Informationen finden Sie in der Dokumentation in perlvar .

    
brian d foy 13.04.2009 17:48
quelle
2

Umgeschrieben, um zu reflektieren, was ich in den Kommentaren gelernt habe:

  • Pfad des Moduls finden

    %Vor%
  • Wo die Vorlage platziert werden soll:

    Da die Vorlage wahrscheinlich bearbeitbar ist, vielleicht sogar von jemandem, der über das Netz arbeitet, rate ich dringend, es in ein Verzeichnis zu stellen, wo der "Code", der in der Vorlage enthalten ist, nicht ausgeführt werden kann.

    Stellen Sie sich vor, jemand ruft an: http://your.home.net/cgi-bin/default_email.tt

lexu 13.04.2009 06:24
quelle
1

Sie können das Token __FILE__ verwenden, um den Namen (einschließlich des Pfads) der aktuellen Datei abzurufen. Wenn Sie den Pfad zu einem anderen Modul kennen möchten (eines, das bereits geladen ist), überprüfen Sie den Inhalt des %INC Hash.

    
Michael Carman 03.12.2009 14:26
quelle
1

Ich verwende diesen Bash-Alias, um den Speicherort eines Moduls zu finden (z. B. um seine Implementierung zu betrachten oder um einige Debug-Anweisungen zu hacken):

%Vor% %Vor%     
Ether 03.12.2009 18:02
quelle

Tags und Links