in reply to While(1) using 100% CPU

If you can stand a shorter delay than what sleep() supports, there is select(). There's also Time::HiRes.

However, you're already using IO::Select->select() which I would think, being based on select(), would give you all you need. You could try setting the timeout to something other than 0, like 0.25 even undef if you only want it to return when there's something to act upon.