perllocale: Document NUL collation handling
authorKarl Williamson <khw@cpan.org>
Sat, 21 May 2016 17:35:10 +0000 (11:35 -0600)
committerKarl Williamson <khw@cpan.org>
Tue, 24 May 2016 16:26:28 +0000 (10:26 -0600)
And add a TODO test, because this shortly will be improved upon

lib/locale.t
pod/perllocale.pod

index 1e99b6e..ddb5d79 100644 (file)
@@ -1735,6 +1735,20 @@ foreach my $Locale (@Locale) {
                 last;
             }
         }
+
+        use locale;
+
+        ++$locales_test_number;
+        $test_names{$locales_test_number}
+            = 'TODO Skip in locales where \001 has primary sorting weight; '
+            . 'otherwise verify that \0 doesn\'t have primary sorting weight';
+        if ("a\001c" lt "ab") {
+            report_result($Locale, $locales_test_number, 1);
+        }
+        else {
+            my $ok = "ab" lt "a\0c";
+            report_result($Locale, $locales_test_number, $ok);
+        }
     }
 
     my $ok1;
index 018f916..0c7e769 100644 (file)
@@ -1565,6 +1565,16 @@ called, and whatever it does is what you get.
 
 =head1 BUGS
 
+=head2 Collation of strings containing embedded C<NUL> characters
+
+Perl handles C<NUL> characters in the middle of strings.  In many
+locales, control characters are ignored unless the strings otherwise
+compare equal.  Unlike other control characters, C<NUL> characters are
+never ignored.   For example, if given that C<"b"> sorts after
+C<"\001">, and C<"c"> sorts after C<"b">, C<"a\0c"> always sorts before
+C<"ab">.  This is true even in locales in which C<"ab"> sorts before
+C<"a\001c">.
+
 =head2 Broken systems
 
 In certain systems, the operating system's locale support