一位同事最近尝试通过 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';