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

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.

  • Comment on Re^3: How to manipulate @INC in a script?

Replies are listed 'Best First'.
Re^4: How to manipulate @INC in a script?
by ikegami (Patriarch) on Sep 21, 2004 at 15:00 UTC

    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';