http://www.perlmonks.org?node_id=1232991


in reply to Breaking up a big module

I've already answered this question, but now I'm typing a second solution.

Foo.pm

package Foo; use Role::Tiny::With; with "Foo::Bar"; sub aa { my ( $self, $args ) = @_; my $val = $self->_aa ( $args->{'bar'} ); } sub bb { my ( $self, $args ) = @_; my $val = $self->_bb ( $args->{'foo'} ); } 1;

Foo/Bar.pm

package Foo::Bar; use Role::Tiny; sub _aa { my $self, $quux ) = @_; } sub _bb { my $self, $fazoo ) = @_; } 1;

This has the advantage that the methods defined in Foo::Bar are no longer coupled to Foo. If you define a new class called Foo2, and want to have _aa and _bb defined in Foo2 as well, you can just do:

package Foo2; use Role::Tiny::With; with "Foo::Bar"; ...; 1;