Re: Sort sub and NaNs
John P. Linderman [Thu, 10 Jul 2003 10:45:06 +0000 (06:45 -0400)]
From: "John P. Linderman" <jpl@research.att.com>
Message-Id: <200307101445.KAA79110@raptor.research.att.com>

Warn against a potential edge case with sort, <=> and NaNs.

p4raw-id: //depot/perl@20156

pod/perlfunc.pod

index 3686736..612b9cd 100644 (file)
@@ -4758,6 +4758,15 @@ inconsistent results (sometimes saying C<$x[1]> is less than C<$x[2]> and
 sometimes saying the opposite, for example) the results are not
 well-defined.
 
+Because C<< <=> >> returns C<undef> when either operand is C<NaN>
+(not-a-number), and because C<sort> will trigger a fatal error unless the
+result of a comparison is defined, when sorting with a comparison function
+like C<< $a <=> $b >>, be careful about lists that might contain a C<NaN>.
+The following example takes advantage of the fact that C<NaN != NaN> to
+eliminate any C<NaN>s from the input.
+
+    @result = sort { $a <=> $b } grep { $_ == $_ } @input;
+
 =item splice ARRAY,OFFSET,LENGTH,LIST
 
 =item splice ARRAY,OFFSET,LENGTH