有什么办法以编程方式找到可用的CPAN版本吗?

时间:2019-07-25 10:23:14

标签: perl cpan perl5 cpanm

我正在尝试以编程方式找到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配置的任何方法?

2 个答案:

答案 0 :(得分:1)

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

use App::Cpan;

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

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

  • CPAN.pm是一个CPAN探索模块,已添加到Perl版本5.004中。它包括自己的基本外壳。
  • 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)。

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

答案 1 :(得分: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保存更改。