use strict; use warnings; use IPC::Open2; $|=1; $SIG{PIPE} = sub { print STDERR "SIGPIPE received\n"; exit; }; my $pid = open2(my $reader, my $writer, 'perl -wpe 1'); print $writer "$_\n" for (qw(first second third)); print "Data written\n"; close $writer; print "Reading from pipe:\n"; while(my $data=<$reader>) { print "Received: ".<$reader>."\n"; } close $reader; print "No more data\n"; waitpid($pid, 0); print "Finished\n";