Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Help adding paths to @INC

by cstrawfield (Initiate)
on Apr 22, 2012 at 21:21 UTC ( #966497=perlquestion: print w/ replies, xml ) Need Help??
cstrawfield has asked for the wisdom of the Perl Monks concerning the following question:

I'd like to add a path to the @INC array to reconcile differences between a new server and our old servers. They're CentOS servers (new is CentOS 6, old are 5.x), and though the monks will scoff, I must admit to generally going with whatever Perl and Apache versions the yum repos were offering -- I'm pretty lame with software management, and yum usually keeps me out of trouble.

Is it possible to add an additional path to @INC without recompiling? Any help much appreciated.

Comment on Help adding paths to @INC
Re: Help adding paths to @INC
by tobyink (Abbot) on Apr 22, 2012 at 21:39 UTC

    There are four ways of fiddling with @INC without recompiling Perl:

    1. Set the PERL5LIB environment variable.
    2. Use the "-I" command-line option.
    3. Modify it in your Perl script itself, e.g. by explicitly pushing paths onto @INC in a BEGIN block, or via lib.
    4. In sitecustomize.pl, if your version of Perl has been compiled with support for it.
    perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'
      Thanks, tobyink. Your suggestion to use lib appeared to be the simplest solution, in the circumstances. Specifically, this:

      use lib '/usr/lib/perl5/site_perl'; # add path to @INC
      More info here

Re: Help adding paths to @INC
by tospo (Hermit) on Apr 23, 2012 at 08:15 UTC
    using
    use lib [...]
    is ok if all your scripts need to use that paths in all your environments, but that doesn't seem to be what you need.
    A better way of controlling include paths that would allow you to manage the different requirements of different servers is to use local::lib. It may seem a bit complicated at first but it really isn't. Just follow the description of "The bootstrapping technique" to set up your local library path in the .bashrc (or csh/tcsh whatever you are using) script in the $HOME dir of each machine.
    What that is doing is to set the PERL5LIB and some other environment variables for you so that a) @INC will include the correct path on each machine and b) modules will automatically be installed into the correct path using cpan(p|m).

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://966497]
Approved by tobyink
Front-paged by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (5)
As of 2015-07-06 05:51 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (70 votes), past polls