ethrbunny has asked for the wisdom of the Perl Monks concerning the following question:

Im using Soap::Lite as follows:

Server:
use SOAP::Lite; use SOAP::Transport::HTTP; $SIG{PIPE} = 'IGNORE'; $daemon = SOAP::Transport::HTTP::Daemon -> new (LocalPort => 8001, LocalAddr => 'localhost', listen => 5) -> dispatch_to(qw(demo)); print "Contact to SOAP server at ", $daemon->url, "\n"; $daemon->handle;


demo.pm
package demo; sub new { print "called NEW\n"; my $pkg = shift; my $self = {}; bless($self, $pkg); return $self; } sub DESTROY { print "DESTROY - called\n"; } sub getVal { my $self = shift; print "val = $self->{VAR}\n"; } sub setVal { my $self = shift; print "set val\n"; $self->{VAR} = shift; }


Client:
use SOAP::Lite +autodispatch => uri => 'http://localhost/demo', proxy => 'http://localhost:8001/'; my $obj = demo->new(); $obj->getVal(); $obj->setVal(44); $obj->getVal();


What I see:
called NEW DESTROY - called val = DESTROY - called set val DESTROY - called val = 44 DESTROY - called
Clearly my object isn't being destroyed or GC'd. If I run the client a second time (without restarting the server) it creates a new (empty) $self with VAR undefined.

Clearly I am misunderstanding OO Perl. Whats my disconnect?

Replies are listed 'Best First'.
Re: soap::lite - odd DESTROY behaviour
by Anonymous Monk on Aug 08, 2007 at 04:12 UTC
    SOAP::Lite is magic at a distance