Perl Не удается найти .pm в @INC - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть один файл .pm и .pl в одном месте. Когда я выполняю файл, он работает нормально. Когда я сохраняю .pm и .pl файл в другом месте, я получаю эту ошибку. Как справиться с этим, пожалуйста, поделитесь своим мнением. Благодарим Вас за помощь!

[sjothili@localhost script] $ perl fapatch-prereq.pl Не удается найти файл Fapatching.pm в @ IN C (@ IN C содержит: / usr / local / lib64 / perl5 / usr / local / share / perl5 / usr / lib64 / perl5 / vendor_ perl / usr / share / perl5 / vendor_ perl / usr / lib64 / perl5 / usr / share / perl5.) в fapatch -prereq.pl строка 3.

[sjothili@localhost Apr3]$ pwd
/scratch/sjothili/perl/Apr3

enter code here cat Fapatching.pm

#!/usr/bin/perl

package Fapatching;

sub doSystemCommand
{
     $systemCommand = $_[0];

    print LOG "$0: Executing [$systemCommand] \n";
     $returnCode = system( $systemCommand );

    if ( $returnCode != 0 )
    {
        die "Failed executing [$systemCommand]\n";
                exit 0;
    }
}



1;
 cat fapatch-prereq.pl
#!/usr/bin/perl
require Fapatching;
Fapatching::doSystemCommand("pwd");

[sjothili@localhost Apr3] $ perl fapatch-prereq.pl / scratch / sjothili / perl / Apr3

[sjothili@localhost script]$ cd ..
[sjothili@localhost Apr3]$ pwd
/scratch/sjothili/perl/Apr3
[sjothili@localhost Apr3]$ cd script/
[sjothili@localhost script]$ ls
fapatch-prereq.pl
`enter code here`[sjothili@localhost script]$ perl fapatch-prereq.pl
Can't locate Fapatching.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at fapatch-prereq.pl line 3.

Ответы [ 2 ]

3 голосов
/ 03 апреля 2020

Вы не указали, где находится Fapatching.pm, поэтому предположим, что у вас есть следующая (довольно распространенная) структура каталогов:

$project_home/bin/fapatch-prereq.pl
$project_home/lib/Fapatching.pm

Вы можете решить эту проблему, добавив в скрипт следующее:

use FindBin qw( $RealBin );
use lib "$RealBin/../lib";

Отрегулируйте в соответствии с вашими потребностями.

2 голосов
/ 03 апреля 2020

Добавление оператора use lib к сценарию добавит каталог в @INC для этого указанного c сценария. Независимо от того, кто и в какой среде его запускает. Ссылка отсюда .

use lib '/folder1/folder2/package';
use Fapatching;

Спасибо автору: Gabor Szabo . Я не рекомендую, однако я упоминал здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...