Sabin Cheruvattil
Sabin Cheruvattil

Reputation: 39

Is there any way to find available CPAN version programmatically?

I am trying to find CPAN version programmatically, but ends up in failure.

Tried with perl %Config & %ENV, but couldn't find anything there.

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

My goal is to auto configure cpan programmatically. CPAN config prompt varies by versions.

CPAN asks like[similar]: 1. "Do you want to manually configure?[yes]" 2. "Do you want cpan to configure?[no]"

Any way to find CPAN version or avoiding unattended CPAN configuration?

Upvotes: 1

Views: 217

Answers (2)

ikegami
ikegami

Reputation: 386541

My goal is to auto configure cpan programmatically.

If you're talking about systems with a known configuration, just create (or modify) ~/.cpan/CPAN/MyConfig.pm. For example, the following is mine:

$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__

Optionally, you can force the defaults to be used, and modify what needs to be changed. For example,

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

o conf init causes the initalization process to be started. yes accepts the defaults. o conf prerequisites_policy ask is an example of changing a default. o conf commit saves the changes.

Upvotes: 1

Dave Cross
Dave Cross

Reputation: 69314

The cpan command-line program is a wrapper around App::Cpan. As far as I can see, the two files always have the same version number. That means you can do something like this:

use App::Cpan;

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

Update: There are a few concepts to get straight here.

  • CPAN.pm is a CPAN exploration module that was added to Perl version 5.004. It includes its own basic shell.
  • App::Cpan is a wrapper around CPAN.pm which adds an improved command interface. It was added to Perl 5.12.
  • cpan is a tiny script that uses App::Cpan. It was also added to Perl version 5.12. [Update: that's the current version of cpan - there was also an earlier one that was based on CPAN.pm.]

App::Cpan and cpan share the same version number (currently 1.675). CPAN.pm is older and therefore has a larger version number (currently 2.27).

The version number from App::CPAN is what you get when you run cpan -v - so that's what I've given you in my code.

Upvotes: 2

Related Questions