Perl6 имеет встроенную поддержку Unicode, с родной Uni и NFC/NFD/NFKC/NFKD нормированные типов.
Что я смутно понимаю, что метод Unicode :: GCString :: columns определяет поддержку линейного языка восточноазиатского языка. 合 состоит из 2 "слогов" (они называют это «графем кластерами») друг на друга, таким образом, 2 столбца.
Это означает, что perl6 внутри (на уровне MoarVM) имеет доступ к базе данных юникода, где хранятся свойства linebreaking, но, насколько мне известно, в настоящее время нет модуля, такого как Unicode :: UCD, доступного для создания свойств East_Asian_Width для чего-то вроде Unicode :: GCString.
С другой стороны, преобразование Unicode :: LineBreak в perl6 выглядит достаточно легко, доступ к библиотеке sombok через NativeCall.
Упрощенный, потому что Рейни делает ключевое слово - делая все, что нужно, чтобы попытаться с пользой переместить эту проблему вперед. Сначала я публикую этот комментарий, чтобы уравновесить то, что я сейчас скажу. – raiph
Графема - это то, что человек обычно называет одним персонажем. Итак, 合 одна графема, а не две. Таким образом, используя недавний Rakudo, «say» 合 «.chars.say» возвращает 1. – raiph
Вещь, лежащая в основе рассматриваемой функции столбцов, является «понятием присущей ширине символа [восточно-азиатский]. Эта ширина принимает либо двух значений: узких или широких ». (от http://www.unicode.org/reports/tr11/tr11-29.html) – raiph