Yes there is, set your
$fh non-blocking (
IO::Handle's blocking method) and use
IO::Handle's
getline method on
$fh, bearing in mind that
getline will return
undef (ending a while loop) when there isn't a line to read (
<$fh> would also work non-blockingly, so
getline is not strictly necessary)
As for the other issue, just split your returned line on
"\n".