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