So, if someone wanted to call the same method twice on the same object, you've managed to completely remove that ability.
I guess you could do something like:
sub myfunction {
my $self = get_object( shift );
... # whatever's function specific, and not related to
# creation of the object
}
sub get_object {
my $self = shift;
if ( !ref $self ) { return $self->new() } # a string?
if ( UNIVERSAL::isa( $self, __PACKAGE__ ) { return $self }
return __PACKAGE__->new();
}
sub new {
...
}
But, it doesn't seem like a very clean interface to me ... I mean, how can we tell what arguments should've been part of the object initialization, and what were arguments to the method call?
Personally, I'm a user of SOAP::Lite, but I have a feeling that its history, having been created when SOAP was basically just a thin wrapper around XML RPC, was a problem, as almost all of the examples you find are these sorts of calls. I don't know that there is a good 'best practice' in how to deal with passing objects using SOAP::Lite. (if there is, I'd love to know about it myself)