in reply to How to instrust Perl to load the right modules based on architecture?

From perldoc lib:

For each directory in LIST (called $dir here) the lib module also checks to see if a directory called $dir/$archname/auto exists. If so the $dir/$archname directory is assumed to be a corresponding architecture specific directory and is added to @INC in front of $dir. lib.pm also checks if directories called $dir/$version and $dir/$version/$archname exist and adds these directories to @INC.

This means that:

$ perl -V:archname
archname='i486-linux';

$ perl -V:version
version='5.8.8';

$ perl -wle 'use lib "TempLib";print for grep /TempLib/, @INC;'
TempLib

$ mkdir -p TempLib/i486-linux/auto
$ perl -wle 'use lib "TempLib";print for grep /TempLib/, @INC;'
TempLib/i486-linux
TempLib

$ mkdir -p TempLib/5.8.8/auto
$ perl -wle 'use lib "TempLib";print for grep /TempLib/, @INC;'
TempLib/5.8.8
TempLib/i486-linux
TempLib

$ mkdir -p TempLib/5.8.8/i486-linux/auto
$ perl -wle 'use lib "TempLib";print for grep /TempLib/, @INC;'
TempLib/5.8.8/i486-linux
TempLib/5.8.8
TempLib/i486-linux
TempLib

$ find TempLib/
TempLib/
TempLib/i486-linux
TempLib/i486-linux/.auto
TempLib/i486-linux/auto
TempLib/5.8.8
TempLib/5.8.8/auto
TempLib/5.8.8/i486-linux
TempLib/5.8.8/i486-linux/auto

So the proper solution is to not include sepecific directory's in your use lib code but to create the correct directorys and let use lib figure out which architecture to use.

update: Added output of find

Replies are listed 'Best First'.
Re^2: How to instrust Perl to load the right modules based on architecture?
by sunshine_august (Scribe) on Oct 06, 2008 at 08:29 UTC
    Finally, the 'use lib...' statements comes like this:
    use lib "$FindBin::Bin/lib/perl5"; use lib "$FindBin::Bin/lib/perl5/site_perl"; use lib "$FindBin::Bin/lib64/perl5"; use lib "$FindBin::Bin/lib64/perl5/site_perl";
    And, the script works well in both i386 and x86_64 boxes. But what's the difference between "lib/perl5" and "lib/perl5/site_perl", the lib module wouldn't add the 'site_perl' subdirectory automatically. what does "site_perl" mean?

      On my machine, I have lib and site\lib in my Perl directory. The former houses the core modules (those that come with Perl). The latter houses the rest. I suspect there is a parallel.