http://qs321.pair.com?node_id=227561


in reply to Re^2: modify @INC
in thread modify @INC

Would it be an option to do something like:

$a="/my/module/path"; eval "use lib '$a'"; eval { use MyModule; }
I recall once using eval & use together to dynamically load specific modules when needed... This was before I knew about AUTOLOAD and SelfLoader and all...

Replies are listed 'Best First'.
Re^4: modify @INC
by Aristotle (Chancellor) on Jan 17, 2003 at 01:42 UTC
    No, that won't work. The use inside the eval BLOCK is compiled at compile time, but the string in eval EXPR is not. eval "use Foo"; is nothing but an obfuscated way to say require Foo; Foo->import;

    Neither case is a job for eval here. If you want variable paths at compile time, you do the following:

    my $libpath; BEGIN { $libpath = "/foo/bar"; } use lib $libpath;
    If you want to load modules with dynamic @INC at runtime, you make use of the aforemention construct:
    { local @INC = ("/foo/bar", @INC); require Foo; Foo->import; }
    eval will not help. And $a is a really awful name for a variable (plus $a and $b are reserved for sort). :)

    Makeshifts last the longest.