【问题标题】:Is there any way to find available CPAN version programmatically?有没有办法以编程方式找到可用的 CPAN 版本?
【发布时间】:2019-12-03 14:22:34
【问题描述】:

我正在尝试以编程方式查找 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 配置?

【问题讨论】:

    标签: cpan perl cpanm


    【解决方案1】:

    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 时得到的 - 这就是我在代码中给您的。

    【讨论】:

    • 如果CPAN在一台机器[OS]上可用,App::Cpan也可用,对吧?
    • CPAN 探索和模块安装 (v2.11)。但是,$AppCpan::VERSION 给出的是 1.63。
    【解决方案2】:

    我的目标是以编程方式自动配置 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 保存更改。

    【讨论】:

      猜你喜欢
      • 2011-11-22
      • 1970-01-01
      • 2021-08-28
      • 2019-06-01
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      相关资源
      最近更新 更多