包含perl模块时搜索顺序问题

时间:2013-03-05 16:51:14

标签: perl perl-module

这个问题是一个跟进: What's the search order in perl's include path when a module is loaded发布了一段时间,但仍未得到答复。

我有两个版本(1.22和1.25)的模块IO安装在两个单独的文件夹中:

/some_path/lib/perl5/x86_64-linux-thread-multi/(对于IO.pm版本1.25) 和 /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/(对于IO.pm版本1.22)

@INC列表如下:

/some_path/lib/perl5/x86_64-linux-thread-multi/
/usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/  
/usr/lib/perl5/site_perl/5.8.8/  
/usr/lib/perl5/site_perl/  
/usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/  
/usr/lib/perl5/vendor_perl/5.8.8/  
/usr/lib/perl5/vendor_perl/  
/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/  
/usr/lib/perl5/5.8.8/  
.  

当我尝试perl -e 'use IO'时,perl会返回以下错误消息:
IO对象版本1.22与/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/DynaLoader.pm第253行中的bootstrap参数1.25不匹配。 这表明使用IO模块版本1.22而不是IO版本1.25,即使应首先找到IO版本1.25。

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

您的IO安装不正确。

perl按预期在IO.pm中找到了1.25 /some_path/lib/perl5/x86_64-linux-thread-multi/,但它找到的第一个auto/IO/IO.so是1.22(在/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/中?)