Estou tentando executar um script perl em uma máquina usando CentOS Linux 7. Tenho perl 5.36.1. O script usa um programa chamado polymake que possui sua própria cópia do perl. Não posso modificar essa cópia do perl. Posso instalar módulos para minha cópia do perl usando cpan.
Usando cpan, instalei o módulo Algorithm::Combinatorics
$ cpanm Algorithm::Combinatorics
Algorithm::Combinatorics is up to date. (0.27)
Em "~/perl5/lib/perl5/Algorithm", existe um arquivo chamado "Combinatorics.pm".
Quando executo o seguinte código
#!/usr/bin/perl
use lib '~/perl5/lib/perl5/Algorithm';
use lib '~/perl5/lib/perl5/';
use Combinatorics;
Recebo a mensagem de erro
Can't locate Combinatorics.pm in @INC (you may need to install the Combinatorics module)
(@INC contains: ~/perl5/lib/perl5/ ~/perl5/lib/perl5/Algorithm Polymake::Core::Application=ARRAY(0x3b5c670) /share/software/user/open/polymake/4.10/share/polymake/perllib [...])
Quando faço a mesma coisa com o módulo List::Compare, não tenho problema.
ATUALIZAR:
Aqui está um exemplo mais minimalista: criei um arquivo chamadoperlscripttest.pl.
#!/usr/bin/perl
use strict;
use warnings;
use Algorithm::Combinatorics "subsets";
print(subsets[1,2,3,4]);
Então perl perlscripttest.pl
dá o erro:
Can't locate loadable object for module Algorithm::Combinatorics in @INC
(@INC contains: /share/software/user/open/polymake/4.10/share/perl5/lib/perl5/x86_64-linux-thread-multi
/share/software/user/open/polymake/4.10/share/perl5/lib/perl5 /home/users/mwlarson/perl5/lib/perl5/x86_64-linux-thread-multi /home/users/mwlarson/perl5/lib/perl5
/share/software/user/open/perl/5.36.1/lib/site_perl/5.36.1/x86_64-linux-thread-multi
/share/software/user/open/perl/5.36.1/lib/site_perl/5.36.1
/share/software/user/open/perl/5.36.1/lib/5.36.1/x86_64-linux-thread-multi /share/software/user/open/perl/5.36.1/lib/5.36.1) at perlscripttest.pl line 6.
Fazer a mesma coisa com List::Compare não resulta em nenhum erro.
Não há diretório nomeado
~
no CWD. A directiva deveria serNo entanto, não faz muito sentido especificar onde procurar no script, pois este é um diretório utilizável por qualquer script (ou seja, caminho absoluto). Em vez disso, eu definiria env var
PERL5LIB
.O segundo erro é devido a uma versão incompleta ou incompatível do módulo instalado no
/share/software/user/open/polymake/4.10/share/perl5/lib/perl5
. Isso não deveria estar em PERL5LIB ou deveria estar depois de$HOME/perl5/lib/perl5
.