我想让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环境变量中,它被许多脚本使用,因此我无法禁用它。
答案 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
语句之后)看看你的脚本在做什么。这可以帮助您调试问题。