####### foo.pl ###################### use Foo; my $o = Foo->new( name => 'Tom' ); ####### Foo.pm ################## package Foo; sub new { my ($class, %args) = @_; my $self = { name => $args{name} }; bless $self, $class; return $self; } sub name { return $_[0]->{name}; } 1; #### ####### bar.pl ###################### use Bar; my $o = Bar->new( age => 23 ); ####### Bar.pm ################## package Bar; sub new { my ($class, %args) = @_; my $self = { age => $args{age} }; bless $self, $class; return $self; } sub age { return $_[0]->{age}; } 1; #### foo.pl Foo.pm bar.pl Bar.pm #### ####### foobar.pl ###################### use Foobar; my $o = Foobar->new( name => 'Tom' age => 23 ); #### foobar.pl Foobar.pm Foobar/Foo.pm Foobar/Bar.pm #### ####### Foobar.pm ################## package Foobar; use Foobar::Foo; ??? use Foobar::Bar; ??? sub new { ???? } 1;