Simplify Unicode::UCD::openunicode() and callers
authorDagfinn Ilmari Mannsåker <ilmari@ilmari.org>
Thu, 28 Dec 2017 17:24:43 +0000 (17:24 +0000)
committerDagfinn Ilmari Mannsåker <ilmari@ilmari.org>
Thu, 28 Dec 2017 18:06:51 +0000 (18:06 +0000)
Get rid of the file-global filehandles and the unused filename return
value, instead return the filehandle and assign it to a lexical
variable.  Also don't bother checking the return value; it croaks on
failure anyway.

In passing, eliminate erroneous assignment of {} to %CASESPEC for
Unicode < 2.1.8.

charclass_invlists.h
lib/Unicode/UCD.pm
regcharclass.h

index 0c2e8b5..6247527 100644 (file)
@@ -109344,7 +109344,7 @@ static const U8 WB_table[24][24] = {
 #endif /* defined(PERL_IN_REGEXEC_C) */
 
 /* Generated from:
- * 0512c6af7435cd0cb3482d76f1ce75e6a310694d3f3dbf9091678b785a7e72e5 lib/Unicode/UCD.pm
+ * 4d64b650346ff9ddbcd3986f0da13f3be2379d64c574a120ca7f534d8d17934c lib/Unicode/UCD.pm
  * ff4404ec64f308bdf7714c50f9fdf0d1d0bf3c34db4d0a67e58ef0c6f88e818f lib/unicore/ArabicShaping.txt
  * 292171a0a1c13d7e581e8781eb4cdf248243b1ab267354a63c7a14429dea2740 lib/unicore/BidiBrackets.txt
  * 8f2695cc42989a79a715ab0d2892bd0c998759180cfdfb998674447f48231940 lib/unicore/BidiMirroring.txt
index 2021680..6733e11 100644 (file)
@@ -140,28 +140,18 @@ Note that the largest code point in Unicode is U+10FFFF.
 
 =cut
 
-my $BLOCKSFH;
-my $VERSIONFH;
-my $CASEFOLDFH;
-my $CASESPECFH;
-my $NAMEDSEQFH;
 my $v_unicode_version;  # v-string.
 
 sub openunicode {
-    my ($rfh, @path) = @_;
-    my $f;
-    unless (defined $$rfh) {
-       for my $d (@INC) {
-           use File::Spec;
-           $f = File::Spec->catfile($d, "unicore", @path);
-           last if open($$rfh, '<', $f);
-           undef $f;
-       }
-       croak __PACKAGE__, ": failed to find ",
-              File::Spec->catfile(@path), " in @INC"
-           unless defined $f;
+    my (@path) = @_;
+    my $rfh;
+    for my $d (@INC) {
+        use File::Spec;
+        my $f = File::Spec->catfile($d, "unicore", @path);
+        return $rfh if open($rfh, '<', $f);
     }
-    return $f;
+    croak __PACKAGE__, ": failed to find ",
+        File::Spec->catfile("unicore", @path), " in @INC";
 }
 
 sub _dclone ($) {   # Use Storable::dclone if available; otherwise emulate it.
@@ -880,10 +870,11 @@ sub _charblocks {
             push @BLOCKS, $subrange;
             push @{$BLOCKS{'No_Block'}}, $subrange;
         }
-        elsif (openunicode(\$BLOCKSFH, "Blocks.txt")) {
+        else {
+            my $blocksfh = openunicode("Blocks.txt");
            local $_;
            local $/ = "\n";
-           while (<$BLOCKSFH>) {
+           while (<$blocksfh>) {
 
                 # Old versions used a different syntax to mark the range.
                 $_ =~ s/;\s+/../ if $v_unicode_version lt v3.1.0;
@@ -895,7 +886,6 @@ sub _charblocks {
                    push @{$BLOCKS{$3}}, $subrange;
                }
            }
-           close($BLOCKSFH);
             if (! IS_ASCII_PLATFORM) {
                 # The first two blocks, through 0xFF, are wrong on EBCDIC
                 # platforms.
@@ -1648,13 +1638,11 @@ my %CASESPEC;
 sub _casespec {
     unless (%CASESPEC) {
         UnicodeVersion() unless defined $v_unicode_version;
-        if ($v_unicode_version lt v2.1.8) {
-            %CASESPEC = {};
-        }
-       elsif (openunicode(\$CASESPECFH, "SpecialCasing.txt")) {
+        if ($v_unicode_version ge v2.1.8) {
+            my $casespecfh = openunicode("SpecialCasing.txt");
            local $_;
            local $/ = "\n";
-           while (<$CASESPECFH>) {
+           while (<$casespecfh>) {
                if (/^([0-9A-F]+); ([0-9A-F]+(?: [0-9A-F]+)*)?; ([0-9A-F]+(?: [0-9A-F]+)*)?; ([0-9A-F]+(?: [0-9A-F]+)*)?; (\w+(?: \w+)*)?/) {
 
                    my ($hexcode, $lower, $title, $upper, $condition) =
@@ -1719,7 +1707,6 @@ sub _casespec {
                    }
                }
            }
-           close($CASESPECFH);
        }
     }
 }
@@ -1769,19 +1756,17 @@ my %NAMEDSEQ;
 
 sub _namedseq {
     unless (%NAMEDSEQ) {
-       if (openunicode(\$NAMEDSEQFH, "Name.pl")) {
-           local $_;
-           local $/ = "\n";
-           while (<$NAMEDSEQFH>) {
-               if (/^ [0-9A-F]+ \  /x) {
-                    chomp;
-                    my ($sequence, $name) = split /\t/;
-                   my @s = map { chr(hex($_)) } split(' ', $sequence);
-                   $NAMEDSEQ{$name} = join("", @s);
-               }
-           }
-           close($NAMEDSEQFH);
-       }
+        my $namedseqfh = openunicode("Name.pl");
+        local $_;
+        local $/ = "\n";
+        while (<$namedseqfh>) {
+            if (/^ [0-9A-F]+ \  /x) {
+                chomp;
+                my ($sequence, $name) = split /\t/;
+                my @s = map { chr(hex($_)) } split(' ', $sequence);
+                $NAMEDSEQ{$name} = join("", @s);
+            }
+        }
     }
 }
 
@@ -4121,10 +4106,9 @@ my $UNICODEVERSION;
 
 sub UnicodeVersion {
     unless (defined $UNICODEVERSION) {
-       openunicode(\$VERSIONFH, "version");
+       my $versionfh = openunicode("version");
        local $/ = "\n";
-       chomp($UNICODEVERSION = <$VERSIONFH>);
-       close($VERSIONFH);
+       chomp($UNICODEVERSION = <$versionfh>);
        croak __PACKAGE__, "::VERSION: strange version '$UNICODEVERSION'"
            unless $UNICODEVERSION =~ /^\d+(?:\.\d+)+$/;
     }
index 5f3c07f..36c9d5e 100644 (file)
 #endif /* PERL_REGCHARCLASS_H_ */
 
 /* Generated from:
- * 0512c6af7435cd0cb3482d76f1ce75e6a310694d3f3dbf9091678b785a7e72e5 lib/Unicode/UCD.pm
+ * 4d64b650346ff9ddbcd3986f0da13f3be2379d64c574a120ca7f534d8d17934c lib/Unicode/UCD.pm
  * ff4404ec64f308bdf7714c50f9fdf0d1d0bf3c34db4d0a67e58ef0c6f88e818f lib/unicore/ArabicShaping.txt
  * 292171a0a1c13d7e581e8781eb4cdf248243b1ab267354a63c7a14429dea2740 lib/unicore/BidiBrackets.txt
  * 8f2695cc42989a79a715ab0d2892bd0c998759180cfdfb998674447f48231940 lib/unicore/BidiMirroring.txt