3

を使用して新しいPerlモジュールを作成しModule::Starterました。これには、lib/に次のソースコードファイルがあります。

Foo/Bar.pm
Spam.pm

t/Bar.tそのテストで2つのテストケースを作成します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を個別に実行すると、@INCperl Spam.pmで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 に答える