Ich habe vor Kurzem CentOS 6.3 (i386) installiert.
Es verfügt über zwei Perl-Binärdateien
/usr/bin/perl (v5.10.1)
/usr/local/appx/perl/bin/perl (v5.8.8)
Meine Frage: Ist es möglich, mithilfe von systemweitem Perl und dem Perl-Modul aus dieser AppX andere Funktionen in diese Anwendung zu installieren?
Wie unten:
./configue -prefix=/usrl/local/app_xyz -perl_lib_path=/usr/local/appx/perl/lib/5.8.8/
Ich habe das oben genannte versucht, habe jedoch die folgende Fehlermeldung erhalten:
RRD Perl Module -----------------**Not Found**
Aber dieses Perl-Modul RRDs.pm
ist im /usr/local/appx/lib/5.8.8
Verzeichnis verfügbar.
Außerdem muss das Skript unseren AppX-Perl-Binärpfad ( ) configure
nicht zuordnen , es wählt automatisch das systemweite Perl als Standard aus.ARG
/usr/local/appx/perl/bin/perl
Antwort1
Die Nebenversionen von Perl 5 sind abwärtskompatibel, daher sollte ein 5.8.8-Modul mit einem 5.10.1-Perl funktionieren (es gibt jedoch eine Ausnahme, siehe CAVEAT unten). Der Include-Pfad ( @INC
) wird beim Erstellen von Perl konfiguriert, @INC
kann jedoch von einzelnen Programmen geändert werden, und global wird der Inhalt der Umgebungsvariable $PERL5LIB vorangestellt.
export PERL5LIB=/usr/local/appx/lib/5.8.8
Dieser Ansatz bringt jedoch ein Problem mit sich. Da $PERL5LIBvorangestelltzu @INC
, dies führt dazu, dass das Verzeichnis 5.8.8 beim Laden verschiedener Standardmodule Vorrang hat. Das ist nicht wünschenswert.
Eine weniger aufgeräumte, aber letztlich bessere Idee ist es, einfach einen symbolischen Link /usr/local/appx/lib/5.8.8/RRD.pm
(und/oder das RRD-Verzeichnis, falls vorhanden) in /usr/local/lib/perl5
ein anderes Standardverzeichnis zu @INC
erstellen. Sie können diese mit folgendem sehen:
perl -e 'print "$_\n" foreach @INC'
Beachten Sie, dass es sowohl ein RRD.pm der obersten Ebene als auch ein paralleles RRD-Verzeichnis geben kann. Wenn dies der Fall ist, möchten Sie beide symbolisch verknüpfen.
VORBEHALT
Einige Perl-Module enthalten Teile, die aus C kompiliert wurden und die möglicherweise nicht funktionieren. Wenn RRD.pm kein C verwendet, müssen Sie sich keine Sorgen machen. Wenn doch, sollten Sie es kopieren, anstatt einen symbolischen Link darauf zu erstellen, und es neu erstellen. Dazu benötigen Sie den Quellcode, der vorhanden sein kann, aber nicht muss :(