Могу ли я предположить, что это неверный вывод?Это легко проверить: замените код цикла на:
my $counter;
while ( $string =~ /(\X)/g ) {
say ++$counter, ': ', $1;
}
... и посмотрите, сколько раз будет соответствовать регулярное выражение.Полагаю, он будет совпадать только один раз.
В качестве альтернативы вы можете использовать этот код:
use Encode;
sub codepoint_hex {
sprintf "%04x", ord Encode::decode("UTF-8", shift);
}
... и затем вывести codepoint_hex ($ 1) вместо простых $ 1 в цикле while..