3

perl の基本に疑問use

それは私の他の質問Perl: Two packages in same file...と幾分似ています。

perl スクリプトを考えてみましょう:

Script.pl

use INCLUDES;

含む.pm

package INCLUDES;
use Exporter;

############# MY DOUBT STARTS HERE ###############
use Module1;
use Module2;
##################################################

our @ISA = qw(Exporter);
our @EXPORT = qw();

sub import {

  print 'INCLUDES imported to ' . caller . "\n";

}

Module1.pm

package Module1;

use strict;
use Exporter;
use INCLUDES;    #####=> INCLUDES.pm 'use'd

our @ISA = qw(Exporter);
our @EXPORT = qw();

1;

Module2.pm

package Module2;

use strict;
use Exporter;
use INCLUDES;  #####=> INCLUDES.pm 'use'd

our @ISA = qw(Exporter);
our @EXPORT = ();

1;

出力

D:\Do_analysis>Script.pl
INCLUDES imported to main

perl docs によるとuse INCLUDES;、Module1 & Module2 => BEGIN {require 'INCLUDES.pm'; 'INCLUDES'->import();}で。したがって、 はimport()Module1.pm 、 Module2.pm でも呼び出す必要があります。

出力は次のようになると思いますが、

期待される出力??

D:\Do_analysis>Script.pl
INCLUDES imported to main
INCLUDES imported to Module1
INCLUDES imported to Module2

しかし、実行が期待どおりにならないのはなぜですか?

更新しました

これは、INCLUDES.pm ファイルを使用して達成しようとしていることです。

モジュール ライブラリ

注意: PACKAGE2PACKAGE3、PACKAGE4 などにアクセスしたい場合があります。use内部のすべてのモジュールを個別に ing する代わりにPACKAGE2、ライブラリINCLUDESuseそれを他のすべてのモジュールに作成したいと考えています。

このアプローチは有効ですか?または推奨?

これを達成する方法についてのアイデアに感謝します。ありがとう!

4

2 に答える 2