いくつかの変数を初期化するPerlモジュール(Module.pm)があり、そのうちのいくつかは、実行中にロードされる可能性のある追加のサブモジュールに($ VAR2、$ VAR3)をインポートしたいと思います。
現在Module.pmを設定している方法は次のとおりです。
package Module;
use warnings;
use strict;
use vars qw($SUBMODULES $VAR1 $VAR2 $VAR3);
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw($VAR2 $VAR3);
sub new {
my ($package) = @_;
my $self = {};
bless ($self, $package);
return $self;
}
sub SubModules1 {
my $self = shift;
if($SUBMODULES->{'1'}) { return $SUBMODULES->{'1'}; }
# Load & cache submodule
require Module::SubModule1;
$SUBMODULES->{'1'} = Module::SubModule1->new(@_);
return $SUBMODULES->{'1'};
}
sub SubModules2 {
my $self = shift;
if($SUBMODULES->{'2'}) { return $SUBMODULES->{'2'}; }
# Load & cache submodule
require Module::SubModule2;
$SUBMODULES->{'2'} = Module::SubModule2->new(@_);
return $SUBMODULES->{'2'};
}
各サブモジュールは次のように構成されています。
package Module::SubModule1;
use warnings;
use strict;
use Carp;
use vars qw();
sub new {
my ($package) = @_;
my $self = {};
bless ($self, $package);
return $self;
}
$VAR2および$VAR3変数を$Module::VAR2および$Module:: VAR3として参照せずに、各サブモジュールにインポートできるようにしたいと思います。呼び出し元のスクリプトは、Module.pmでエクスポートした両方の変数に目的の方法でアクセスできることに気付きましたが、SubModule1.pmとSubModule2.pmは、それらの変数をModule.pmからのものとして参照する必要があります。
次のように各サブモジュールを更新しようとしましたが、残念ながら機能しませんでした。
package Module::SubModule1;
use warnings;
use strict;
use Carp;
use vars qw($VAR2 $VAR3);
sub new {
my ($package) = @_;
my $self = {};
bless ($self, $package);
$VAR2 = $Module::VAR2;
$VAR3 = $Module::VAR3;
return $self;
}
$VAR2と$VAR3をModule.pmから各サブモジュールに正常にエクスポートする方法を教えてください。よろしくお願いします!