我使用Module::Starter
为自己构建了一个新的Perl模块,它在lib /中有以下源代码文件:
Foo/Bar.pm
Spam.pm
我在t/Bar.t
中制作了两个测试Foo/Bar.pm
的测试用例。我跑了:
perl Makefile.PL && make && make test
它显示我的2个测试用例已通过。
Bar.pm定义:
package Foo::Bar;
Spam.pm以这种方式使用它:
use Foo::Bar qw(fun);
尽管测试用例可以找到Foo :: Bar没问题,但是当我按perl Spam.pm
单独运行Spam.pm时,它会报告在@INC中找不到Foo :: Bar。
我做错了什么?
答案 0 :(得分:3)
<project root>/lib
通常不在您的包含路径中(您的@INC
设置)。 make test
将包含它(实际上是blib/lib
),但要在模块开发期间将其包含在独立程序中,您必须执行以下操作之一
perl -Ilib lib/Spam.pm
PERL5LIB=lib perl lib/Spam.pm
或者安装它(使用make install
),这将使文件在包含路径中的目录下可用。
答案 1 :(得分:1)
您从未安装过它。通过运行
来完成make install
答案 2 :(得分:1)
测试程序在特殊环境下运行,该环境在不同的地方查找被测模块。要在普通程序中使用该模块,您应该使用make install
安装模块。
但是模块不适合直接运行。你没有说出你Spam.pm
中的内容,但是如果你只是将它作为一个程序运行它就不可能做任何有用的事情。