同步 perlbrew 和 cpan 安装位置

syncing perlbrew and cpan install locations

我正在使用 perlbrew 运行 我主目录中的本地 perl,并使用 cpan 安装新模块。但是,我似乎配置有误。当我使用 cpan 时,它总是将库安装到 ~/perl 目录,但我的 perlbrew 位于 ~/perl5 目录中。这导致创建适当的 PERL5LIB 目录时出现一些问题,而我应该包括 perl 或 perl5 库以及按什么顺序。我似乎一直 运行 关注先有鸡还是先有蛋的问题,其中要么首先导致加载错误的模块,要么抱怨使用了错误的版本。具体来说,它抱怨 5.8.8 perl 版本(我在决定升级到稍微不那么古老的版本之前安装的第一个版本,仍然是 /bin/perl 的版本)与我正在使用的 10.1 库冲突。

我认为这可能可以通过更新配置文件来解决,但我不确定要更改什么。我查看了我的 cpan config.pm,我没有看到任何定义安装方向的东西,事实上我不确定 cpan 如何知道在本地安装而不是尝试安装到全局 cpan 目录。

任何人都可以指出我需要更改的适当配置值以使 cpan 更新我的 perlbrew 库,而不是获取两个单独的库吗?

编辑

好吧,我很盲目。答案就在我位于 ~/.cpan/CPAN/MyConfig.pm 的配置文件中。我发誓我看了几次这个文件,甚至搜索了 perl 这个词来寻找任何可能指向我的 ~/perl 目录的行,但不知何故错过了我正在寻找的非常明显的配置选项......不知道如何。

无论如何,一旦我看到它,我只需要改变它指向的地方,这需要一些错误的尝试。我更改了这一行:

'makepl_arg' => q[PREFIX=~/perl],

'makepl_arg' => q[PREFIX=~/perl5/perlbrew/perls/perl-5.10.1/],

这当然是我用于 perlbrew 的 perl 版本的位置。这似乎解决了我的问题,如果我不是瞎子的话应该很容易。

我确实有一个烦恼,我有这一行和我的 PERL5LIB 变量,在 ~/.bashrc 中设置,有效地硬编码以指向 perllib 的 perl-5.10.1 版本,这意味着如果我决定切换到另一个 perl 版本我需要更新两个引用或再次遇到问题。我不确定如何让 cpan 或我的 PERL5Lib 知道如何从它应该使用的 perls 目录中推断出哪个版本的 perl。这对我来说不是什么大问题,我不认为我会被允许升级到 5.10.1 以上(即使我想)所以我不太可能改变这个值。否则它现在工作正常。

两个问题。

  1. 您的 CPAN 部分配置覆盖了它应该安装模块的位置。通过清除 makepl_arg.

    删除此覆盖

    来自 cpan:

    o conf makepl_arg ""
    o conf commit
    

    来自sh

    echo -e -n 'o conf makepl_arg ""\no conf commit\n' | cpan
    
  2. 您的 PERL5LIB 告诉您的 perl 在不该查找的地方查找模块。通过删除在 ~/.bashrc.

  3. 中设置它的指令来取消设置

您可能还有其他问题,但我们需要知道以下 sh 命令的输出才能确定:

set | grep ^PERL ; echo 'o conf' | cpan | grep 'makepl_\|make_\|mbuild_'