我当前正在尝试下载给我很多问题的程序。我在Windows上运行cygwin。该程序应正确运行,并且所有安装软件包均安装在管理员终端外壳中,并且在解压缩该程序时不会引发任何错误。但是,安装后程序无法在文件系统中找到名为FASTA的@INC模块
rpbas@DESKTOP-4LMFDCK /cygdrive/c/Users/rpbas/Documents/Work/OliveraLab/signal-4.1
$ ./signal -t euk -f short test/euk10.fsa > euk10.fsa.short_out Can't locate FASTA.pm in @INC (you may need to install the FASTA module)
(@INC contains:
/cygdrive/c/Users/rpbas/Documents/Work/Olivera\ Lab/signal-4.1/lib
\cygdrive\c\Users\rpbas\Documents\Work\Olivera/ Lab\signal-4.1
/usr/local/lib/perl5/site_perl/5.26/x86_64-cygwin-threads
/usr/local/share/perl5/site_perl/5.26 /usr/lib/perl5/vendor_perl/5.26/x86_64-cygwin-threads
/usr/share/perl5/vendor_perl/5.26
/usr/lib/perl5/5.26/x86_64-cygwin-threads /usr/share/perl5/5.26)
at ./signal line 60.
BEGIN failed-- compilation aborted at ./signal line 60.
但是,。/ lib / FASTA.pm文件明确存在并被定向。
rpbas@DESKTOP-4LMFDCK /cygdrive/c/Users/rpbas/Documents/Work/Olivera\ Lab/signal-4.1/lib
$ ls
FASTA.pm
代码中包括一行(在开头)
BEGIN {
$ENV{SIGNAL} = '/cygdrive/c/Users/rpbas/Documents/Work/Olivera\ Lab/signal-4.1';
}
第60行
use lib "$ENV{SIGNAL}/lib";
use FASTA;
我已经在这个问题上工作了几天,这对我程序的其他部分来说是一个很大的瓶颈。任何帮助将不胜感激!
答案 0 :(得分:6)
您会被Perl的报价插值规则绊倒。在单引号内,反斜杠字符仅在其后跟单引号或另一个反斜杠时才充当“转义”字符。在所有其他情况下,它都被解释为文字反斜杠。
如果您打印出$ENV{SIGNAL}
,将会看到类似的内容
/cygdrive/c/Users/rpbas/Documents/Work/Olivera\ Lab/signal-4.1
包括反斜杠字符。不要逃脱空间,你应该没事。
BEGIN {
$ENV{SIGNAL} =
'/cygdrive/c/Users/rpbas/Documents/Work/Olivera Lab/signal-4.1';
}
答案 1 :(得分:0)
@INC
包含
/cygdrive/c/Users/rpbas/Documents/Work/Olivera\ Lab/signal-4.1/lib
何时应包含
/cygdrive/c/Users/rpbas/Documents/Work/Olivera Lab/signal-4.1/lib
您可以替换
BEGIN {
$ENV{SIGNAL} = '/cygdrive/c/Users/rpbas/Documents/Work/Olivera\ Lab/signal-4.1';
}
use lib "$ENV{SIGNAL}/lib";
使用
BEGIN {
$ENV{SIGNAL} = '/cygdrive/c/Users/rpbas/Documents/Work/Olivera Lab/signal-4.1';
}
use lib "$ENV{SIGNAL}/lib";
但是更好的解决方案是将其替换为
use FindBin qw( $RealBin );
use lib ( $ENV{SIGNAL} || $RealBin ) . "/lib";