When I read your question, it occurred to me that you might have a misunderstanding of how objects work. Remember, the caller already has the object that gets assigned to $self; that's why he is able to call the method. When you update the object's attributes, that update is reflected in the object that the caller has, so returning that value is not strictly necessary.
One common style of o-o programming is that you have some methods that mutate the state of the object, and others that access the state. The mutators typically do not return a value, but the accessors do return some aspect of the state of the object.