IO::Select::select is documented to return an empty list (zero values) on error. It also returns this on timeout.
And in the case of the TIMEOUT, they will always all be undefined?
Assigning an empty list to a variable will undefine it, so yes.
sets $no_error true if any of the element in the list are defined.
Yes, but not directly. $no_error is set to the number of values returned by IO::Select::select. Since IO::Select::select returns either an empty list or three references, the vars are only undefined when $no_error is false, and they're always undefined when $no_error is false.