Could you retry with the input "देवनागरीदेवनागरी"?
sub MAIN($s) {
say "{$s.chars}: $s";
my $b = $s.substr(0,12);
say "{$b.chars}: $b";
}
$ perl6 hn-test2.p6 देवनागरीदेवनागरी
16: देवनागरीदेवनागरी
12: देवनागरीदेवनThe new string is composed of 10 user-visible characters (5 character repeated twice) but 16 codepoints (and this time I carefully checked that there was no precomposed version):
DEVANAGARI LETTER DA
DEVANAGARI VOWEL SIGN E
DEVANAGARI LETTER VA
DEVANAGARI LETTER NA
DEVANAGARI VOWEL SIGN AA
DEVANAGARI LETTER GA
DEVANAGARI LETTER RA
DEVANAGARI VOWEL SIGN II
DEVANAGARI LETTER DA
DEVANAGARI VOWEL SIGN E
DEVANAGARI LETTER VA
DEVANAGARI LETTER NA
DEVANAGARI VOWEL SIGN AA
DEVANAGARI LETTER GA
DEVANAGARI LETTER RA
DEVANAGARI VOWEL SIGN II
Operating on codepoints, both versions cut after the second DEVANAGARI LETTER NA (न) breaking that grapheme cluster (it should be ना) and not displaying the final two clusters ग and री.Yes and no. Yes, because the in-development Rakudo compiler is clearly currently giving the wrong result, and no because it operates on grapheme clusters (but has bugs).
(You can work with codepoints if you really want to but the normal string/character functions that use the normal string type, Str, work -- or more accurately are supposed to work -- on the assumption that "character" == grapheme cluster; afaik it's supposed to match the Unicode default Extended Grapheme Cluster specification.)
Fwiw I've filed a bug: https://rt.perl.org/Ticket/Display.html?id=125927
I don't think so. In my tests standard python (2.7 and 3.5) ignores grapheme clusters.