use strict;
use warnings;
use File::Spec;
-our $VERSION = '1.04_1';
+our $VERSION = '1.05';
use bytes (); # for $bytes::hint_bits
-$charnames::hint_bits = 0x20000; # HINT_LOCALIZE_HH
my %alias1 = (
# Icky 3.2 names with parentheses.
if (not @_) {
carp("`use charnames' needs explicit imports list");
}
- $^H |= $charnames::hint_bits;
$^H{charnames} = \&charnames ;
##
}
} # import
-# this comes actually from Unicode::UCD, but it avoids the
-# overhead of loading it
-sub _getcode {
- my $arg = shift;
-
- if ($arg =~ /^[1-9]\d*$/) {
- return $arg;
- } elsif ($arg =~ /^(?:[Uu]\+|0[xX])?([[:xdigit:]]+)$/) {
- return hex($1);
- }
-
- return;
-}
-
my %viacode;
sub viacode
{
if (@_ != 1) {
carp "charnames::viacode() expects one argument";
- return ()
+ return;
}
my $arg = shift;
- my $code = _getcode($arg);
+ # this comes actually from Unicode::UCD, where it is the named
+ # function _getcode (), but it avoids the overhead of loading it
my $hex;
-
- if (defined $code) {
+ if ($arg =~ /^[1-9]\d*$/) {
$hex = sprintf "%04X", $arg;
+ } elsif ($arg =~ /^(?:[Uu]\+|0[xX])?([[:xdigit:]]+)$/) {
+ $hex = $1;
} else {
carp("unexpected arg \"$arg\" to charnames::viacode()");
return;
}
- if ($code > 0x10FFFF) {
+ # checking the length first is slightly faster
+ if (length($hex) > 5 && hex($hex) > 0x10FFFF) {
carp sprintf "Unicode characters only allocated up to U+10FFFF (you asked for U+%X)", $hex;
return;
}
$txt = do "unicore/Name.pl" unless $txt;
- if ($txt =~ m/^$hex\t\t(.+)/m) {
- return $viacode{$hex} = $1;
- } else {
- return;
- }
+ return unless $txt =~ m/^$hex\t\t(.+)/m;
+
+ $viacode{$hex} = $1;
} # viacode
my %vianame;
translations (inside the scope which C<use>s the module) with the
following magic incantation:
- use charnames (); # for $charnames::hint_bits
sub import {
shift;
- $^H |= $charnames::hint_bits;
$^H{charnames} = \&translator;
}