У меня есть модуль 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 в каждый подмодуль. Заранее спасибо за помощь!