in reply to Using stdin only if there is input on it, but skipping it if there is no data
You can use select (see perlfunc) to check whether data is available from a file descriptor.
Though, that could incur in a race condition, for instance, when the data is generated by another process running in parallel. So, you should probably set a safe waiting time (the last select argument).
In Section
Seekers of Perl Wisdom