2015-10-07 11 views
0

У меня есть базовый скрипт Perl, который запускает код из модуля. После перехода на новый компьютер я больше не могу запускать этот скрипт. Дерево каталогов устанавливается следующим образом:Не удается найти пользовательский модуль в @INC

SatanicBot 
    src 
    SatanicBot 
     Bot.pm 
     Utils.pm 
    run.pl <-- The script that uses the module 

Операторы используют в run.pl, как так:

use warnings; 
use strict; 
use diagnostics; 

use Bot::BasicBot; 

use Cwd qw(abs_path); 
use FindBin; 
use lib abs_path("$FindBin::Bin/SatanicBot"); 
# Without this, I get an error that is essentially caused by it not being to find the module. 
use SatanicBot::Bot; 

Когда я бегу run.pl, я получаю следующее сообщение об ошибке:

Can't locate SatanicBot/Bot.pm in @INC (you may need to install the SatanicBot::Bot module) (@INC contains: /Users/elifoster/Desktop/Dev/SatanicBot/src/SatanicBot /Users/elifoster/perl5/perlbrew/perls/perl-5.22.0/lib/site_perl/5.22.0/darwin-2level /Users/elifoster/perl5/perlbrew/perls/perl-5.22.0/lib/site_perl/5.22.0 /Users/elifoster/perl5/perlbrew/perls/perl-5.22.0/lib/5.22.0/darwin-2level /Users/elifoster/perl5/perlbrew/perls/perl-5.22.0/lib/5.22.0 .) at src/run.pl line 12. 

Как вы можете видеть, в нем указано, что @INC содержит каталог, в котором находится модуль SatanicBot :: Bot, но он не может его найти. Я серьезно в шоке.

+0

Что такое '$ FindBin :: Bin/SatanicBot'? Вероятно, это не то же самое, что '$ FindBin :: Bin/src/SatanicBot' – optional

+0

Это должно быть ссылка на нужное место, так как run.pl уже находится в каталоге src. Второй означает, что Bot.pm находится в SatanicBot/src/src/SatanicBot. По крайней мере, так оно и есть. –

+1

Совет: 'lib' является обычным именем для каталога, содержащего модули, а не' src'. ('bin' для скриптов) – ikegami

ответ

3

@INC содержит:

/Users/elifoster/Desktop/Dev/SatanicBot/src/SatanicBot 

но найти SatanicBot::Bot пакет в файле /Users/elifoster/Desktop/Dev/SatanicBot/src/SatanicBot/Bot.pm, вы хотите @INC содержать

/Users/elifoster/Desktop/Dev/SatanicBot/src 
+0

попробуйте сделать« find/-name Bot.pm -print »на исходном компьютере, чтобы получить местоположение, затем посмотрите на копирование этого файла, установщика или группы связанных файлов на ваш путь. –

+0

Это сработало, но я не понимаю, почему. Файл модуля не входит в/src, он находится в/src/SatanicBot, так почему он предпочитает/src? –

+1

Чтобы найти 'Foo :: Bar :: Baz', perl ищет' @ INC' для файла с именем 'Foo/Bar/Baz.pm', а не файл с именем' Baz.pm' – mob

Смежные вопросы