Perl verwenden/benötigen abolute Pfad?
Wenn ich eine .pm
- Datei, gibt es eine Möglichkeit, ich kann use
es, ohne das es auf meine @INC
Weg? Ich denke, das wäre übersichtlicher in meinen speziellen use - case- übersichtlicher als die Verwendung relativer Pfade oder durch das hinzufügen dieses Verzeichnisses zur @INC
.
Edit: Klarstellung:
Ich hatte gehofft, zu vermeiden die Notwendigkeit zu Durchlaufen und jedes Element in @INC
, und stattdessen geben Sie direkt die Datei, die ich mich interessiere. Zum Beispiel, in Node.JS, require('something')
wird durchsuchen Sie die Liste der Pfade, aber require('/specific/something')
gehen direkt, wo ich sagen, es ist.
In Perl, ich bin nicht sicher, dass dies die gleiche Funktionalität, die in require
, aber es scheint zu funktionieren.
Jedoch use
Aussagen erfordern barewords. Hat mich ein wenig ratlos, wie geben Sie einen absoluten Pfad.
use lib
Anweisung vor use module
richtige für Ihren Fall. Aber warum können Sie nicht verwenden require
. Es mehr Farben für Ihr problem. Auch Sie können SetEnv PERL5LIB
Umgebungsvariablen in der apache-conf zu übernehmen, das Verzeichnis für das gesamte Projekt oder eine Anwendung.Ich brauche verlangen eine
.pm
- Datei. Ich habe nicht versucht, aber es scheint nicht, wie es funktionieren würde, Recht. Ich in der Regel call-Funktionen in das Modul mit der syntax, wie CGI::ReadParse();
oder use CGI ':cgi';
. Ich weiß nicht, wie ich das machen könnte mit require
für eine .pm
- Datei, aber wenn ich tun könnte, dass mit require
, es würde ja mein problem lösen.Es funktioniert. Versuchen Sie, wie diese
require "Newmodule.pm";
und rufen Sie dann Newmodule::subname();
. Es führt problemlos.
InformationsquelleAutor Bryan Field | 2013-02-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als pro Diskussion in den Kommentaren, ich würde vorschlagen, mit
require
selbst. Wie untenAuch Sie können andere Optionen, wie unten
use lib 'pathto/module';
Diese Zeile muss Hinzugefügt werden, um jede Datei, die Sie verwenden möchten, wird das Modul in.mit
PERL5LIB
Umgebungsvariable. Setzen Sie dieses auf der Kommandozeile mit export oder fügen Sie diese zu~/.bashrc
so, dass mit jedem login wird es Hinzugefügt, um Ihre@INC
. Denken Sie daran PERL5LIB fügt Verzeichnis, bevor alle @INC-Verzeichnisse. Also es wird zuerst verwendet werden. Auch Sie können diese Einstellung in der apache httpd.conf mitOder legen Sie es im BEGIN-block.
InformationsquelleAutor
Diese :
Können Sie ändern
@INC
selbst (vorübergehend, keine Angst, das ist es, wasuse lib
auch nicht) :use lib
tut, außer, das verwendetunshift
stattpop
um sicherzustellen, dass Ihre eigenen Module, die abgeholt werden, bevor irgendetwas anderes mit dem gleichen Namen.POST entsprechend editiert, um push am Anfang des Arrays.
setzen Sie ein Modul in das gleiche Verzeichnis wie das Programm funktioniert nur gut, wenn das ist Ihr Arbeitsverzeichnis.
. != dirname <program>
standardmäßig...und funktioniert nur wenn . ist in @INC (nicht wahr, im taint-Modus; nicht wahr, für Distributionen, die weglassen, es ist sicherer)
Das Letzte Kommentar ist falsch. Perl sieht nicht in das Skript-Verzeichnis für Module. Es meistens sieht in
.
, aber nicht immer, und.
ist oft für das Skript-Verzeichnis, aber bei weitem nicht immer.InformationsquelleAutor Gilles Quenot
Generell setzen die
PERL5LIB
Umfeld var.Wenn das Modul zu finden ist, installiert werden sollen und in einem Verzeichnis, relativ zum Skript, verwenden Sie die folgenden:
Diese korrekt behandelt symbolische links auf das Skript.
InformationsquelleAutor ikegami
Können Sie die Module::Load Modul
BEGIN
. Es ist auch nicht ein Mittel für den Import von Symbolen, so dass Sie würde haben, um einen Anruf zuimport
in der BEGIN-block zu. Insgesamt eine schlechte Lösung für das, was der OP machen will.InformationsquelleAutor user2050283
FindBin::libs funktioniert der trick:
InformationsquelleAutor creaktive