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

I'm getting a message that Perl can't locate a module (M) that I just installed. Can't locate M in @INC (@INC contains ... I found the path of M and it's in @INC. What am I missing?

Replies are listed 'Best First'.
Re: Can't locate ... @INC
by BrowserUk (Patriarch) on Jan 10, 2003 at 19:20 UTC

    Suggestion: Show us the code:)

    If you post an extract showing the use line that gives the error and the text of the error relating to the line you stand a better chance of getting some help.

    Otherwise, my best guess is cosmic rays:)


    Examine what is said, not who speaks.

    The 7th Rule of perl club is -- pearl clubs are easily damaged. Use a diamond club instead.

Re: Can't locate ... @INC
by dragonchild (Archbishop) on Jan 10, 2003 at 19:29 UTC
    Just shooting in the dark, but this might be a possibility. The name of the module (Foo::Bar) corresponds to Foo/Bar.pm where Foo is located within one of the directories listed in @INC. Make sure of that.

    ------
    We are the carpenters and bricklayers of the Information Age.

    Don't go borrowing trouble. For programmers, this means Worry only about what you need to implement.

      Yes, that's true. Foo is a subdirectory of one listed in @INC. Bar.pm is inside the Foo subdir. Is this the proper setup?
Re: Can't locate ... @INC
by dd (Initiate) on Jan 10, 2003 at 20:27 UTC
    Here's the use line:
    use MQSeries::Queue;

    Here is the resulting message:
    Can't locate MQSeries/Queue.pm in @INC (@INC contains: /usr/local/lib/perl5/5.8.0/PA-RISC2.0 /usr/local/lib/perl5/5.8.0 /usr/local/lib/perl5/site_perl/5.8.0/PA-RISC2.0 /usr/local/lib/perl5/site_perl/5.8.0 /usr/local/lib/perl5/site_perl . /usr/local/lib/perl5/site_perl/5.8.0/PA-RISC2.0/MQSeries/) at ./mqlogin.pl line 19.

    This is, well ...
    # ls /usr/local/lib/perl5/site_perl/5.8.0/PA-RISC2.0/MQSeries/
    Command
    Constants
    FDC
    PubSub
    Utils.pm
    Command.pm
    Constants.pl
    Message
    Queue.pm
    Config
    ErrorLog
    Message.pm
    QueueManager.pm

    It seems like I'm missing something. I'm fairly new to Perl - not brand new.
    I would really appreciate any help.

      Its a little difficult to be sure as you haven't wrapped the text of the error msg in code tags and so it looks as though some extraneous spaces have been included but...

      It looks like you have the path to the relevant subdirectory prefixed with './' thereby making this path a relative rather than an absolute path.

      ./usr/local/lib/perl5/site_perl/5.8.0/PA-RISC2.0/MQSeries/

      If this is true and not just an effect of the formatting, unless your script is being run from root, the values in @INC will not allow the module Queue.pm to be found, which is exactly the error message you are receiving.

      This is how I have parsed the error message you posted.

      Can't locate MQSeries/Queue.pm in @INC (@INC contains: /usr/local/lib/perl5/5.8.0/PA-RISC2.0 /usr/local/lib/perl5/5.8.0 /usr/local/lib/perl5/site_perl/5.8.0/PA-RISC2.0 /usr/local/lib/perl5/site_perl/5.8.0 /usr/local/lib/perl5/site_perl ./usr/local/lib/perl5/site_perl/5.8.0/PA-RISC2.0/MQSeries/ ) at ./mqlogin.pl line 19.

      My apologies if I have mis-parsed it and this is a red-herring.


      Examine what is said, not who speaks.

      The 7th Rule of perl club is -- pearl clubs are easily damaged. Use a diamond club instead.

      I've installed this module on SuSE 8.1 (so the paths are slightly different) and use MQSeries::Queue is fine. If you post the code before the use I'll try to replicate your problem. Have you installed other modules OK ?
      poj
Re: Can't locate ... @INC
by eoin (Monk) on Jan 10, 2003 at 20:26 UTC
    Use this to determine weather the module is in the search library for perl. You can add the path of your module in if you need with the push command.
    print @inc;
    And......
    push (@inc, "path");

    All the Best, Eoin...
      This is exactly what the lib pragma is for, except it does it slightly better. That said, you don't have to worry whether @INC should be capitalized or not. But it should, anyhow. ;)

      ihb