如何从库中查找和删除重复的Perl模块?

Dan*_*umb 6 perl module

我一直在使用Module :: Build来管理我的模块安装,我发现我在库的不同部分有给定模块的重复版本:

./site_perl/5.14.2/i686-linux/site_perl/Support/Dump.pm
./site_perl/5.14.2/Support/Dump.pm
Run Code Online (Sandbox Code Playgroud)

这是我关心的问题,因为我无法确定它们会保持同步.

有没有办法找到并删除这种重复的文件?或者这些是因为我做了什么,我可以控制它吗?

Tan*_*lus 3

这可能是因为您在模块中添加/删除了 XS 代码。如果您添加了 XS 代码,则第一个是当前的(好),如果您删除了所有 XS 代码,则第二个是当前的(不好)。这不太可能是一个长期问题,因此可能没有必要采取长期解决方案。

如果运行perl -V,您会注意到 @INC 中每个路径的顺序。Perl 可能会在普通目录之前拥有您的 i686-linux/site_perl 目录,因此您的 XS 版本将被加载,而另一个将被忽略。它们是否同步并不重要,只有一个会被加载。因此,重要的是,如果您删除所有 XS 代码,使其成为纯 Perl 模块,则必须从树中删除 XS 版本。这种情况很少见——一旦你开始做 XS,通常它就不会被删除。即使是双重生命模块 (List::MoreUtils) 也会保留其 XS 代码,并且仅仅有一种方法来确定它是否已安装,并且有一种方法可以出于测试目的禁用 XS 代码。但他们实际上并没有摆脱 XS 代码。

最有可能的是,您添加了 XS 代码,因此它不再是纯 Perl,一切都会好起来的。