Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re^3: Know a perl's -I flag from perl?

by Anonymous Monk
on Dec 16, 2012 at 00:21 UTC ( #1009024=note: print w/ replies, xml ) Need Help??


in reply to Re^2: Know a perl's -I flag from perl?
in thread Read a perl's -I flag from perl?

The purpose of -I is to populate @INC

You don't need the original -I flags, you have @INC


Comment on Re^3: Know a perl's -I flag from perl?
Re^4: Know a perl's -I flag from perl?
by tobyink (Abbot) on Dec 19, 2012 at 14:58 UTC

    But @INC can be altered at run time. Consider that your default @INC is just:

    /eg/lib

    You run perl -I/eg/custom myscript.pl.

    Now @INC is:</c>

    /eg/custom /eg/lib

    Imagine that myscript.pl contains use mylibs which loads /eg/custom/mylibs.pm. This module itself tinkers with @INC at run-time, adding another path at the front.

    /corporate/lib /eg/custom /eg/lib

    Now you want to launch another Perl process via system(), so what do you do? Something like:

    my @incs = map { "-I$_" } @INC; system($^X, @incs, 'other-script.pl');

    So when the other script starts, it will start with this in @INC:

    /corporate/lib /eg/custom /eg/lib

    Now let's imagine that other-script.pl also does use mylibs. Rather than that loading /eg/custom/mylibs.pm, it might now load /corporate/lib/mylibs.pm, which is perhaps an older version of the mylibs package which behaves differently to how we wanted.

    Granted this is a rare situation, but there do exist packages along these lines; packages that exist entirely to manipulate @INC, such as local::lib. Combining these libraries with system($^X) can get you into a merry little pickle.

    perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

      ...

      So before your script diddles @INC, preserve it?

      use constant FINC => [ @INC ]; use lib ...;

      And if you're worried about that, then worry about PERLLIB/PERL5LIB/PERL5OPTS...

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1009024]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (5)
As of 2015-07-05 10:43 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 (61 votes), past polls