[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