gpt4 book ai didi

windows - Windows 中 Activestate Perl 中的 @INC 不正确

转载 作者:可可西里 更新时间:2023-11-01 11:21:02 24 4
gpt4 key购买 nike

我在 Komodo Edit 中使用 ActiveState perl。我收到以下错误。

Can't locate MyGengo.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at D:\oDesk\MyGengo Integration\sample line 6.

为什么解释器在 C:/Perl/lib 而不是 C:\Perl\lib 中查找?它不知道它是 Windows 而不是 Linux 吗?

编辑

我通过复制 C:\Perl\lib 目录中的 .pm 文件解决了这个问题。我想,这个问题是因为这个模块是手动下载的。 PPM 安装会将 .pm 文件复制到 lib 目录。

最佳答案

对于Windows来说,C:/Perl/libC:\Perl\lib是同一个目录。

perlport documentation注释(强调)

DOS and Derivatives

Perl has long been ported to Intel-style microcomputers running under systems like PC-DOS, MS-DOS, OS/2, and most Windows platforms you can bring yourself to mention (except for Windows CE, if you count that). Users familiar with COMMAND.COM or CMD.EXE style shells should be aware that each of these file specifications may have subtle differences:

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';

System calls accept either / or \ as the path separator. However, many command-line utilities of DOS vintage treat / as the option prefix, so may get confused by filenames containing /. Aside from calling any external programs, / will work just fine, and probably better, as it is more consistent with popular usage, and avoids the problem of remembering what to backwhack and what not to.

您的评论表明您正在使用 mygengo-perl-new但将其安装在 C:\Perl\lib\MyGengo\mygengo-api\nheinric-mygengo-perl-new-ce194df\mygengo 中。这是安装模块的不寻常位置。按照模块的编写方式,它希望 mygengo.pm 位于 @INC 中命名的目录之一。然后客户端代码将其拉入

use mygengo;

我的建议是从 C:\Perl\lib\MyGengo\mygengo-api\nheinric-mygengo-perl-new-ce194df\mygengo 移动 mygengo.pmC:\Perl\site\lib

作为替代方案,如果您将 mygengo 作为您正在开发的另一个包的一部分使用,您可以将 mygengo 放入您的源代码树中,也许作为 git submodule .不要忘记添加 use lib 'mygengo'; 如果你这样做的话。

有关详细信息,请阅读 @INC search process在关于 requireextra semantics for modules via use 的 perlfunc 文档中.

关于斜杠与反斜杠的一般建议

即使您的代码只能在 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\';

现在你有一个语法错误。

Can't find string terminator "'" anywhere before EOF at dirstuff line n.

You may want to interpolate another value into $dir.

$dir = 'C:\Perl\lib\$module';  # nope

哦,是的,您需要双引号进行插值。

$dir = "C:\Perl\lib\$module";  # still not right

经过摸索和调试

$dir = "C:\\Perl\\lib\\$module";  # finally

因此,反斜杠更容易出错,并且对维护有刺激性。正斜杠是单引号和双引号字符串中的普通字符,因此它几乎总是表示您所期望的。

作为perlport请注意,Windows 命令外壳将正斜杠视为引入选项,将反斜杠视为路径分隔符。如果您无法避免 shell,那么您可能不得不处理反斜杠。

关于windows - Windows 中 Activestate Perl 中的 @INC 不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10765282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com