[sf-perl] /usr/local/foo/ for cpan and locally grown modules
Michael Budash
mbudash at sonic.net
Sat Feb 17 14:11:26 PST 2007
perldoc -q 'your question here' is your friend!
this is what comes back for "perldoc -q 'my own'":
Found in /usr/lib/perl5/5.8.5/pod/perlfaq8.pod
How do I keep my own module/library directory?
When you build modules, use the PREFIX and LIB options when
generating Makefiles:
perl Makefile.PL PREFIX=/mydir/perl LIB=/mydir/perl/lib
then either set the PERL5LIB environment variable before you
run scripts that use the modules/libraries (see
perlrun) or say
use lib ’/mydir/perl/lib’;
This is almost the same as
BEGIN {
unshift(@INC, ’/mydir/perl/lib’);
}
except that the lib module checks for machine-dependent
subdirectories. See Perl’s lib for more information.
On Feb 17, 2007, at 2:02 PM, David Alban wrote:
> FYI, this didn't work:
>
> perl Makefile.PL PREFIX=/usr/local/FOO
>
> That is, using PREFIX=/usr/local/FOO didn't cause a cpan module to be
> installed in the /usr/local/FOO tree such that I could include it
> with:
>
> use lib "/usr/local/FOO/lib/perl";
> use Some::Module;
>
> But this does work (/usr/local/FOO/lib/perl is a symlink to perl5):
>
> perl Makefile.PL LIB=/usr/local/FOO/perl5
>
> It caused, for example, Crypt::PasswdMD5 to be installed as:
>
> /usr/local/FOO/lib/perl5/Crypt/PasswdMD5.pm
>
> Which is the same location I'm putting home grown modules.
>
> So now I have a single:
>
> use lib "/usr/local/FOO/lib/perl";
>
> statement that works both for home grown and installed-from-cpan
> modules.
>
> Yay!
>
> On 1/29/07, David Alban <extasia at extasia.org> wrote:
>> (Assume I'm not allowed to update the "live" perl installation, so
>> I'm
>> installing modules in the /usr/local/FOO tree.) I have:
>>
>> $ find /usr/local/FOO/lib/perl5 -type f
>> /usr/local/FOO/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi/
>> auto/Crypt/PasswdMD5/.packlist
>> /usr/local/FOO/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi/
>> perllocal.pod
>> /usr/local/FOO/lib/perl5/site_perl/5.8.0/Crypt/PasswdMD5.pm
>> /usr/local/FOO/lib/perl5/Log/Transcript.pm
>>
>> Crypt::PasswdMD5 is from CPAN. I took Garth's suggestion and did:
>>
>> $ perl Makefile.PL PREFIX=/usr/local/FOO
>>
>> 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/FOO/lib/perl5";
>> # or /usr/local/FOO/lib/perl if I make the latter a
>> symlink to
>> the former
>>
>> Not two:
>>
>> use lib "/usr/local/FOO/lib/perl5";
>> use lib "/usr/local/FOO/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/FOO/lib/perl5 -
>> MCrypt::PasswdMD5 -e 1
>> Can't locate Crypt/PasswdMD5.pm in @INC (@INC contains:
>> /usr/local/FOO/lib/perl5/5.8.0/i386-linux-thread-multi
>> /usr/local/FOO/lib/perl5/5.8.0 /usr/local/FOO/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/FOO/lib/perl5 -e 'print join
>> "\n", @INC'
>> /usr/local/FOO/lib/perl5/5.8.0/i386-linux-thread-multi
>> /usr/local/FOO/lib/perl5/5.8.0
>> /usr/local/FOO/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/FOO/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/FOO/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