#! perl -sw use strict; use threads; use IO::Select; $|++; my $sel = IO::Select->new(); my %children; for (1..2) { open my $fh, q[ perl -le'$|++; sleep(1), print qq[$$: $_] for 1 .. 10' | ] or die $!; $sel->add($fh); $children{$fh} = ""; } while (%children) { for my $fh ( $sel->can_read() ) { our $buf; local *buf = \( $children{$fh} ); # alias sysread($fh, $buf, 4096, length($buf)) or do { print("$buf\n") if length($buf); $sel->remove($fh); delete($children{$fh}); next; }; print $1 while $buf =~ s/^(.*\n)//; } }