2

perlに自分のパス(/ home / users / zdd / perl5 / lib / DBIを想定)でDBIモジュールを使用させたいのですが、sysemには/ usr / lib / perl5 / lib/DBIであるDBIモジュールもあります。スクリプトに次のコードを書くとき、perlはデフォルトのシステムパスを使用しますが、パスの下にあるものを強制的に使用するにはどうすればよいですか?

use lib './perl5/lib/DBI';
use DBI;

sub test {
....
}

/ usr / lib / perl5 / lib / DBIがbashプロファイルのPATH環境変数に追加されました。これは多くのスクリプトで使用されていたため、無効にすることはできません。

4

2 に答える 2

6

メインDBIモジュールのファイルは./perl5/lib. したがって、パスはそれを指していません。

このフォルダには、たとえばDBIのサブモジュールが含まれています(モジュール名の は、モジュールのディレクトリ構造を表しています)。DBIDBI::Foo::

./perl5/lib代わりにライブラリとして使用してみてください。

また、相対パスを使用すると、現在のディレクトリが想定と異なる場合に失敗します。確信が持てない場合は、スクリプトを呼び出しcwdて、現在のディレクトリが何であるかを確認してください。

デバッグ目的では、次を使用すると役立つ場合があります。

no lib '[main Perl module library path here]';

そうすれば、カスタム モジュール パスのみを使用していることを確認できます。モジュールの検出に失敗すると、システム バージョンを黙って使用するのではなく、エラーが発生します。

更新:詳細については、Perldoc をuse lib参照してください。Perl、最初に指定したライブラリを使用します。そうでない場合は、指定した場所で実際にモジュールが見つからないことを示しています。

于 2013-03-22T06:07:53.043 に答える
1

dan1111 が提案したことに加えて、 (ステートメント@INCの直前に) 印刷して (ステートメントの直後にuse DBI) ダンプし、スクリプトが何を行っているかを確認することもお勧めします。これは、問題のデバッグに役立つ場合があります。%INCuse DBI

于 2013-03-22T13:16:38.183 に答える