就Windows而言,C:/Perl/lib
和C:\Perl\lib
都是同一个目录。
perlport文档说明(已添加重点)
DOS 及其衍生产品
Perl 长期以来一直被移植到运行在诸如 PC-DOS、MS-DOS、OS/2 和大多数 Windows 平台(如果你算上 Windows CE 除外)等系统下运行的 Intel 风格的微型计算机上。熟悉COMMAND.COM
或CMD.EXE
样式化 shell 的用户应该知道,这些文件规范中的每一个都可能有细微的差异:
my $filespec0 = "c:/foo/bar/file.txt";
my $filespec1 = "c:\\foo\\bar\\file.txt";
my $filespec2 = 'c:\foo\bar\file.txt';
my $filespec3 = 'c:\\foo\\bar\\file.txt';
系统调用接受/
或\
作为路径分隔符。但是,DOS 老式的许多命令行实用程序都将/
其视为选项前缀,因此可能会被包含 / 的文件名混淆。除了调用任何外部程序之外,/
它还可以正常工作,而且可能会更好,因为它更符合流行的用法,并且避免了记住什么回击和什么不回击的问题。
您的评论显示您正在使用mygengo-perl-new但已将其安装在C:\Perl\lib\MyGengo\mygengo-api\nheinric-mygengo-perl-new-ce194df\mygengo
. 这是安装模块的不寻常位置。模块的编写方式,它期望mygengo.pm
位于名为 in 的目录之一中@INC
。客户端代码然后将其拉入
use mygengo;
我的建议是从mygengo.pm
移动C:\Perl\lib\MyGengo\mygengo-api\nheinric-mygengo-perl-new-ce194df\mygengo
到C:\Perl\site\lib
.
作为替代方案,如果您将 mygengo 用作您正在开发的另一个包的一部分,您可以mygengo
放入源代码树中,也许作为git submodule。use lib 'mygengo';
如果您这样做,请不要忘记添加。
有关完整的详细信息,请阅读perlfunc 文档中的@INC
搜索过程require
以及通过use
.
关于斜杠与反斜杠的一般建议
即使您的代码仅在 Windows 上运行,也更喜欢在硬编码路径中使用正斜杠作为分隔符。反斜杠是 Perl 语言中的转义字符,因此您必须更仔细地考虑它。在双引号字符串中,您必须记住转义转义字符以获得其普通含义,例如,
# my $dir = "C:\Perl\lib"; # oops, $path would be 'C:Perlib'
$dir = "C:\\Perl\\lib";
在单引号字符串中情况可能会好一些。设置$dir
如
$dir = 'C:\Perl\lib';
做你所期望的,但说你想要$dir
一个斜杠。
$dir = 'C:\Perl\lib\';
现在你有一个语法错误。
在 dirstuff 行 n 的 EOF 之前的任何地方都找不到字符串终止符“'”。
您可能希望将另一个值插入到$dir
.
$dir = 'C:\Perl\lib\$module'; # nope
哦,是的,您需要双引号进行插值。
$dir = "C:\Perl\lib\$module"; # still not right
摸头调试后
$dir = "C:\\Perl\\lib\\$module"; # finally
因此,反斜杠更容易出错并且对维护很麻烦。正斜杠是单引号和双引号字符串中的普通字符,因此它几乎总是意味着您所期望的。
正如perlport 所指出的,Windows 命令外壳将正斜杠视为引入选项,将反斜杠视为路径分隔符。如果您无法避免使用 shell,那么您可能会被迫处理反斜杠。