in reply to Re^2: shared memory and objects
in thread shared memory and objects

Modified above example a little bit, so now it sends a freezed object over:

blah.pm: package blah; sub new { $self = {}; bless($self); return $self; } sub setA { my ($self, $a) = @_; $self->{"A"} = $a; } sub getA { my $self = shift; return $self->{"A"} } 1; s.pl: use IO::Socket; use blah; use Storable qw(thaw); use Data::Dumper; use strict; use warnings; my $server = new IO::Socket::INET(Timeout => 7200, Proto => "udp", LocalPort => 3000, LocalHost => "localhost"); print "Server is listening ...\n"; my $blah_freezed; $server->recv($blah_freezed, 1000); my $blah = thaw($blah_freezed); print $blah->getA(); close $server; c.pl: use Storable qw(freeze); use blah; use IO::Socket; use strict; use warnings; my $c = new IO::Socket::INET(Proto => "udp", PeerAddr => "localhost", PeerPort => 3000, Timeout => 1); print "Connected\n"; my $blah = blah->new(); $blah->setA(123); my $blah_freezed = freeze($blah); $c->send($blah_freezed); close $c;

Replies are listed 'Best First'.
Re^4: shared memory and objects
by NetWallah (Canon) on Oct 25, 2004 at 21:01 UTC
    I modified pg's code to make the module do most of the work, simplifying life for the client and server ...
    #blah.pm: package blah; use Storable qw(freeze thaw); use IO::Socket; sub new { $self = {}; bless($self); return $self; } sub setA { my ($self, $a) = @_; $self->{"A"} = $a; } sub getA { my $self = shift; return $self->{"A"} } ################# sub Send{ # Freeze and send myself over UDP my ($self, $ToPort) = @_; my $blah_freezed = freeze($self); $ToPort |= 3000; my $c = new IO::Socket::INET(Proto => "udp", PeerAddr => "localhost", PeerPort => $ToPort, Timeout => 1); print "Connected\n"; $c->send($blah_freezed); close $c; } ###################### sub Recieve{ # Instantiate an object by thawing item recieved via UDP my ($self, $FromPort) = @_; $FromPort |= 3000; my $server = new IO::Socket::INET(Timeout => 7200, Proto => "udp", LocalPort => $FromPort, LocalHost => "localhost"); print "Server is listening ...\n"; my $blah_freezed; $server->recv($blah_freezed, 1000); close $server; return bless thaw($blah_freezed); } ###################### 1; #c.pl: use blah; use strict; use warnings; my $blah = blah->new(); $blah->setA(123); $blah->Send(); #s.pl: # Instantiate an object (Created via socket, behind the scenes). use blah; use strict; use warnings; my $blah = blah->Recieve(); print $blah->getA();

        Earth first! (We'll rob the other planets later)