use strict; use warnings; package Server; use Storable qw(fd_retrieve); use Data::Dumper; use IO::Socket::INET; sub run {   my $server = IO::Socket::INET->new( LocalPort  => 43610                                     , Type       => SOCK_STREAM                                     , Listen     => 10                                     , Reuse      => 1                                     ) or die $!;   while (my $client = $server->accept()) {      my $data = fd_retrieve($client);      close $client;      close $server;      print Dumper($data);   } } package Client; use Storable qw(store_fd); use IO::Socket::INET; sub run {   sleep 1;   my $socket = IO::Socket::INET->new( PeerAddr => '127.0.0.1'                                     , PeerPort => 43610                                     , Proto    => 'tcp'                                     , Type     => SOCK_STREAM                                     ) or die $!;   my %hash = (a=>1,b=>2,c=>3);   store_fd \%hash, $socket; } 1; if (my $pid = fork) {   run Server; waitpid($pid,0); } else {   run Client; }