Re: How to avoid circular module dependencies within a distribution?

[email protected] (Alex Muntada)
Newsgroups perl.module-authors
Message-ID <20161026185438.GA17324@xps>
David Christensen:

> Here is a contrived example that shows circular modular dependency
> without circular subroutine dependency:

In this particular case, I'd move subs bar2 and foo2 to another
module FooBar.pm, and have Foo.pm and Bar.pm import those subs
from FooBar.pm instead:

> 2016-10-19 11:05:08 dpchrist@t7400 ~/sandbox/perl/circular-dependency
> $ cat Foo.pm
> package Foo;
> use strict;
> use warnings;
> require Exporter;
> our @ISA = qw( Exporter );
> our @EXPORT = qw( foo1 foo2 );
> use Bar;
> sub foo1 { print "foo1\n"; bar2(); }
> sub foo2 { print "foo2\n";         }

package Foo;
use strict;
use warnings;
require Exporter;
our @ISA = qw( Exporter );
our @EXPORT = qw( foo1 );
use FooBar;
sub foo1 { print "foo1\n"; bar2(); }

> 2016-10-19 11:05:10 dpchrist@t7400 ~/sandbox/perl/circular-dependency
> $ cat Bar.pm
> package Bar;
> use strict;
> use warnings;
> require Exporter;
> our @ISA = qw( Exporter );
> our @EXPORT = qw( bar1 bar2 );
> use Foo;
> sub bar1 { print "bar1\n"; foo2(); }
> sub bar2 { print "bar2\n";         }

package Bar;
use strict;
use warnings;
require Exporter;
our @ISA = qw( Exporter );
our @EXPORT = qw( bar1 );
use FooBar;
sub bar1 { print "bar1\n"; foo2(); }

# FooBar.pm
package FooBar;
use strict;
use warnings;
require Exporter;
our @ISA = qw( Exporter );
our @EXPORT = qw( foo2 bar2 );
sub foo2 { print "foo2\n"; }
sub bar2 { print "bar2\n"; }

Deciding if bar2 and foo2 will go together or separatedly depends
mostly on the problem at hand, so I'm suggesting the shortest
path (i.e. together) with the information I have.

Cheers,
Alex
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.