[sf-perl] /usr/local/foo/ for cpan and locally grown modules

David Alban extasia at extasia.org
Mon Jan 29 18:01:50 PST 2007


(Assume I'm not allowed to update the "live" perl installation, so I'm
installing modules in the /usr/local/reg tree.)  I have:

$ find /usr/local/reg/lib/perl5 -type f
/usr/local/reg/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi/auto/Crypt/PasswdMD5/.packlist
/usr/local/reg/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi/perllocal.pod
/usr/local/reg/lib/perl5/site_perl/5.8.0/Crypt/PasswdMD5.pm
/usr/local/reg/lib/perl5/Log/Transcript.pm

Crypt::PasswdMD5 is from CPAN.  I took Garth's suggestion and did:

  $ perl Makefile.PL PREFIX=/usr/local/reg

and the files were installed as shown above.  Log::Transcript is the
module I wrote.

Ideally, I'd like to have users be able to include a single "use ..."
statement in the code.[1]  I'd like it to be:

  use lib "/usr/local/reg/lib/perl5";
        # or /usr/local/reg/lib/perl if I make the latter a symlink to
the former

Not two:

  use lib "/usr/local/reg/lib/perl5";
  use lib "/usr/local/reg/lib/perl5/site_perl";

Based on Quinn's suggestion, I thought the former might allow a
program to pick up both Log::Transcript (or, home-grown modules) and
Crypt::PasswdMD5 (or, cpan installed modules).  But it doesn't pick up
the site_perl tree:

$ unset PERL5LIB; perl -I/usr/local/reg/lib/perl5 -MCrypt::PasswdMD5 -e 1
Can't locate Crypt/PasswdMD5.pm in @INC (@INC contains:
/usr/local/reg/lib/perl5/5.8.0/i386-linux-thread-multi
/usr/local/reg/lib/perl5/5.8.0 /usr/local/reg/lib/perl5
/usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0
/usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl
/usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 .).
BEGIN failed--compilation aborted.

It's a little clearer here:

$ unset PERL5LIB; perl -I/usr/local/reg/lib/perl5 -e 'print join "\n", @INC'
/usr/local/reg/lib/perl5/5.8.0/i386-linux-thread-multi
/usr/local/reg/lib/perl5/5.8.0
/usr/local/reg/lib/perl5
/usr/lib/perl5/5.8.0/i386-linux-thread-multi
/usr/lib/perl5/5.8.0
/usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.0
/usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.0
/usr/lib/perl5/vendor_perl
/usr/lib/perl5/5.8.0/i386-linux-thread-multi
/usr/lib/perl5/5.8.0

Am I missing something that I can use to get a single:

  use lib "/usr/local/reg/lib/perl5";

statement to work (i.e., to include the site_perl tree, too)?

Thanks,
David

[1] There's no hope of getting them to set PERL5LIB in their environment

On 1/25/07, Quinn Weaver <quinn at fairpath.com> wrote:
> Right.  And in this case, you'd do
>
> export PERL5LIB=/usr/local/reg/lib/perl5 # bash syntax
>
> ... then Perl automatically searches under there for site_perl,
> site_perl/5.8.0, and all those other weirdly named subdirs that
> Perl uses to install things.

-- 
Live in a world of your own, but always welcome visitors.


More information about the SanFrancisco-pm mailing list