[EMAIL PROTECTED] (Ton Hospel) writes: > In article <[EMAIL PROTECTED]>, > Rafael Garcia-Suarez <[EMAIL PROTECTED]> writes: > > Ok, select($$$$) now returns undef on error as of change #24223. > > /me raises the backward compatibility police card > > For what it's worth, I think this is a bad idea.
I can agree that it is a bad idea unless it can be demonstrated that a majority of usages of this function assumed undef on error. Fortunately we do have CPAN that can be used to do some statistical analysis of its usage. I don't think we should keep this change until somebody that care enough do this analysis. I assume this change is an experiment by Rafael to figure out how many would scream up about such a change. I'm surprised by how few do. > First of all it basically breaks the error handling in all my > select() code where I typically do something like: > > if (select(..) >= 0) { > play a bit with time and handles, i don't really care what the exact > number that got returned is > } elsif ($! == EINTR) { > redo some loop; > } else { > die "Unexpectedd select failure: $!" > } > > So now I'll get pointless undef warnings in the failure case and will never > get to the die even if I want it to. So, how did you figure out this was the right way? Did you read the source code for pp_sselect, did you find this by experimentation or was this just the obvious mapping to you? I know I got it wrong because it was "obvious" to me that select worked like sysread, which is a function you will almost always use together with select. > So it DOES break existing code. It sure does. > And fixing it so it works on *both* versions of perl gets messy too. I don't know anything better than: my $nfound = select(...); $nfound = undef if $nfound == -1; if (defined $nfound) { # play a bit with time and handles } else { # failed; check $! } or make a wrapper for select that does this. > Also notice that there are other calls in perl that do the -1 on failure, > see tell(), waitpid(), wait(), syscall(). So it isn't as if it happens > nowhere else in perl. Seems to kill the consistency with sysread argument. There is no way we can get consistency between the various builtin functions anyway so why try. --Gisle