use strict; use threads; use threads::shared; use IO::Socket; my $keep_running : shared = 1; my $socket = IO::Socket::INET->new(PeerAddr => "127.0.0.1", PeerPort => 8080, Type => SOCK_STREAM, Proto => 'tcp'); my $sender_thread = threads->new(\&do_send, $socket); my $listener_thread = threads->new(\&do_listen, $socket); $sender_thread->detach(); $listener_thread->join(); $socket->close(); sub do_listen { my $sock = shift; STDOUT->autoflush(1); while ($keep_running) { my $message = $sock->getline(); last unless defined($message); print $message; } } sub do_send { my $sock = shift; while (my $line = ) { $sock->print($line); $sock->flush(); } $keep_running = 0; }