Есть ли способ найти доступную версию CPAN программно?

Я пытаюсь найти версию 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?


person Sabin Cheruvattil    schedule 25.07.2019    source источник


Ответы (2)


Программа командной строки 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).

Номер версии из App::CPAN — это то, что вы получаете при запуске cpan -v — это то, что я дал вам в своем коде.

person Dave Cross    schedule 25.07.2019
comment
Если CPAN доступен на одной машине [ОС], App::Cpan также доступен, верно? - person Sabin Cheruvattil; 25.07.2019
comment
Исследование CPAN и установка модулей (v2.11). Но $AppCpan::VERSION дает 1.63. - person Sabin Cheruvattil; 25.07.2019

Моей целью является программная автоматическая настройка 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 сохраняет изменения.

person ikegami    schedule 25.07.2019