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)
您为每个应用程序加载不同的配置文件.最新的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.