在Windows上的Linux emulator中使用正斜杠与反斜杠之间的差异

在Windows上的Linux emulator中使用正斜杠与反斜杠之间的差异,linux,windows,perl,Linux,Windows,Perl,所以我遇到了一个我不知道如何解决的问题。我正在Windows计算机上使用Cygwin Linux仿真器进行一些用perl编写的分子动力学模拟。我遇到了无法读取文件的问题。出现问题的代码如下所示: if (defined $topfile && -r $topfile) { $self->_sendCommand("open unit 10 read form name \"$topfile\""); $self->_sendCommand("read RTF

所以我遇到了一个我不知道如何解决的问题。我正在Windows计算机上使用Cygwin Linux仿真器进行一些用perl编写的分子动力学模拟。我遇到了无法读取文件的问题。出现问题的代码如下所示:

if (defined $topfile && -r $topfile) {
  $self->_sendCommand("open unit 10 read form name \"$topfile\"");
  $self->_sendCommand("read RTF card unit 10");
  $self->_sendCommand("close unit 10");
  $havertf=1;
}
我使用以下方法对其进行了测试:

print "$topfile\n";
if (-r $topfile) {
  print "YES\n";
}
if (defined $topfile) {
  print "YES2\n";
}
所以这两个YES语句都会打印出来,我知道文件是定义的,可读的

我测试了第一部分每一行的打印语句,问题出现在“打开单元10读取表单名称”之后 下面是确切的错误:

 CHARMM>    open unit 10 read form name /C:/CHARMM_Nichols/CHARMM/test/data/top_all22_prot.inp/
 VOPEN> Attempting to open::/c:/charmm_nichols/charmm/test/data/top_all22_prot.inp/::
 OPNLGU> Unit  10 cannot be opened as /C:/CHARMM_NICHOLS/CHARMM/TEST/DATA/TOP_ALL22_PROT.INP/  

我认为问题可以归结为反斜杠和前斜杠,因为我的所有目录都在windows系统中(反斜杠),但程序的执行需要Linux系统(前斜杠)。知道如何修复和/或测试此问题吗?我可以写一个脚本来将前斜杠改为反斜杠吗?它不允许我在模拟器中将环境变量($topfile)更改为反斜杠。

为什么要添加前导和尾随正斜杠?移除它们可以解决问题吗?我尝试过,但无法解决问题:(我应该很清楚,这是别人的脚本,我只是想在我的系统上工作。我不知道为什么他们添加了斜杠,虽然一些POSIX/Windows路径转换是由cygwin层完成的。在您的情况下,看起来文件是在
/c://..
下搜索的,但cygwin通常将
c:///code>映射到
 /
/cygdrive/c
因此,可能是其他东西破坏了文件名。您可以尝试创建一个符号链接,如
ln-s/cygdrive/c'/c:'
或将数据复制/链接到“主页”~如果可能,请使用相对路径名。你是我的英雄!将env变量更改为/cygdrive/c/似乎已经解决了问题。谢谢!!!为什么要添加前导和尾随正斜杠?删除它们可以解决问题吗?我尝试过,但没有解决问题:(我应该很清楚,这是别人的脚本,我只是想在我的系统上工作。我不知道为什么他们添加了斜杠,虽然一些POSIX/Windows路径转换是由cygwin层完成的。在您的情况下,看起来文件是在
/c://..
下搜索的,但cygwin通常将
c:///code>映射到
 /
/cygdrive/c
因此,可能是其他东西破坏了文件名。您可以尝试创建一个符号链接,如
ln-s/cygdrive/c'/c:'
或将数据复制/链接到“主页”~如果可能的话,使用相对路径名。你是我的英雄!将env变量更改为/cygdrive/c/似乎已经解决了这个问题。谢谢!!!