http://qs321.pair.com?node_id=731064

I found a very odd bug today, triggered by a particular user's name. It started with an error message I've never seen before:

   Sort subroutine didn't return a numeric value at ...

The entry in perldiag suggests that I didn't use <=> or cmp or that I used them incorrectly. As it turned out, that was indeed true. The code in question was doing:

   foreach my $user (sort { $a->name <=> $b->name } @users) {

Since the names were alphanumeric obviously that should have been cmp not <=>. But I wondered, what was <=> returning if it wasn't returning a number? And since when did Perl even have values that couldn't be used numerically?

Printing out the data as it went through the sort revealed the culprit, one "Nan McEntire"! Apparently to Perl a string that starts with "Nan" is the same as NaN and <=> has special support for NaN values, returning undef! And sort has special un-support for something everything else in Perl does automatically, treating undefs as 0s.

Stunning! And, frankly, insane!

-sam