[perl]如何在我自己的路径中强制perl使用模块?

时间:2013-03-22 06:00:56

标签: perl dbi perl5

我想让perl在我自己的路径中使用DBI模块(假设,/ home / users / zdd / perl5 / lib / DBI),但是sysem也有一个DBI模块,它是/ usr / lib / perl5 / LIB / DBI。 当我在我的脚本中编写以下代码时,perl使用系统路径默认,如何强制它使用我的路径下的那个?

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

sub test {
....
}

/ usr / lib / perl5 / lib / DBI已添加到我的bash配置文件中的PATH环境变量中,它被许多脚本使用,因此我无法禁用它。

2 个答案:

答案 0 :(得分:6)

DBI模块的文件位于./perl5/lib。所以你的道路并没有指向它。

DBI文件夹包含DBI的子模块,例如DBI::Foo(模块名称中的::表示模块目录结构。)

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

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

出于调试目的,使用:

可能会有所帮助
no lib '[main Perl module library path here]';

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

更新:有关详细信息,请参阅Perldoc on use lib。 Perl 使用您首先指定的库。如果没有,则表示它实际上没有在您给出的位置找到该模块。

答案 1 :(得分:1)

除了dan1111建议的内容之外,我还建议您打印出@INC(在use DBI语句之前)并转储%INC(在use DBI语句之后)看看你的脚本在做什么。这可以帮助您调试问题。