in reply to Re: How to manipulate @INC in a script?
in thread How to manipulate @INC in a script?

punkish,
@INC is not just any array. It exists before runtime. Try modifying it at run time and have it work for a use statement that works at compile time - it no workie.
BEGIN { unshift @INC , 'yet/another/path' }
That will likely work in most cases, but you are better off using the lib pragma as perldoc perlvar suggests or the PERL5ENV variable.

Cheers - L~R

Replies are listed 'Best First'.
Re^3: How to manipulate @INC in a script?
by punkish (Priest) on Sep 21, 2004 at 14:54 UTC
    Thanks L~R (and, apologies to the OP for a misleading reply).

    I am just not too clear on compile-time vs. runtime (hence, an additional poor understanding of use vs. require). I will go back to the docs and readup. Hopefully, I will get it this time.

      It works like the file is run twice.

      The first time is the compile phase, where uses are executed as they are encountered, BEGINs are executed as they are encountered, and subs are added to the symbol table as they are encountered.

      The second time, code outside of BEGINs and subs is executed as it is encountered.

      use A; test1(); sub test1 { ... } print 'i'; use B; print 'j'; sub test2 { ... } BEGIN { print 'begin'; }

      is the same as (or very close to):

      require A; A->import() if A->UNIVERSAL::can('import'); *test1 = sub { ... }; require B; B->import() if B->UNIVERSAL::can('import'); *test2 = sub { ... }; print 'begin'; test1(); print 'i'; print 'j';