in reply to Re^3: Avoiding circular references
in thread Avoiding circular references

In this case, however, it's easier to use weaken.

Simply change

sub new { my ( $class, $href ) = @_; my $self = { dbi => $$href{dbi} }; $self->{helper} = Helper->new( helper_function => sub { $self->this_is_from_A(@_) }, ); bless $self, $class; }
to
use Scalar::Util qw( weaken ); sub new { my ( $class, $href ) = @_; my $self = { dbi => $$href{dbi} }; { weaken( my $self = $self ); $self->{helper} = Helper->new( helper_function => sub { $self->this_is_from_A(@_) }, ); } bless $self, $class; }

(By using the same name for the weakened variable as the unweakened one, we avoid using the wrong one by accident.)