in reply to Re^4: Designing an OO program with multiple inherited classes
in thread Designing an OO program with multiple inherited classes

I haven't taken the time to read and understand your full code, but, with respect to your "## desired:" comments, the way you would make the Obj instance available within Foo::foo would be to change the first line of Obj::foo to:
my $self = $_[0]; # instead of $self = shift
so that the Obj instance passes itself as the first parameter to Foo::foo. Then add
my $self = shift; my $caller = shift;
to the start of Foo::foo to get the Foo instance in $self and the invoking Obj instance in $caller. You'll then be able to reference the relevant bits of $obj as $caller->cid, $caller->dbh, etc.