如何告诉CPAN.pm使用特定于应用程序的mini-cpan?

sid*_*ler 4 perl cpan minicpan

有没有办法使用特定于应用程序的迷你CPAN(以确保不同应用程序的特定模块版本,并使安装工作没有网络访问).'标准'mini-cpan方式依赖于在CPAN/Config.pm中使用文件URL设置'o conf urllist'

一个迷你cpan就好了.但是,我需要为每个应用程序(应用程序本地)从不同目录自动安装CPAN,因为每个应用程序都有不同的版本要求.

以下几乎可以工作,但之后只有一个部分工作的shell,仍然从网上取而不是从$file_url位置使用mini-cpan :

use CPAN;
use FindBin qw($Bin);

my $file_url="file:///$Bin/../cpan";
CPAN::Shell->o(qw( conf urllist ),$file_url);

CPAN::shell();
Run Code Online (Sandbox Code Playgroud)

bri*_*foy 5

您为每个应用程序加载不同的配置文件.最新的cpan命令有一个-j切换来做到这一点:

$ cpan -j some/app/Config.pm -i Foo::Bar
Run Code Online (Sandbox Code Playgroud)

此最新功能尚未包含在CPAN.pm发行版中,因为它是实验性的.然而,作为我的DPAN工作的一部分,我已经使用了几个月.

如果您不喜欢这些,您只需提供特定CPAN::Config于应用程序的模块,Perl会在找到您的个人或站点范围版本之前找到它.将当前的CPAN/Config.pm复制到应用程序模块目录中,并确保该目录位于@INC中(可能使用PERL5LIB环境变量).CPAN.pm应首先找到它并使用它.它只使用它找到的第一个.这在配置修复时很方便,但由于您可以在模块中运行代码,因此它有点灵活.它的配置为Perl代码.

如果这对您来说不够好,您可以CPAN::HandleConfig()在应用程序中覆盖,以便CPAN.pm不加载任何文件.然后,您自己设置值.当您有许多应用程序逻辑要解决以找出某些配置值时,这尤其方便.CPAN.pm配置只是%CPAN::Config哈希值,因此您只需为相应的键设置正确的值.

在任何情况下,您可能希望将"connect_to_internet_ok"配置设置为false值并清除"urllist"以仅包含本地minicpans.