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.
In Section
Seekers of Perl Wisdom