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.
Jede Perl-Datei hat Zugriff auf die Variable __FILE__
, die den vollständigen Pfad angibt. So etwas sollte den Trick machen:
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.
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:
Verwendung:
%Vor% Sie können %INC
hash verwenden, wenn das Modul bereits geladen ist. Zum Beispiel:
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 .
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
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.