#!/usr/bin/perl use strict; use warnings; use IO::Handle; my @kids = (); my @readers; my @writers; my $pid; foreach my $i (1..3) { pipe $readers[$i], $writers[$i] or die "Unable to Create read/write pipe for #$i\n"; $writers[$i]->autoflush(1); $pid = fork; unless (defined($pid)) { print "Unable to fork a child\n"; exit(1); } elsif ($pid) { # Parent push @kids, $pid; close($writers[$i]); next; } else { # Child print "Child Created: $$\n"; close($readers[$i]); $| = 1; my $report; foreach my $i (1..10) { $report = sprintf("%.2f", rand(100)); print $writers[$i],"[$$] $report\n"; sleep(2); } exit(0); } } my $rin; if ($pid) { print "Kids: @kids\n"; print "Readhing from Child handle\n"; while (1) { foreach my $i (0..$#kids) { if (<$readers[$i]>) { if (defined($_)) { print "[parent] $_\n"; } else { print "[parent] \n"; } } else { print "Nothing to read\n"; } } sleep(1); } }