in reply to object method that returns object

You aren't removing the object from the parameters being passed.
sub getDocumentInfo { my ($self,$file_id) = @_; # suspect problem here return DocumentInfo::new($file_id); }