Если вас беспокоит ширина Unicode - включая восточноазиатские материалы и комбинирование символов, контрольных кодов и всего остального - и printf
, то правильный ответ - вам нужен метод columns
из Unicode :: GCString Модуль CPAN.
use Unicode::GCString;
my $gcs = Unicode::GCString->new($str);
my $cols = $gcs->columns;
printf "%*s\n", $cols, $str;
Другие примеры включают это, чтобы получить длину графемы строки:
use Unicode::GCString;
$gcs = Unicode::GCString->new($str);
my $count = $gcs->length;
Это, чтобы перевернуть строку по графеме:
use Unicode::GCString;
$str = reverse Unicode::GCString->new($str);
И эточтобы получить доступ к подстрокам с помощью графемы:
use Unicode::GCString;
my $gcs = Unicode::GCString->new($str);
my $piece = $gcs->substr(5, 5);
Я прошу прощения, что это не в ядре Perl.Тем не менее.