我注意到我的2个模块中存在循环依赖。所以我做了以下事情:
package A::B::ModuleA;
sub foo {
my ($class, $params) = @_;
# some processing
require A::C::ModuleB;
my $mb = A::C::ModuleB->new();
$mb->bar($params);
# some other processing
}
1;
package A::C::ModuleB;
sub process {
my ($class, $input) = @_;
# Some processing
require A::B::ModuleA;
my $ma = A::B::ModuleA;
$ma->submit($input);
# some other processing
}
1;
所以我的问题是,如果我通过函数内部的require解决循环依赖问题的方式解决了任何可能是这种依赖的结果的问题。
答案 0 :(得分:2)
对于纯面向对象的代码,没有循环依赖问题。你可以非常高兴地拥有类似的东西:
# AAAA.pm
package AAAA;
use strict;
use warnings;
use BBBB;
sub new {
my $class = shift;
my ($i) = @_;
bless {
b => $i > 0 ? BBBB->new($i-1) : $i
}, $class;
}
1;
# BBBB.pm
package BBBB;
use strict;
use warnings;
use AAAA;
sub new {
my $class = shift;
my ($i) = @_;
bless {
a => $i > 0 ? AAAA->new($i-1) : $i
}, $class;
}
1;
# script.pl
use strict;
use warnings;
use AAAA;
use Data::Dumper;
print Dumper( AAAA->new(4) );
如果您需要在编译时对模块执行某些操作,则循环依赖性只会成为问题。出口商是最常见的例子。