4

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

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

以下几乎可以工作,但只有部分工作的外壳,并且仍然从网络获取而不是使用来自$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();
4

1 回答 1

5

您为每个应用程序加载不同的配置文件。最新的cpan命令有一个-j开关可以做到这一点:

$ cpan -j some/app/Config.pm -i Foo::Bar

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

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

如果这对您来说还不够好,您可以CPAN::HandleConfig()在您的应用程序中覆盖,这样 CPAN.pm 就不会加载任何文件。然后您自己设置值。当您需要解决大量应用程序逻辑以找出一些配置值时,这尤其方便。CPAN.pm 配置只是%CPAN::Config散列,因此您只需为适当的键设置正确的值。

在任何情况下,您可能希望将“connect_to_internet_ok”配置设置为 false 值并清除您的“urllist”以仅具有本地 minicpan。

于 2009-07-19T17:45:57.807 回答