Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl Can';t在@INC中找到Text/Soundex.pm_Perl - Fatal编程技术网

Perl Can';t在@INC中找到Text/Soundex.pm

Perl Can';t在@INC中找到Text/Soundex.pm,perl,Perl,我安装了repeatsmasker,它看起来很有效,因为它显示“恭喜!RepeatMasker现在可以使用了。” 但当我运行它时,它会报告“找不到Text/Soundex.pm…”。因此,我通过“sudo cpan Text::Soundex”安装了该模块,最后它告诉我“Text::Soundex是最新的(3.05)。”该模块似乎已经安装,但RepeatMasker仍然存在相同的问题,我将在下面的代码中向您展示: fragua@picci:~/RM/RepeatMasker$ sudo cpan

我安装了repeatsmasker,它看起来很有效,因为它显示“恭喜!RepeatMasker现在可以使用了。” 但当我运行它时,它会报告“找不到Text/Soundex.pm…”。因此,我通过“sudo cpan Text::Soundex”安装了该模块,最后它告诉我“Text::Soundex是最新的(3.05)。”该模块似乎已经安装,但RepeatMasker仍然存在相同的问题,我将在下面的代码中向您展示:

fragua@picci:~/RM/RepeatMasker$ sudo cpan Text::Soundex
Loading internal null logger. Install Log::Log4perl for logging messages
Reading '/home/fragua/.cpan/Metadata'
 Database was generated on Fri, 19 Apr 2019 22:17:03 GMT
Text::Soundex is up to date (3.05).

fragua@picci:~/RM/RepeatMasker$ ./RepeatMasker -s -lib /home/fragua/RepeatScout-1.0.5/ObiINK5k_repeats_filtered1.fasta /home/fragua/Documenti/Workdirectory/ObiINC5k.fa
Can't locate Text/Soundex.pm in @INC (you may need to install the Text::Soundex module) (@INC contains: /home/fragua/RM/RepeatMasker /home/fragua/perl5/lib/perl5 /home/fragua/anaconda/lib/site_perl/5.26.2/x86_64-linux-thread-multi /home/fragua/anaconda/lib/site_perl/5.26.2 /home/fragua/anaconda/lib/5.26.2/x86_64-linux-thread-multi /home/fragua/anaconda/lib/5.26.2 .) at /home/fragua/RM/RepeatMasker/Taxonomy.pm line 80.
BEGIN failed--compilation aborted at /home/fragua/RM/RepeatMasker/Taxonomy.pm line 80.
Compilation failed in require at ./RepeatMasker line 310.
BEGIN failed--compilation aborted at ./RepeatMasker line 310.

我在另一台计算机上安装了RepeatMasker,没有任何问题,但我不知道为什么现在遇到了这个问题

您安装了两个Perl版本:

  • /usr/bin/perl
  • /home/fragua/anaconda/bin/perl
/home/fragua/anaconda/bin/perl
是您的首选路径。这意味着具有以下shebang(
#!
)行的程序将使用
/home/fragua/anaconda/bin/perl

#!/usr/bin/env perl
RepeatMasker
似乎就是这样一个程序

所有这些都很好

问题

/home/fragua/anaconda/bin
包含由
/home/fragua/anaconda/bin/perl安装的脚本。作为这些脚本安装过程的一部分,应该重写这些脚本的shebang行,以指定
/home/fragua/anaconda/bin/perl

/home/fragua/anaconda/bin/perl /home/fragua/anaconda/bin/cpan Text::Soundex
然而,
/home/fragua/anaconda/bin/cpan
的shebang行引用了
/usr/bin/perl
。这意味着使用
/home/fragua/anaconda/bin/cpan
将为
/usr/bin/perl
安装模块,而不是
/home/fragua/anaconda/bin/perl

/home/fragua/anaconda/bin/perl /home/fragua/anaconda/bin/cpan Text::Soundex
解决方法

您可以避免依赖shebang行,并显式指定正确的
perl

/home/fragua/anaconda/bin/perl /home/fragua/anaconda/bin/cpan Text::Soundex
或者,给定您的
$PATH

perl /home/fragua/anaconda/bin/cpan Text::Soundex
修复程序

要以持续的方式解决此问题,需要将脚本的shebang行更改为它们应该的样子。在
/home/fragua/anaconda/bin
中的每个文件中(尤其是对于
cpan
),替换

您可以使用以下方法(对更改的文件进行备份)执行此操作:


看起来您使用的是安装在主目录中的Perl版本,我打赌
sudo cpan
正在使用OS Perl安装。因此,模块是为该副本安装的,但不是为您的程序正在使用的副本安装的。好的。。。你能给我一个解决方法吗?如果确实是这个问题,这个模块需要通过你本地的perl副本安装。对不起,我正在学习,所以我不知道怎么做。你能帮我吗?下一步要做什么?取决于您如何安装本地副本。。。perlbrew还是其他什么?使用
/usr/bin/env perl
是最佳实践。它使脚本更具可移植性,并允许您在不更改代码的情况下更好地控制运行时。最好是通过指向
perl
二进制文件的直接路径来控制这一点,或者在
$path
环境变量中向上插入所需的perl路径。在这里更改shebang似乎不是最好的方法。@manchicken,您所谓的最佳实践——事实并非如此——在具有多个perl的系统上失败,例如这一个。最终会出现缺少模块的脚本和使用错误版本模块的脚本。这是ExtUtils::MakeMaker和Module::Build在安装脚本时自动完成的。(它不是特定于
cpan
,也与
perlbrew
无关)脚本安装不正确,我提出的修复方案只是完成了标准安装过程。
perl -0777ne'print "$ARGV\n" if m{^#!\s*/usr/bin/perl\b}' /home/fragua/anaconda/bin/* \
   | xargs perl -i~ -0777pe's{^#!\s*/usr/bin/perl\b}{#!/home/fragua/anaconda/bin/perl}'