2017-02-17 3 views
0

Der Fehler beheben kann, sagt:Kann nicht DBI.pm in @INC lokalisieren nicht

Can't locate DBI.pm in @INC (@INC contains 
    /etc/perl 
    /usr/local/lib/perl/5.14.2 
    /usr/local/share/perl/5.14.2 
    /usr/lib/perl5 
    /usr/share/perl5 
    /usr/lib/perl/5.14 
    /usr/share/perl/5.14 
    /usr/local/lib/site_perl .) at /usr/lib/cgi-bin/helloworld.pl line 7. 

Aber ich hinzugefügt, die bereits den Weg meines Moduls Umgebungsvariable

mit
export PERL5LIB=/home/vagrant/perl5/lib/perl5/i686-linux-gnu-thread-multi-64int 

Als ich mit perl -V geprüft es bereits enthalten ist, finden sie unter:

%ENV: 
    PERL5LIB="/home/vagrant/perl5/lib/perl5" 
    PERL_LOCAL_LIB_ROOT="/home/vagrant/perl5" 
    PERL_MB_OPT="--install_base "/home/vagrant/perl5"" 
    PERL_MM_OPT="INSTALL_BASE=/home/vagrant/perl5" 
    @INC: 
    /home/vagrant/perl5/lib/perl5/5.14.2/i686-linux-gnu-thread-multi-64int 
    /home/vagrant/perl5/lib/perl5/5.14.2 
    /home/vagrant/perl5/lib/perl5/i686-linux-gnu-thread-multi-64int <--- My module 
    /home/vagrant/perl5/lib/perl5 
    /etc/perl 
    /usr/local/lib/perl/5.14.2 
    /usr/local/share/perl/5.14.2 
    /usr/lib/perl5 
    /usr/share/perl5 
    /usr/lib/perl/5.14 
    /usr/share/perl/5.14 
    /usr/local/lib/site_perl 

Meine Maschine ist Ubuntu 16.04.2 LTS

Ihre Hilfe wird sehr geschätzt, danke Jungs!

+0

Sie führen eine andere Kopie von Perl aus, wenn Sie Ihren Code von dem testen, den Sie mit 'perl -V' ausführen. Wie testen Sie Ihren Code? Was zeigt 'was-ein Perl'? Was ist in der Shebang-Zeile Ihres Programms? – Borodin

+0

Haben Sie das DBI-Modul tatsächlich installiert? –

+0

Ich habe es über http-Anfrage im Browser getestet, das Ergebnis von 'welches -a Perl' ist'/usr/bin/perl', siehe meinen Testcode: #!/Usr/bin/perl print "Inhaltstyp: Text \ html \ n \ n "; verwenden Sie streng; Verwenden Sie Warnungen; DBI verwenden; print "Hallo Welt \ n"; – Ron

Antwort

0

Siehe Dokumentation für 'Use lib' here und 'Perl Run' here und Ubuntu Umgebungsvariablen here.

Ich vermute, dass Sie das Skript aus verschiedenen Umgebungen ausführen. Ihre Shell-Eingabeaufforderung ist eine andere Umgebung als die, die ein httpd-Server verwenden würde, was sich auch von dem unterscheidet, was das Cron-Programm verwenden würde. Wenn Sie Ihrer Umgebung eine Umgebungsvariable hinzufügen, geschieht dies nur in Ihrer Umgebung (und oft nur in der Instanz Ihrer Umgebung) und nicht in diesen anderen. Diese anderen Anwendungen können Ihre Umgebungsvariablen nicht sehen oder lesen.

Ich vermute hier, wie Sie keinen Code liefern hat, dass das Hinzufügen der folgenden Zeilen in Ihrem Skript, kurz vor kann Hilfe Sie ‚use DBI‘:

use lib "/home/vagrant/perl5/lib/perl5"; 
use lib "/home/vagrant/perl5/lib/perl5/i686-linux-gnu-thread-multi-64int"; 

ich sagen kann weil, wie der große ikegami darauf hinwies, wenn die Umgebung dieser separaten Anwendungen keinen Zugriff auf Ihre Verzeichnisse hat, diese Ordner nicht zur @ INC-Liste hinzugefügt werden. Der erste Abschnitt der Ausgabe, den Sie gepostet haben, zeigt deutlich, dass Ihre privaten Ordner nicht in der Liste enthalten sind.

Verwandte Themen