This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
loc_tools.pl: do a 'require' before module's function call
authorKarl Williamson <khw@cpan.org>
Tue, 27 Jan 2015 18:41:55 +0000 (11:41 -0700)
committerKarl Williamson <khw@cpan.org>
Sat, 7 Feb 2015 17:02:02 +0000 (10:02 -0700)
This was failing to do the require before testing if the function in the
module existed, so if the require hadn't been done by someone else, it
would show as not existing, and so would fail unnecessarily.

The other fix is to not assume the require has been done, so in the
right circumstances, this could have an undefined function error.  But
all current uses had already done the require, so this bug has yet to
show up.

t/loc_tools.pl

index 502af60..6a6cdf4 100644 (file)
@@ -227,6 +227,9 @@ sub is_locale_utf8 ($) { # Return a boolean as to if core Perl thinks the input
     # On z/OS, even locales marked as UTF-8 aren't.
     return 0 if ord "A" != 65;
 
+    eval { require POSIX; import POSIX 'locale_h'; };
+    return 0 if ! defined &POSIX::LC_CTYPE;
+
     my $locale = shift;
 
     use locale;
@@ -272,8 +275,11 @@ sub find_utf8_ctype_locale (;$) { # Return the name of a locale that core Perl
                                   # tries all locales it can find on the
                                   # platform
     my $locales_ref = shift;
-    return if !defined &POSIX::LC_CTYPE;
+
     if (! defined $locales_ref) {
+        eval { require POSIX; import POSIX 'locale_h'; };
+        return if ! defined &POSIX::LC_CTYPE;
+
         my @locales = find_locales(&POSIX::LC_CTYPE(),
                                    1 # Reject iffy locales.
                                   );