costas has asked for the wisdom of the Perl Monks concerning the following question:

I have perl setup on a linux box and would like somebody to shed some light on a few issues.

Upon looking in my INC array and through my lib directories, I see that there are many lib directories. I was wondering if somebody knew and could explain breifly the purpose of each one.

/usr/lib/perl5/5.6.1/i686-linux
/usr/lib/perl5/5.6.1
/usr/lib/perl5/site_perl/5.6.1/i686-linux
/usr/lib/perl5/site_perl/5.6.1
/usr/lib/perl5/site_perl

The reason I am also wondering is because CPAN seems to install some modules into /usr/lib/perl5/site_perl/5.6.1/i686-linux whilst others go elsewhere.

I ahve also experienced in the past cases where my browser would use a module in one directory whilst the same script executed on the command line would use the same module in a different directory.

Is there a certain set of rules that i should follow

Costas

Replies are listed 'Best First'.
Re: module librarys query
by davorg (Chancellor) on Sep 26, 2001 at 14:05 UTC
    • /usr/lib/perl5/5.6.1
      This is where the pure Perl modules that come as part of the standard Perl distribution are installed.
    • /usr/lib/perl5/5.6.1/i686-linux
      This is where you'll find Perl modules that are part of the standard distribution and have an XS component (i.e. they need to talk to an external library).
    • /usr/lib/perl5/site_perl
      You shouldn't find any modules in here.
    • /usr/lib/perl5/site_perl/5.6.1
      This is like /usr/lib/perl5/5.6.1, but it's where modules that aren't part of the standard distribution go.
    • /usr/lib/perl5/site_perl/5.6.1/i686-linux
      This is like /usr/lib/perl5/5.6.1/i686-linux but for modules that aren't part of the standard distribution.
    --
    <http://www.dave.org.uk>

    "The first rule of Perl club is you don't talk about Perl club."

      thanks for the explanation!

      Do you have any explanation as to why my browser would succesfully use one version of a module whilst the same script run on my command prompt would not be able to find that module?

      Costas

        Sounds like the @INC array is different in the two different scenarios. There are a number of ways that this can happen.

        • A script can use use lib to change @INC explicitly.
        • The value of PERL5LIB could be set either in a .profile (remember that the web server probably runs as a different user) or perhaps the web server is configured to change it.
        • The current directory is always in @INC. That could be different.

        Also, as the web server runs as a different user, you might not have the correct permissions to read the module file (are you seeing an error message?)

        Perhaps printing out the value of @INC at the start of the program would point out differences. It's also worth looking at the contents of %INC which contains the list of loaded modules together with the path that they are loaded from.

        Update: The esteemed chromatic reminds me that if you're running you CGI script in taint mode (as we all should do all the time) then the current directory won't be in @INC. This may effect your investigation.

        --
        <http://www.dave.org.uk>

        "The first rule of Perl club is you don't talk about Perl club."

        Maybe your server has two Perl interpreters installed (don't ask me why, but it could happen). So when you type from shell, let's say perl ./myscript.pl, you're calling a different perl than /usr/bin/perl: so, with different libraries directories and so on. Try which perl from shell. I hope it could be useful.