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

Or communicate it thru Socket:

Client: use Storable qw(freeze); 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 $h = {"key" => [1,2,3,4,5,6,7,8,9,10]}; my $arr_freezed = freeze($h); $c->send($arr_freezed); close $c; Server: use IO::Socket; 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 $arr_freezed; $server->recv($arr_freezed, 1000); my $h = thaw($arr_freezed); print Dumper($h); close $server;

Replies are listed 'Best First'.
Re^3: shared memory and objects
by pg (Canon) on Oct 25, 2004 at 20:14 UTC

    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;
      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)