1

我正在尝试以编程方式查找 CPAN 版本,但以失败告终。

尝试使用 perl %Config & %ENV,但在那里找不到任何东西。

my $cpanv = `cpan -v`;
# gives: Loading internal null logger. Install Log::Log4perl for logging messages

我的目标是以编程方式自动配置 cpan。CPAN 配置提示因版本而异。

CPAN 询问类似[类似]:1.“您要手动配置吗?[是]” 2.“您要 cpan 配置吗?[否]”

有什么方法可以找到 CPAN 版本或避免无人值守的 CPAN 配置?

4

2 回答 2

2

cpan命令行程序是App::Cpan的包装器。据我所知,这两个文件始终具有相同的版本号。这意味着您可以执行以下操作:

use App::Cpan;

my $cpanv = $App::Cpan::VERSION;

更新:这里有一些概念可以直接了解。

  • CPAN.pm是添加到 Perl 版本 5.004 的 CPAN 探索模块。它包括自己的基本外壳。
  • App::Cpan是 CPAN.pm 的包装器,它添加了改进的命令界面。它被添加到 Perl 5.12。
  • cpan是一个使用 App::Cpan 的小脚本。它也被添加到 Perl 版本 5.12。[更新:这是当前版本cpan- 还有一个基于 CPAN.pm 的早期版本。]

App::Cpan 和cpan共享相同的版本号(目前为 1.675)。CPAN.pm 较旧,因此版本号较大(当前为 2.27)。

App::CPAN 的版本号是您在运行时获得cpan -v的 - 这就是我在代码中给您的。

于 2019-07-25T10:29:32.763 回答
1

我的目标是以编程方式自动配置 cpan。

如果您谈论的是具有已知配置的系统,只需创建(或修改)~/.cpan/CPAN/MyConfig.pm. 例如,以下是我的:

$CPAN::Config = {
  'auto_commit' => q[0],
  'build_cache' => q[5],
  'build_dir' => q[/home/ikegami/.cpan/build],
  'build_requires_install_policy' => q[yes],
  'cache_metadata' => q[1],
  'check_sigs' => q[0],
  'commandnumber_in_prompt' => q[1],
  'connect_to_internet_ok' => q[1],
  'cpan_home' => q[/home/ikegami/.cpan],
  'dontload_hash' => {  },
  'ftp' => q[/usr/bin/ftp],
  'ftp_passive' => q[1],
  'ftp_proxy' => q[],
  'getcwd' => q[cwd],
  'gpg' => q[/usr/bin/gpg],
  'gzip' => q[/bin/gzip],
  'halt_on_failure' => q[0],
  'histfile' => q[],
  'http_proxy' => q[],
  'inactivity_timeout' => q[0],
  'index_expire' => q[1],
  'inhibit_startup_message' => q[0],
  'keep_source_where' => q[/home/ikegami/.cpan/sources],
  'load_module_verbosity' => q[none],
  'lynx' => q[],
  'make' => q[/usr/bin/make],
  'make_arg' => q[],
  'make_install_arg' => q[],
  'make_install_make_command' => q[/usr/bin/make],
  'makepl_arg' => q[],
  'mbuild_arg' => q[],
  'mbuild_install_arg' => q[],
  'mbuild_install_build_command' => q[./Build],
  'mbuildpl_arg' => q[],
  'ncftpget' => q[/usr/bin/ncftpget],
  'no_proxy' => q[],
  'pager' => q[less],
  'perl5lib_verbosity' => q[none],
  'prefer_external_tar' => q[1],
  'prefer_installer' => q[MB],
  'prerequisites_policy' => q[follow],
  'scan_cache' => q[atstart],
  'shell' => q[/bin/bash],
  'show_upload_date' => q[0],
  'tar' => q[/bin/tar],
  'tar_verbosity' => q[none],
  'term_is_latin' => q[1],
  'term_ornaments' => q[1],
  'trust_test_report_history' => q[0],
  'unzip' => q[/usr/bin/unzip],
  'urllist' => [q[http://ftp.osuosl.org/pub/CPAN/], q[http://mirrors.hub.co/CPAN/], q[http://cpan.arcticnetwork.ca/]],
  'use_sqlite' => q[0],
  'version_timeout' => q[15],
  'wget' => q[/usr/bin/wget],
  'yaml_load_code' => q[0],
};
1;
__END__

或者,您可以强制使用默认值,并修改需要更改的内容。例如,

cpan <<<'o conf init
yes
o conf prerequisites_policy ask
o conf commit
quit
'

o conf init导致初始化过程开始。yes接受默认值。o conf prerequisites_policy ask是更改默认值的示例。o conf commit保存更改。

于 2019-07-25T17:44:04.580 回答