isxdigit() or iswxdigit()
URI::Escape::XS が Linux(というか、FreeBSD 以外)では動かないようなので patch 書いて RT に上げたのですが、wctype.h の iswxdigit() か ctype.h の isxdigit() のどちらを使うのが本当に正しいのかよくわかりませんでした。XS.xs の ishexnumber() の使い道からすると、"どっちでもいい" が正解なのかなあ。
FreeBSD の man 3 ishexnumber
DESCRIPTION The isxdigit() function tests for any hexadecimal-digit character. Regardless of locale, this includes the following characters only: ``0'' ``1'' ``2'' ``3'' ``4'' ``5'' ``6'' ``7'' ``8'' ``9'' ``A'' ``B'' ``C'' ``D'' ``E'' ``F'' ``a'' ``b'' ``c'' ``d'' ``e'' ``f'' The ishexnumber() function behaves similarly to isxdigit(), but may rec- ognize additional characters, depending on the current locale setting. For single C chars locales (see multibyte(3)) the value of the argument is representable as an unsigned char or the value of EOF. RETURN VALUES The isxdigit() function returns zero if the character tests false and returns non-zero if the character tests true. COMPATIBILITY The 4.4BSD extension of accepting arguments outside of the range of the unsigned char type in locales with large character sets is considered obsolete and may not be supported in future releases. The iswxdigit() function should be used instead.
を読む限りは ishexnumber() の置き換えとしては iswxdigit() がふさわしそうなんだけどなあ。locale によって何がどう変わるのかがわからない。man 3 multibyte も読んだけど難しすぎた...。勉強必要だなあ。