http://www.perlmonks.org?node_id=537237


in reply to Interprocess pipe doesn't reliably deliver data

can_read() may be just telling you that you need to empty the pipe of data. Also, you may want to use sysread() instead of <...>. From the select perldocs...

WARNING: One should not attempt to mix buffered I/O (like "read" or <FH>) with "select", except as permitted by POSIX, and even then only on POSIX systems. You have to use "sysread" instead.