我有perl模块文件和测试脚本pl,用于运行某些功能,以及browsing through the use lib和this previous question here...之后 我仍然不知道该怎么做。
基本上我有一个包含模块文件的生产目录,我有一个包含相同模块和测试脚本文件的测试目录文件。每次我尝试运行脚本文件时,它都会自动调用目录中的模块。通过打印@INC
,似乎生产目录托管在那里。因此我尝试使用
no lib qw(prod_dir);
并且在打印出@INC
时显示该目录不再存在,不知何故该脚本仍在调用其他模块......
我知道这可能听起来真的很蠢,但希望有人可以帮我看看这里的光:) 感谢。
答案 0 :(得分:6)
在您获得require
d或use
d模块后,请检查%INC
以查看其来源。
例如:
use Data::Dumper;
print $INC{'Data/Dumper.pm'}."\n";
请注意,“::”变为“/”,并附加“.pm”。这可能会给你一个线索。
请记住,当前目录(“。”)通常是@INC
中的条目。但第一步是找出加载模块的目录。
要记住的另一件事是按顺序搜索@INC
中的目录。 use lib
前置于该列表(使其成为第一个搜索目录),因此您可能只需要添加相应的目录。
答案 1 :(得分:2)
你能详细说明你想做什么以及你是怎么做的吗?这个东西是标准的Perl分发结构吗?如果您没有使用标准分发结构,是否可以向我们展示目录列表,以便我们知道它们在哪里?您是否还可以包含用于尝试加载模块的代码?只需在汇总详细信息时更新原始问题。
通常,我通过构建运行器运行测试,它会自动设置正确的@INC
。
如果我想在我的发行版中运行一个测试,我使用blib
模块来查找具有我的模块的开发版本的构建库:
% perl -Mblib t/test.t
有些人使用prove做同样的事情。
如果您不使用基本分发设置,请考虑使用它。工具和最佳技术依赖于它。
如果您只是将模块和测试文件放在同一目录中,您是否尝试使用@INC
将当前目录添加到PERL5LIB
?