From: Jarkko Hietaniemi Date: Sat, 1 Dec 2001 15:40:13 +0000 (+0000) Subject: Add simple caches for ::viacode() and ::vianame(). X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=4e2cda5de1463f636caa8d7626a38efc5bdd4d8d;p=p5sagit%2Fp5-mst-13.2.git Add simple caches for ::viacode() and ::vianame(). p4raw-id: //depot/perl@13399 --- diff --git a/lib/charnames.pm b/lib/charnames.pm index 5554ae0..ec200ec 100644 --- a/lib/charnames.pm +++ b/lib/charnames.pm @@ -123,6 +123,8 @@ sub import } } +my %viacode; + sub viacode { if (@_ != 1) { @@ -139,15 +141,19 @@ sub viacode return; } + return $viacode{$hex} if exists $viacode{$hex}; + $txt = do "unicore/Name.pl" unless $txt; if ($txt =~ m/^$hex\t\t(.+)/m) { - return $1; + return $viacode{$hex} = $1; } else { return; } } +my %vianame; + sub vianame { if (@_ != 1) { @@ -157,10 +163,12 @@ sub vianame my $arg = shift; + return $vianame{$arg} if exists $vianame{$arg}; + $txt = do "unicore/Name.pl" unless $txt; if ($txt =~ m/^([0-9A-F]+)\t\t($arg)/m) { - return hex $1; + return $vianame{$arg} = hex $1; } else { return; } @@ -213,7 +221,7 @@ is ignored. Note that C<\N{...}> is compile-time, it's a special form of string constant used inside double-quoted strings: in other words, you cannot -used variables inside the C<\N{...}>. If you want similar run-time +use variables inside the C<\N{...}>. If you want similar run-time functionality, use charnames::vianame(). =head1 CUSTOM TRANSLATORS diff --git a/lib/charnames.t b/lib/charnames.t index ce712c3..adc4b3f 100644 --- a/lib/charnames.t +++ b/lib/charnames.t @@ -8,7 +8,7 @@ BEGIN { } $| = 1; -print "1..20\n"; +print "1..22\n"; use charnames ':full'; @@ -146,3 +146,15 @@ sub to_bytes { defined charnames::vianame("NONE SUCH"); print "ok 20\n"; } + +{ + # check that caching at least hasn't broken anything + + print "not " unless charnames::viacode(0x1234) eq "ETHIOPIC SYLLABLE SEE"; + print "ok 21\n"; + + print "not " unless + sprintf "%04X\n", charnames::vianame("GOTHIC LETTER AHSA") eq "10330"; + print "ok 22\n"; + +}