2

我想让 perl 在我自己的路径中使用 DBI 模块(假设 /home/users/zdd/perl5/lib/DBI),但系统也有一个 DBI 模块,即 /usr/lib/perl5/lib/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文件夹包含 的子模块DBI,例如DBI::Foo::in 模块名称是您的模块目录结构的表示)。

尝试使用./perl5/lib作为您的库。

此外,如果当前目录不是您认为的那样,则使用相对路径将失败。如果您有疑问,请调用cwd您的脚本以查看当前目录是什么。

出于调试目的,使用以下方法可能会有所帮助:

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

这样你就可以确定你只使用你的自定义模块路径。任何找不到模块都会导致错误,而不是静默使用系统版本。

更新:有关更多信息,请参阅Perldoc onuse lib . Perl使用您首先指定的库。如果没有,则表明它实际上并未在您给定的位置找到该模块。

于 2013-03-22T06:07:53.043 回答
1

In addition to what dan1111 suggested, I would also recommend you print out @INC (just before your use DBI statement) and dump %INC (just after your use DBI statement) to see what your script is doing. That may help you debug the issue.

于 2013-03-22T13:16:38.183 回答