我有一个 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;
}
请让我知道如何成功地将 Module.pm 中的 $VAR2 和 $VAR3 导出到每个子模块中。在此先感谢您的帮助!