I agree simpler is better, but I was trying to differentiate this from yet another event loop. I mean, it is an event loop, just not one that the user uses directly.
But, that gave me the idea of IO::SocketAlarm, which plays off the alarm() syscall concept.