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

mel*_*aos 1 testing perl module

我有perl模块文件和测试脚本pl,我用它来运行一些功能,并在浏览了使用lib此前的问题后... 我仍然不知道如何做到这一点.

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

no lib qw(prod_dir);
Run Code Online (Sandbox Code Playgroud)

当打印出@INC目录不再存在的节目时,不知何故,脚本仍在调用其他模块......

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

cjm*_*cjm 6

在模块required或used后,检查%INC它的来源.

例如:

use Data::Dumper;
print $INC{'Data/Dumper.pm'}."\n";
Run Code Online (Sandbox Code Playgroud)

请注意,"::"变为"/",并附加".pm".这可能会给你一个线索.

请记住,当前目录(".")通常是一个条目@INC.但第一步是找出加载模块的目录.

要记住的另一件事是@INC按顺序搜索目录. use lib前置到该列表(使其成为第一个搜索目录),因此您可能只需要添加适当的目录.