0

私は本当に奇妙な問題に直面しています。別の perl スクリプトを内部的に呼び出す perl スクリプトがあります。UNIX から手動で実行している場合、問題は発生していません。

同じスクリプトを control-m スケジューラからスケジュールすると、date:manip パッケージを見つけるための内部スクリプトでコンパイル エラーが発生します。

Can't locate Date/Manip.pm in @INC.BEGIN failed--compilation aborted for script.

残念ながら、クライアントの問題により、ここにスクリプトを添付できません。

でも誰か助けてくれませんか?

4

1 に答える 1

1

これは通常、コマンド ラインでのライブラリ パス (unix から実行している場合) が、control-m で実行している場合とは異なることを意味します。

スクリプトの先頭で、他の Perl コードの前に、これを追加します。

BEGIN { die 'INC: ' . join("\n", @INC) }

これは、モジュールを見つけるために perl が検索するすべてのライブラリ パスを含む例外をすぐにスローします。

unix と contol-m でスクリプトを再度実行します。ライブラリ インクルード パス (@INC に含まれる) は異なる可能性があります。control-m には、1 つ以上のライブラリ パスが欠落している可能性があります。不足しているものは、明示的に含めることができます。

use lib '/some/library/path';

それが簡単な答えです。

このような問題が発生している場合 (これは通常のケースです)、解決すべきより大きな環境問題があり、万能の答えはありません。修正を行うことuse libは簡単なハックですが、長期的にこれに対処する正しい方法ではありません.

于 2014-01-25T04:15:49.787 に答える