Merge simple tied handle method calls into S_tied_handle_method().
[p5sagit/p5-mst-13.2.git] / lib / I18N / Collate.pm
index d012fcc..decc86c 100644 (file)
@@ -1,5 +1,8 @@
 package I18N::Collate;
 
+use strict;
+our $VERSION = '1.01';
+
 =head1 NAME
 
 I18N::Collate - compare 8-bit scalar data according to the current locale
@@ -8,11 +11,28 @@ I18N::Collate - compare 8-bit scalar data according to the current locale
 
     use I18N::Collate;
     setlocale(LC_COLLATE, 'locale-of-your-choice'); 
-    $s1 = new I18N::Collate "scalar_data_1";
-    $s2 = new I18N::Collate "scalar_data_2";
+    $s1 = I18N::Collate->new("scalar_data_1");
+    $s2 = I18N::Collate->new("scalar_data_2");
 
 =head1 DESCRIPTION
 
+  ***
+
+  WARNING: starting from the Perl version 5.003_06
+  the I18N::Collate interface for comparing 8-bit scalar data
+  according to the current locale
+
+       HAS BEEN DEPRECATED
+
+  That is, please do not use it anymore for any new applications
+  and please migrate the old applications away from it because its
+  functionality was integrated into the Perl core language in the
+  release 5.003_06.
+
+  See the perllocale manual page for further information.
+
+  ***
+
 This module provides you with objects that will collate 
 according to your national character set, provided that the 
 POSIX setlocale() function is supported on your system.
@@ -23,30 +43,29 @@ You can compare $s1 and $s2 above with
 
 to extract the data itself, you'll need a dereference: $$s1
 
-This uses POSIX::setlocale(). The basic collation conversion is done by
-strxfrm() which terminates at NUL characters being a decent C routine.
-collate_xfrm() handles embedded NUL characters gracefully.  Due to C<cmp>
-and overload magic, C<lt>, C<le>, C<eq>, C<ge>, and C<gt> work also.  The
-available locales depend on your operating system; try whether C<locale
--a> shows them or man pages for "locale" or "nlsinfo" or
-the direct approach C<ls /usr/lib/nls/loc> or C<ls
-/usr/lib/nls>.  Not all the locales that your vendor supports
-are necessarily installed: please consult your operating system's
-documentation and possibly your local system administration.
+This module uses POSIX::setlocale(). The basic collation conversion is
+done by strxfrm() which terminates at NUL characters being a decent C
+routine.  collate_xfrm() handles embedded NUL characters gracefully.
 
-The locale names are probably something like
-C<"xx_XX.(ISO)?8859-N"> or C<"xx_XX.(ISO)?8859N">, for example
-C<"fr_CH.ISO8859-1"> is the Swiss (CH) variant of French (fr),
-ISO Latin (8859) 1 (-1) which is the Western European character set.
+The available locales depend on your operating system; try whether
+C<locale -a> shows them or man pages for "locale" or "nlsinfo" or the
+direct approach C<ls /usr/lib/nls/loc> or C<ls /usr/lib/nls> or
+C<ls /usr/lib/locale>.  Not all the locales that your vendor supports
+are necessarily installed: please consult your operating system's
+documentation and possibly your local system administration.  The
+locale names are probably something like C<xx_XX.(ISO)?8859-N> or
+C<xx_XX.(ISO)?8859N>, for example C<fr_CH.ISO8859-1> is the Swiss (CH)
+variant of French (fr), ISO Latin (8859) 1 (-1) which is the Western
+European character set.
 
 =cut
 
 # I18N::Collate.pm
 #
-# Author:      Jarkko Hietaniemi <Jarkko.Hietaniemi@hut.fi>
+# Author:      Jarkko Hietaniemi <F<jhi@iki.fi>>
 #              Helsinki University of Technology, Finland
 #
-# Acks:                Guy Decoux <decoux@moulon.inra.fr> understood
+# Acks:                Guy Decoux <F<decoux@moulon.inra.fr>> understood
 #              overloading magic much deeper than I and told
 #              how to cut the size of this code by more than half.
 #              (my first version did overload all of lt gt eq le ge cmp)
@@ -62,8 +81,8 @@ ISO Latin (8859) 1 (-1) which is the Western European character set.
 #
 # Usage:       use I18N::Collate;
 #              setlocale(LC_COLLATE, 'locale-of-your-choice'); # 4)
-#              $s1 = new I18N::Collate "scalar_data_1";
-#              $s2 = new I18N::Collate "scalar_data_2";
+#              $s1 = I18N::Collate->("scalar_data_1");
+#              $s2 = I18N::Collate->("scalar_data_2");
 #              
 #              now you can compare $s1 and $s2: $s1 le $s2
 #              to extract the data itself, you need to deref: $$s1
@@ -87,24 +106,56 @@ ISO Latin (8859) 1 (-1) which is the Western European character set.
 #                 variant of French (fr), ISO Latin (8859) 1 (-1)
 #                 which is the Western European character set.
 #
-# Updated:     19960104 1946 GMT
+# Updated:     19961005
 #
 # ---
 
 use POSIX qw(strxfrm LC_COLLATE);
+use warnings::register;
 
 require Exporter;
 
-@ISA = qw(Exporter);
-@EXPORT = qw(collate_xfrm setlocale LC_COLLATE);
-@EXPORT_OK = qw();
+our @ISA = qw(Exporter);
+our @EXPORT = qw(collate_xfrm setlocale LC_COLLATE);
+our @EXPORT_OK = qw();
 
-%OVERLOAD = qw(
+use overload qw(
 fallback       1
 cmp            collate_cmp
 );
 
-sub new { my $new = $_[1]; bless \$new }
+our($LOCALE, $C);
+
+our $please_use_I18N_Collate_even_if_deprecated = 0;
+sub new {
+  my $new = $_[1];
+
+  if (warnings::enabled() && $] >= 5.003_06) {
+    unless ($please_use_I18N_Collate_even_if_deprecated) {
+      warnings::warn <<___EOD___;
+***
+
+  WARNING: starting from the Perl version 5.003_06
+  the I18N::Collate interface for comparing 8-bit scalar data
+  according to the current locale
+
+       HAS BEEN DEPRECATED
+
+  That is, please do not use it anymore for any new applications
+  and please migrate the old applications away from it because its
+  functionality was integrated into the Perl core language in the
+  release 5.003_06.
+
+  See the perllocale manual page for further information.
+
+***
+___EOD___
+      $please_use_I18N_Collate_even_if_deprecated++;
+    }
+  }
+
+  bless \$new;
+}
 
 sub setlocale {
  my ($category, $locale) = @_[0,1];