在directory.pl文件的第2行,发现无法在@INC中找到File/Glob.pm(@INC包含:D:/tools/lib)。

9

运行我的perl代码时,出现了以下错误:

Can't locate File/Glob.pm in @INC (@INC contains: D:/tools/lib .) at directory.pl line 2.

line 2: @files=<*>;

当我运行该命令时,会得到以下结果:

Y:\perl\perl>perldoc -l File::Glob

D:\tools\lib\perl\510\File\Glob.pm

因此,我认为File::Glob模块已经安装好了?


4
安装已完成。但是你的 @INC 没有指向它。 - Linus Kleen
谢谢,不知怎么的我以为它会知道如何搜索 D:/tools/lib 子路径。 - freshWoWer
3
为什么 perldoc 能找到它,即使它不在 @INC 中? - justintime
1个回答

16

@INC 应该在 Perl 安装时正确设置。如果它与你的配置不匹配,就会出现问题。

然而,如果当前的 @INC 值不符合你的需求,你有以下几个选项:

  1. D:\tools\lib\perl\510\ 添加到环境变量 PERL5LIB 中(如果这样不起作用,则添加到 PERLLIB 中)
  2. 在启动时指定 @INCperl -I D:\tools\lib\perl\510\
  3. 不使用 use libname,而是使用 use path/to/libname
  4. use 语句之前使用 BEGIN 块:

    BEGIN {
      push @INC,"D:\tools\lib\perl\510\";
    }
    

请参阅http://perldoc.perl.org/perlvar.html获取简短介绍。


使用了第一个建议解决了问题;感谢提供了这么多的备选方案!“做一件事情有多种方法”- 我猜是这样 :) - freshWoWer
我猜在Windows下的Perl代码中最好不要使用斜杠,因为这些 "\t", "\510" 等可能会被扩展成一些奇怪的字符。我想使用反斜杠会更合适。 - P Shved

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接