#!/usr/bin/perl use warnings; use strict; use lib '/tmp/'; package Foo; use Bar; sub new { my $invocant = shift; my $class = ref($invocant) || $invocant; my $self = {}; return $self; } sub get_bar { return Bar->new(); } 1; #### #!/usr/bin/perl use warnings; use strict; use lib '/tmp/'; package Bar; use Foo; sub new { my $invocant = shift; my $class = ref($invocant) || $invocant; my $self = {}; return $self; } sub get_foo { return Foo->new(); } 1; #### Subroutine new redefined at Foo.pm line 13. Subroutine get_bar redefined at Foo.pm line 22. Foo.pm syntax OK