use warnings; use strict; use Data::Dump qw/dd pp/; use Mojo::IOLoop::Client; use Mojo::IOLoop::LineReader; my $client = Mojo::IOLoop::Client->new; $client->on(connect => sub { my ($cli, $handle) = @_; print "Connect\n"; my $stream = Mojo::IOLoop::LineReader->new($handle); $stream->timeout(10); $stream->on(readln => sub { my ($strm, $line) = @_; print "Got line ",pp($line),"\n"; }); $stream->on(close => sub { print "Closed\n"; $stream->stop; $stream = undef; # free reference }); $stream->on(error => sub { my ($strm, $err) = @_; warn "Error: $err"; }); $stream->start; $stream->write("Hello, server, I am a client.\n"); }); $client->on(error => sub { my ($cli, $err) = @_; warn "Error: $err"; }); $client->connect(address => '127.0.0.1', port => 3000); $client->reactor->start unless $client->reactor->is_running;