【发布时间】:2012-09-12 18:14:35
【问题描述】:
我有一个文件夹,其中包含多个通过 main.pl 运行的 .pl 文件。通过在主文件的开头使用require 'file.pl';,我已经成功地完成了这些工作。我也使用了一些模块,没有问题。
我现在正在尝试使用“自制”模块,但是当我将 use Add::Location::CSearch qw(c_search); 添加到正在使用它的文件的顶部(或主文件的顶部)并运行主文件时,它会产生Can't locate file.pl in @INC... 错误,其中file.pl 是主文件中require 列表中的第一个文件。
根据我的理解,添加use 行后,它现在尝试在同一目录中查找所有require。错误消息末尾的(@INC contains: ...) 列出了一些库/模块文件夹。当前目录的末尾还有.。
我希望我已经解释清楚了;这令人困惑!我不知道为什么会发生这种情况以及如何解决它,所以如果有任何想法,我将不胜感激。
编辑:示例代码
main.pl
#!/usr/bin/perl
package testpack;
use lib '/hlib/...';
use Add::DB;
use List::Util qw(sum);
use List::MoreUtils qw(uniq);
use List::MoreUtils qw(firstidx);
use strict;
use warnings;
require 'file1.pl';
require 'file2.pl';
require 'file3.pl';
.
.
.
file1.pl
#!/usr/bin/perl
package testpack;
use Add::Location::CSearch qw(c_search);
这才是问题的关键所在……其余文件都有调用子例程等的工作代码。
【问题讨论】:
-
你的模块名称也是
Add::Location::CSearch。我的意思是包装声明说什么?是package Add::Location::CSearch;吗?还可以使用perl -V检查您的文件夹是否在@INC 中。 -
我查看了该模块的文档,它说要准确地写出我所做的(我没有创建模块)。我不认为我将 .pl 文件放入的文件夹需要在 \@INC 中,因为我只是在编写一个程序 - 它之前运行过而不需要在 \@INC
-
提供包含
use和require的示例代码 -
其他人有什么想法吗? :(
-
“根据我的理解,在添加了 use 行之后,它现在尝试在同一个目录中查找所有需要”这不是真的。
useing 模块对 Perl 查找模块的位置没有影响...除非该模块操作@INC,即 Perl 查找模块的位置列表。在错误消息中,Perl 列出了它要查找的所有目录。file.pl在哪里?它与您的main.pl程序在同一目录中吗?