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

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