3

我为自己构建了一个新的 Perl 模块Module::Starter,它在 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 没有问题,但是当我单独运行 Spam.pm 时perl Spam.pm,它报告在 @INC 中找不到 Foo::Bar。

我究竟做错了什么?

4

3 回答 3

3

<project root>/lib通常不在您的包含路径(您的@INC设置)中。make test将包含它(实际上blib/lib),但是要在模块开发期间将其包含在独立程序中,您必须执行以下操作之一

perl -Ilib lib/Spam.pm
PERL5LIB=lib perl lib/Spam.pm

或者安装它(使用make install),这将使文件在包含路径中的目录下可用。

于 2012-08-23T20:40:39.283 回答
1

你从来没有安装过它。通过运行来做到这一点

make install
于 2012-08-23T20:38:16.257 回答
1

测试程序在一个特殊的环境下运行,该环境在不同的地方寻找被测模块。要在普通程序中使用该模块,您应该使用make install.

但是模块并不意味着直接运行。您没有说出您的内容,Spam.pm但如果您只是将其作为程序运行,则不太可能做任何有用的事情。

于 2012-08-23T20:39:41.917 回答