my $dsgn = subA(); $dsgn->method(); sub subA { my $obj = new (c++_object); return $obj; } #### my $obj = new (c++_object) subA($obj) sub subA { my ($object) = @_; $object->method(); } #### CALLEE can NOT return OBJECT CALLER can ALWAYS pass OBJECT