開発ディレクトリにあるアンインストールされたPerlモジュールを@INCに簡単に追加するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1015793

  •  06-07-2019
  •  | 
  •  

質問

既存のプロジェクト用のPerl t / *。tテストを書いています。開発中に、「prove」を使用して、モジュールディレクトリ階層の任意の深さで選択テストを実行したいと思います。テストしたい* .pmファイルと同じ深さでいくつかのt /ディレクトリを作成しました。残念ながら、プロジェクトのコードのベースにあるlib /は@INCにはありません。

@INCへのパスを自動的に検出して追加する最良の方法は何ですか?一般に-bオプションを確認してblibを検証しましたが、機能しないようです(pwdを使用してblib / libを追加し、@ INCに追加します)。理想的には、ソリューションは環境変数やモジュールのインストールを必要とせず、同じコードの多数の作業コピーに対応します。

私のアプローチは間違っていますか?私が見逃している明らかなものはありますか? CPANモジュールは、インストールまたは* .tファイルの先頭にあるコードブロックのコピー(yuck)によってこれを解決するようです。

編集:

構造は次のようになります。

/home/user/proj/branch\_foo/lib/First/Second/Third.pm
/home/user/proj/branch\_foo/lib/First/Second/t/third.t

これは動作します:

~/proj/branch\_foo/lib/First/Second$ prove -I../..

しかし、私は欲しい:

~/proj/branch\_foo/lib/First/Second$ prove -r

または:

~/proj/branch\_foo/lib/First/Second$ prove t/third.t

だからできること:

~/proj/branch\_foo/lib$ prove -r

代わりに:

~/proj/branch\_foo/lib$ prove -I. -r

たぶん -I を使用して対処するだけです。

役に立ちましたか?

解決

証明には -Iがありますコマンドラインオプション:

  

-I 含めるライブラリパス。

そのオプションを使用してパスを指定できますか?

更新:

レイアウトを提供してくれてありがとう。私は今すぐに簡単な解決策を考えることはできませんが、おそらく。proverc ファイルを使用して、必要な入力を減らします。複数の .proverc ファイルが -r オプションとどのように相互作用するかはわかりませんが、これは検討すべきものです。

他のヒント

これが、まさにblibモジュールが存在する理由です。現在のディレクトリを検索し、その親ディレクトリが@INCに追加する blib / lib を探します。 Perl標準ライブラリの一部であるため、すでに必要です。

t / の下のどこからでも、-Mスイッチを使用してblibをロードできます。

% perl -Mblib test.t

proveで使用する場合

% perl -Mblib prove test.t

proveの-bスイッチと同じものと思われますが、前回(かなり前に)試してみましたが、うまくいきませんでした。たぶん、彼らはそれをblib.pmのように修正した:

% prove -b test.t

これには、 lib / からテストするのではなく、まずディストリビューションをビルドする必要がありますが、それでも実行する必要があります。 :)

環境変数 PERL5LIB を設定できます( < code> perldoc perlrun )。これにより、 perl がコロンで区切られたパスを @INC に追加します。

% export PERL5LIB=/absolute/path/to/your/libraries
% cd into/part/of/your/test/suite
% prove -r
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top