views:

38

answers:

2

I've recently set up a new system and wanted to install Padre to check it out. The Padre install instructions specifically said to install local::lib, so I did so (although I've never had need of it before). I then went on my way installing several other modules, running CPAN from my normal user account with sudo to handle the root-required portions of the installation.

Then time came to test out one of the web apps these modules were needed to support and, lo and behold, apache couldn't find them. They loaded fine from the command line and a quick look in ~/perl5 confirmed my suspicion that local::lib had hijacked my CPAN sessions and installed these modules there instead of in a site-wide location, despite my CPAN config including

makepl_arg         [INSTALLDIRS=site]
mbuildpl_arg       [--installdirs site]

What do I need to do to my CPAN config so that modules will be installed site-wide even though local::lib is installed? Or will Padre work without it and I can just remove local::lib entirely?

(I do not want any modules installed under ~/perl5 unless Padre insists on them being there. My code under development has its own project-specific directory locations and everything else should be site-wide. I have no need for a private catch-all location.)

A: 

Based on this comment, it seems that local::lib installs its own version of CPAN.pm. If this is the case, you may need to find the original CPAN.pm and make sure that that one is loaded when you run your CPAN shell. Something like:

perl -I /usr/lib/perl5 -MCPAN -e shell

might do it. You might also find perl -V useful to see what include path the Perl compiler is using for its modules.

Tim
Nope, modules are still being installed under `~/perl5` even with `-I /usr/lib/perl5` and all directories under `~/perl5` removed from @INC.
Dave Sherohman
OK, this will tell you which CPAN.pm module is being loaded: `perl -MCPAN -le 'print $INC{"CPAN.pm"}'` What does it print?
Tim
`/usr/share/perl/5.10/CPAN.pm`
Dave Sherohman
Looking into that file, it's `$CPAN::VERSION = '1.9402';`, so it appears to be a normal CPAN.pm.
Dave Sherohman
OK, does FAQ number 5 from http://search.cpan.org/~andk/CPAN-1.9402/lib/CPAN.pm help?
Tim
That came close, but not quite. It was `PERL_MM_OPT` causing the problem rather than any of those mentioned in that FAQ item. Thanks for helping to get me looking in the right direction!
Dave Sherohman
Great. Glad you got there, anyway. :-)
Tim
+1  A: 

Got it. Per the instructions on local::lib's CPAN page, I had set export PERL_MM_OPT='INSTALL_BASE=~me/perl', which was overriding the setting in my CPAN config. A quick export PERL_MM_OPT= got me back to a proper install location.

On the one hand, that's what I get for following the instructions blindly. On the other, I would have expected o conf to show the actual config settings that are being used rather than those which are in the saved CPAN config (even if an environment variable is overriding them).

Dave Sherohman
This is why I think local::lib, perlbrew, etc, although technically good, are socially bad. It's supposed to make things easier for people who understand the process already, not make it so you can ignore what it does for you.
brian d foy