Darren Duncan <[EMAIL PROTECTED]> writes:

> At 11:26 PM -0700 3/16/05, Luke Palmer wrote:
>>  > For each of the above cases, is a copy of or a reference to the
>>>  attribute returned?  For each, will the calling code be able to
>>>  modify $obj's attributes by modifying the return values, or not?
>>
>>Well if you're making accessors, why the heck are you making them
>>private?  But I can't really answer your question, because it depends on
>>how you write the accessors.
>
> I am writing accessors to mediate with the attributes, which are all private,
> and whose implementation may change over time.  What I want, in the normal
> case, is that calling code which invokes my methods will get a copy of
> attributes which it can modify, that won't affect the original attribute
> values.
>
> When I last asked a related question here, I was told that simply returning
> an attribute will allow the caller to modify the original attribute by
> default.  I wanted to make sure this didn't happen.  It is possible that
> there was a misunderstanding regarding the previous question, and the default
> action is in fact a copy.

Doesn't that rather depend on the type of the attribute? Personally, if I get
an object back from accessor method then I expect that any modifications of
that object's state will be seen the next time I look at the results of that
accessor method. This is a direct result of the way reference types work, and
the world is a better place because of it. If you want a (deep) copy of the
returned object you should say so:

   my $res = $object.attribute.clone;



    

Reply via email to