なぜ-MCarp =冗長を受け入れることを証明しないのだろうか?

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

  •  25-09-2019
  •  | 
  •  

質問

私は、このテストスクリプトを実行しました。

use strict;
use warnings;
use Test::More tests => 3;
use Carp;

ok(1<2);
pass();
fail();
croak "example";

コマンドラインprove -MCarp=verbose -v foo.plを使用して、次のエラーを得ます:

Subroutine App::Prove::verbose redefined at /opt/ActivePerl-5.12/lib/App/Prove.pm line 407
        App::Prove::_load_extension('App::Prove=HASH(0x683718)', 'Carp=verbose') called at /opt/ActivePerl-5.12/lib/App/Prove.pm line 419
        App::Prove::_load_extensions('App::Prove=HASH(0x683718)', 'ARRAY(0x683850)') called at /opt/ActivePerl-5.12/lib/App/Prove.pm line 481
        App::Prove::run('App::Prove=HASH(0x683718)') called at /opt/ActivePerl-5.12/bin/prove line 11
Undefined subroutine &Carp::verbose called at /opt/ActivePerl-5.12/lib/App/Prove.pm line 484.
私はperl -MCarp=verbose foo.plを使用して、それを実行している場合は問題ありません。何がカープ冗長に拒否するようproveを引き起こしていますか?彼らは地球がcroakcroakを交換せずにconfessとき、どのように私は私のテストからの完全なコールスタックを得ることができますか?

役に立ちましたか?

解決

prove -Mperl -Mと同等であることが表示されません。あなたのテストにモジュールをロードしない、証明拡張子をロードするように表示されます。ドキュメントは、この点には全く不明であるが、アプリケーション内のコード::ではないことを証明します。 prove -MCarp=verbose輸入カープ::冗長なアプリになるよう::上の問題を引き起こして証明します。

あなたが欲しいものを行うための簡単な方法はPERL5OPT環境変数を使用することで、プラスカープ::常にのすべてをオンになると、スタックトレースに警告し、金型(と鯉とcroaks)。

PERL5OPT=-MCarp::Always prove ...

このはとか、証明なしで、どのような状況での作業という利点もあります。

他のヒント

証明完全に異なるプログラムであること、perlのよりコマンドライン引数の非常に異なるセットを持っている?

の証明-Mは、プラグマを有効にするためのもの、私は信じている、です。鯉は、実際の証明内部の仕組みを妨げる冗長()サブルーチンへの前方参照をエクスポートします。

あなたは、このような小さなモジュールを作成することができます

# Verbme.pm
use Carp;
$Carp::Verbose = 1;

と証明するからそれを有効にします。

prove -MVerbme -v foo.pl

しかします。

EXPORT_FAILはまだそれが「失敗」しているという事実にもかかわらず、verboseに割り当てimportにしようとすると、カープは、ほとんど間違っているExporter::Heavy*Carp::verbose「オプション」を、処理するために輸出業者の*{"$callerpkg::verbose"}メカニズムを使用しています。残念ながら、App::Proveは、それが仕事に依存する、とあなたの-Mオプションは、インポートがApp::Prove内で発生する原因となることを冗長サブを持っています。私は必ずここに責任がある人ではないよ - それはCarpリストにかどうEXPORT_FAILからのものを除去しないため、この方法ではExporter::Heavy、または@importsを使用して(AB)のため@failedが、一緒に彼らはそれを破壊している:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top