sysread($handle, my $message, -s $handle); #### my %buf; while (my @handles = $ios->can_read(0)) { foreach my $handle (@handles) { $buf{$handle} ||= { buf => '', offset => 0 }; # Aliases to improve readability through conciseness. our $buf; local *buf = \($buf{$handle}{buf }); our $offset; local *offset = \($buf{$handle}{offset}); #my $len = sysread($handle, $buf, -s $handle, $offset);#Portable? my $len = sysread($handle, $buf, 1024, $offset); die("Unable to read from pipe: $!\n") if not defined $len; if (not $len) { $ios->remove($handle); next; } $offset += $len; for (;;) { my $pos = index($buf, "\x0A"); last if not ++$pos; my $message = substr($buf, 0, $pos); $buf = substr($buf, $pos); $offset -= $pos; $message =~ s/\x0A$/\n/; # For Macs. print "Read message: ".$message; } } } foreach (keys %buf) { die("Unable to read from pipe: Premature end of file\n") if $buf{$_}{offset}; }