我一直在使用Module :: Build来管理我的模块安装,我发现我在库的不同部分有给定模块的重复版本:
./site_perl/5.14.2/i686-linux/site_perl/Support/Dump.pm
./site_perl/5.14.2/Support/Dump.pm
这是我关注的问题,因为我无法确定它们会保持同步。
有没有办法找到并删除此类重复文件?或者这些是因为我做了什么,我可以控制它吗?
答案 0 :(得分:3)
这可能是因为您从模块中添加/删除了XS代码。如果您添加了XS代码,则第一个是当前的(好),如果您删除了所有XS代码,则第二个是当前的(不好)。这不太可能成为长期问题,因此可能不需要长期解决方案。
如果您运行perl -V
,您会注意到@INC中每个路径的顺序。 Perl可能会将你的i686-linux / site_perl目录放在正常目录之前,因此你的XS版本将被加载,而另一个将被忽略。它们是否同步无关紧要,只有一个会被加载。因此,重要的是如果删除所有XS代码使其成为纯perl模块,则必须从树中删除XS版本。这很少见 - 一旦你开始做XS,通常它不会被删除。即使是双生命模块(List :: MoreUtils)也会保留其XS代码,并且只能确定它是否已安装,并且有办法禁用XS代码以进行测试。但他们实际上并没有摆脱XS代码。
最有可能的是,你添加了XS代码,因此它不再是纯perl,一切都会好的。
答案 1 :(得分:1)
为什么呢?它引起了问题吗?识别分发中的所有文件可能很棘手,因此尝试删除已安装的分发比将事情留下更容易造成问题。
你说你担心安装失去同步,但这没有任何意义。你为什么关心你没有使用的安装状态?
答案 2 :(得分:0)
您很可能总是有一些重复的外观模块,因为这些模块安装在 @INC
列表中定义的一个(或多个)路径中。如果使用cpan -l
检查模块版本,则可能会发现它们具有不同的版本。有关更多详细信息,请参见this answer。
但是,人们总是会怀疑为什么Perl从来没有提供一种更为理智(对人友好)的方式来组织和检查已安装的模块。