[EMAIL PROTECTED] (terry jones) writes:

> I know no-one in their right mind would want to do this, but...
>
> The code below produces an unexpected (for me) result. The first call
> to read_script() reports 23 codepoint ranges. The second reports 0.
>
> Regards,
> Terry.
>
> ----------------------------------------------------------------------
> #!/usr/bin/perl -w
>
> use Unicode::UCD 'charscript';
>
> sub read_script {
>     my $script = shift;
>     my $ranges = charscript($script);
>
>     printf "Read script $script. %d ranges exist.\n", scalar(@$ranges);
>     
>     while (my $range = shift @$ranges){
>       printf "%06X -> %06X\n", $$range[0], $$range[1];
>     }
> }
>
> read_script('Latin');
> read_script('Latin');
>

I think, I'd do something like this patch. All tests pass and your
test is fixed. Current bleadperl does return 26 though.

--- [EMAIL PROTECTED]/lib/Unicode/UCD.pm        2003-07-18 08:49:42.000000000 +0200
+++ [EMAIL PROTECTED]/lib/Unicode/UCD.pm        2003-07-18 10:37:57.000000000 +0200
@@ -5,6 +5,8 @@
 
 our $VERSION = '0.2';
 
+use Storable qw(dclone);
+
 require Exporter;
 
 our @ISA = qw(Exporter);
@@ -31,7 +33,7 @@
     my $charblock  = charblock($codepoint);
 
     use Unicode::UCD 'charscript';
-    my $charscript = charblock($codepoint);
+    my $charscript = charscript($codepoint);
 
     use Unicode::UCD 'charblocks';
     my $charblocks = charblocks();
@@ -320,7 +322,7 @@
        _search([EMAIL PROTECTED], 0, $#BLOCKS, $code);
     } else {
        if (exists $BLOCKS{$arg}) {
-           return $BLOCKS{$arg};
+           return dclone $BLOCKS{$arg};
        } else {
            return;
        }
@@ -385,7 +387,7 @@
        _search([EMAIL PROTECTED], 0, $#SCRIPTS, $code);
     } else {
        if (exists $SCRIPTS{$arg}) {
-           return $SCRIPTS{$arg};
+           return dclone $SCRIPTS{$arg};
        } else {
            return;
        }
@@ -407,7 +409,7 @@
 
 sub charblocks {
     _charblocks() unless %BLOCKS;
-    return \%BLOCKS;
+    return dclone \%BLOCKS;
 }
 
 =head2 charscripts
@@ -425,7 +427,7 @@
 
 sub charscripts {
     _charscripts() unless %SCRIPTS;
-    return \%SCRIPTS;
+    return dclone \%SCRIPTS;
 }
 
 =head2 Blocks versus Scripts
@@ -709,7 +711,7 @@
 
     _casespec() unless %CASESPEC;
 
-    return $CASESPEC{$code};
+    return ref $CASESPEC{$code} ? dclone $CASESPEC{$code} : $CASESPEC{$code};
 }
 
 =head2 Unicode::UCD::UnicodeVersion




-- 
andreas

Reply via email to