use strict; use warnings; use threads; use IO::Handle qw( ); # Not needed in Perl 5.12+ use Socket qw( AF_UNIX SOCK_STREAM PF_UNSPEC ); sub socketpipe { socketpair($_[0], $_[1], AF_UNIX, SOCK_STREAM, PF_UNSPEC) or return undef; shutdown($_[0], 1); # No more writing for reader shutdown($_[1], 0); # No more reading for writer $w->autoflush(1); return 1; } socketpipe(my $r, my $w) or die($!); async { print while <$r>; }; async { print($w "abc\n"); sleep(3); print($w "def\n"); shutdown($w, 1); }; $_->join for threads->list;