即使已安装也无法找到 Switch.pm

即使已安装也无法找到 Switch.pm

一位同事最近尝试通过 conda 更新一些代码,但在此过程中破坏了我们的 bioperl 安装。

当我尝试运行我们的一个常规内部脚本时,出现以下错误:

(base) ecoli@bact:~/Desktop/IMNGS_workflow$ perl ofline-analysis-Cornelia-Piggyy-Controls.pl 
Can't locate Switch.pm in @INC (you may need to install the Switch module) (@INC contains: /home/ecoli/anaconda/lib/site_perl/5.26.2/x86_64-linux-thread-multi /home/ecoli/anaconda/lib/site_perl/5.26.2 /home/ecoli/anaconda/lib/5.26.2/x86_64-linux-thread-multi /home/ecoli/anaconda/lib/5.26.2 .) at ofline-analysis-Cornelia-Piggyy-Controls.pl line 5.
BEGIN failed--compilation aborted at ofline-analysis-Cornelia-Piggyy-Controls.pl line 5.

现在问题似乎很简单,需要安装 Switch.pm。显然,根据apt-get;

(base) ecoli@bact:~/Desktop/IMNGS_workflow$ sudo apt-get install libswitch-perl 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libswitch-perl is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

即使使用时cpan我也得到相同的状态;

cpan[1]> install Switch
Reading '/home/ecoli/.cpan/Metadata'
  Database was generated on Fri, 21 Jun 2019 00:41:02 GMT
Switch is up to date (2.17).

我认为当前安装的 Switch.pm 已损坏,有没有办法全新安装 Switch.pm?

感谢您的任何帮助,您可以提供!

答案1

Switch模块已弃用。请参阅:perldoc

转变

Switch 有缺陷,应避免使用。您可能会发现 Perl 的新 given/when 功能是一个合适的替代品。有关更多信息,请参阅 perlsyn 中的 Switch 语句。

改用:

use feature qw(switch);

given($var){
  when(1) { print 'Number one'; }
  when(2) { print 'Number two'; }
  default { print 'Everything else' }
}

答案2

由于您的 perl 版本似乎较旧,并且您需要 Switch,因此您可以使用 强制重新安装cpan -f Switch。但我认为您还有另一个问题,Switch.pm 不在您的 @INC 中。假设您locate -i switch.pm在 dir 中找到它/home/libs,请将此行添加到脚本顶部:

use lib '/home/libs';

相关内容