Perl:如何处理重复的模块安装?

Perl: How to deal with a duplicated modules installation?

我是 Perl 的新手,无意中安装了双模块。

我重新安装了 Strawbery Perl on Windows 10. After that, I tried to update all modules at once by using a command proposed in this answer; :

cpan-outdated -p | cpanm

不幸的是,更新似乎可能安装在另一个位置:

whichpm -a Mojolicious
C:\Strawberry\perl\site\lib\Mojolicious.pm
C:\Strawberry\perl\vendor\lib\Mojolicious.pm


whichpm -v Mojolicious
whichpm: WARNING: DUPLICATE module files found for 'Mojolicious':
  C:\Strawberry\perl\vendor\lib\Mojolicious.pm
Mojolicious     8.22    (non-core)      C:\Strawberry\perl\site\lib\Mojolicious.pm

遇到这种情况怎么处理?

如何在进一步的更新中防止此类情况发生?

perl -wE "say for @INC"

C:/Strawberry/perl/site/lib/MSWin32-x64-multi-thread
C:/Strawberry/perl/site/lib
C:/Strawberry/perl/vendor/lib
C:/Strawberry/perl/lib

一切正常。


共有三组安装位置:核心、供应商和站点。

vendor 目录通常由 linux 发行版的包管理器使用,但 Strawberry Perl 似乎在其发行版中包含许多非核心模块(包括 Mojolicious),并将它们放在供应商目录。 这是正确的。[1]

站点目录用于用户安装的模块。因此,升级后的 Mojolicious 已安装到站点目录中。 这是对的。

(更多差异 。)

这不是问题,因为站点目录位于 @INC 中的供应商目录之前,因此在供应商安装的版本之前找到模块的用户安装版本。


  1. 使用网站目录可能也不错,因为 Strawberry Perl 不提供管理它捆绑的发行版的方法。但是使用供应商目录肯定是安全的。