in reply to Re: Why do Perl and CPAN use so many different install directories?
in thread Why do Perl and CPAN use so many different install directories?

The annoying problem that I am wrestling with now is that I cannot seem to persuade CPAN to install HTTP::Daemon in /users/glew/.cpan/install/lib/site_perl/5.10.0/HTTP/Daemon, or whatever directory it needs to be in for 5.10.0. Instead, even though I am using 5.10.0, and even though many CPAN modules have installed under the 5.10.0 directories, CPAN finds that there is an up to date version under /users/glew/.cpan/install/lib/site_perl/5.8.5/HTTP/Daemon Therefore my question: should I put the 5.8.5 directories in the PERL5LIB path for a 5.10.0 script? Is there a way to tell CPAN to install versions under 5.10.0 directories, even though 5.8.5 exists and is up to date? Perhaps I should create completely separate ~/.cpan trees for the different versions? Unfortunately, separate machines is not an option. The only disks I have access to are Linux, NFS, shared amongst all machines.
  • Comment on Re^2: Why do Perl and CPAN use so many different install directories?

Replies are listed 'Best First'.
Re^3: Why do Perl and CPAN use so many different install directories?
by Anonymous Monk on Aug 06, 2009 at 04:48 UTC
    I zorched my ~/.cpan directory tree, and re-installed the modules I use. Now I see only the generic perl5 stuff, and perl5/*/5.10.0/* stuff. I conjecture that CPAN will install a new package in either generic perl5 directories, or in perl5/*/$VERSION directories. e.g. perl5/*/5.10.0 However, if it finds an existing directory for an older version of perl (not the package), and the package is unchanged, it will leave the package in the old directory, e.g. perl5/*/5.8.5 I conjecture that it is usually safe to layer the many, many, directories, with the most recent version at the front of the path, and the oldest at the end. That way, if CPAN has installed a new version, it will be found before the old. However, you could get into trouble, in ways such as (a) your code uses an obsolete module - e.g. you get perl5/*/5.8.5/*/Old/Module rather than perl5/*/5.10.0/*/New/Module. And you find the old module still on your path. Or (b) you have something like perl5/site_perl/*/5.8.5/Module that you have made local changes to. If you install perl5/5.8.5/Module, the newer standard version may override your local changes. I conjecture that it might be better to have different CPAN trees for every version of the compiler you deal with. E.g. .cpan/5.10.0/, .cpan/5.8.5/, ... But I see nobody recommending this. So maybe I shouldn't bother.