无法在@INC中找到本地文件,而不是CPANable

时间:2018-07-03 18:31:35

标签: perl cygwin install

我当前正在尝试下载给我很多问题的程序。我在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;

我已经在这个问题上工作了几天,这对我程序的其他部分来说是一个很大的瓶颈。任何帮助将不胜感激!

2 个答案:

答案 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";