スクリプトでカスタム モジュールを使用しており、それらを Perllib
ディレクトリの外に保存する必要があります。したがって、Perl スクリプト ( *.pl
) では、次のブロックを使用してそれらを に含めます@INC
。
BEGIN {
use FindBin qw($Bin);
push @INC, "$Bin/../ModulesFolder1";
push @INC, "$Bin/../ModulesFolder2";
}
しかし、他の Perl モジュール ( *.pm
) 内でモジュールを使用する必要もあり、私が理解しているようFindBin
に、スクリプトでのみ機能します。そこで、そのブロックを次のように変更します。
BEGIN {
push @INC, catdir( dirname( $INC{'ThisModule.pm'} ), qw( .. ModulesFolder1 ) );
push @INC, catdir( dirname( $INC{'ThisModule.pm'} ), qw( .. ModulesFolder2 ) );
}
動作しますが、少し問題があります。私は EPIC プラグインを使用して Eclipse でコーディングしていますが、「BEGIN ブロックに何かがあり、コンパイラが途中で中止する場合、構文エラーは EPIC に報告されません」ということで、モジュール内の Perl 構文チェックが失われます。
したがって、FindBin
(スクリプト内で)ブロック内で関数( などcatdir
)を使用する必要はなくBEGIN{}
、次のコードの構文チェックは正しく行われます。PERL5LIB
さらに、追加の準備なしで同僚のマシンでスクリプトを使用できるように、環境変数 ( など) を変更したくありません。
他のモジュール内でカスタム Perl モジュールを使用し、同時に EPIC 構文チェックを妨害しない適切な方法は何ですか? それとも、まったく別の方法でモジュールを含める必要があるのでしょうか?