}
}
+my %viacode;
+
sub viacode
{
if (@_ != 1) {
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) {
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;
}
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
}
$| = 1;
-print "1..20\n";
+print "1..22\n";
use charnames ':full';
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";
+
+}