Есть одна возможность, и это тот, кто сделал это, не хочет, чтобы вы расширили любые классы. Вы всегда можете сделать обходной путь, но это единственное, что я могу придумать, что имеет смысл.
Лучший ответ - использовать Unicode :: GCString , , как указывает Синан
Я изменил Немного о примере Часа:
split
(не работают после 5.10, видимо, поэтому я удалил его) Это в основном то же самое, но с парой настроек.
use strict;
use warnings;
binmode STDOUT, ":utf8";
my $original = "re\x{0301}sume\x{0301}";
my $wrong = reverse $original;
my $right = join '', reverse split /(\X)/, $original;
print <<HERE;
original: [$original]
wrong: [$wrong]
right: [$right]
HERE
Perl6:: ул. ->reverse
также работы.
В случае строки résumé
, можно также использовать Unicode::Normalize
базовый модуль, чтобы поменять струну к полностью составленной форме (NFC
или NFKC
) прежде reverse
луг; однако, это не общее решение, потому что некоторые комбинации основного символа и модификатора не имеют никакой предсоставленной кодовой точки Unicode.
Вы можете использовать \ X специальный escape (сопоставить некомбинирующий символ и все следующие комбинируемые символы) с split
, чтобы создать список графем (с пустыми строками между ними), переверните список графем, затем объедините
их обратно вместе:
#!/usr/bin/perl
use strict;
use warnings;
my $original = "re\x{0301}sume\x{0301}";
my $wrong = reverse $original;
my $right = join '', reverse split /(\X)/, $original;
print "original: $original\n",
"wrong: $wrong\n",
"right: $right\n";