如何强制Perl仅从测试目录运行模块?

时间:2009-10-01 07:26:07

标签: perl testing module

我有perl模块文件和测试脚本pl,用于运行某些功能,以及browsing through the use libthis previous question here...之后 我仍然不知道该怎么做。

基本上我有一个包含模块文件的生产目录,我有一个包含相同模块和测试脚本文件的测试目录文件。每次我尝试运行脚本文件时,它都会自动调用目录中的模块。通过打印@INC,似乎生产目录托管在那里。因此我尝试使用

删除它
no lib qw(prod_dir);

并且在打印出@INC时显示该目录不再存在,不知何故该脚本仍在调用其他模块......

我知道这可能听起来真的很蠢,但希望有人可以帮我看看这里的光:) 感谢。

2 个答案:

答案 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