8

「モジュリーノ」のアイデアを使用して単体テストを開始したスクリプトがいくつかあります。スクリプトが "perl -d" で呼び出されると、caller() が真の値を返すため、スクリプトが実行されないという問題が発生しました。

スクリプトの本体が main() にラップされており、いくつかのサブルーチンが main() から独自のサブルーチンにゆっくりと引き出されています。

私が持っているスクリプトの上部に:

main(@ARGS) unless caller();

.t テストで呼び出すと、main() を実行せずに希望どおりに動作するため、サブルーチンをテストできます。CLI からスクリプトを呼び出すと、main() を呼び出すとうまく機能します。

CLI から次のように呼び出すと、問題が発生します。

perl -d myscript.pl

この段階で、呼び出し元は (undef ではなく) 有効な値を返し、main は呼び出されません。

これにアプローチする方法についての提案は大歓迎です。

4

1 に答える 1

9

スイッチの状況-dは、テストの場合と似ています。コードは別のもの (この場合はデバッガー) によって実行されます。

mainデバッガーで手動で呼び出して自分で実行するか、デバッガーであるかどうかを検出する必要callerがあります。何かのようなもの:

main(@ARGS) if !caller() || (caller)[0] eq 'DB';
于 2012-02-20T17:31:07.957 に答える