>> But yeah, the Str class in Raku is much more than a C-string. Got it. Thanks Elizabeth.
On Wed, Jun 9, 2021 at 6:45 AM Elizabeth Mattijsen <l...@dijkmat.nl> wrote: > > On 9 Jun 2021, at 06:34, Paul Procacci <pproca...@gmail.com> wrote: > > > > Hopefully a pretty quick question.... > > > > GIven the following: > > > > my Buf $b .= new([72, 105, 0, 32, 97, 103, 97, 105, 110, 0]); > > say $b.decode; > > > > I would expect this to print 'Hi'. > > Instead it prints 'Hi again'. > > > > https://docs.raku.org/type/Buf#(Blob)_method_decode > > > > The decode documentation for Buf only states that 'Applies an encoding > to turn the blob into a Str; the encoding will be UTF-8 by default.' > > > > > The zero (0) in that Buf should imply an end of string yet decode seems > to want to decode the number of elements instead. > > That is an incorrect assumption carried over from C. In the Raku > Programming Language, a null byte is a valid grapheme, as it is in > unicode. A small change to your program: > > my Buf $b .= new(72, 105, 0, 32, 97, 103, 97, 105, 110, 0); > .say for $b.decode.uninames; > ##### > LATIN CAPITAL LETTER H > LATIN SMALL LETTER I > <control-0000> > SPACE > LATIN SMALL LETTER A > LATIN SMALL LETTER G > LATIN SMALL LETTER A > LATIN SMALL LETTER I > LATIN SMALL LETTER N > <control-0000> > > > > Furthermore, If I 'say $b.decode.chars;' it counts the initial null as > part of Str. > > In my mind, that means Str doesn't really mean string. > > I don't see an initial null in your example. > > But yeah, the Str class in Raku is much more than a C-string. > > > > So the question, how does one ACTUALLY decode what's in a buffer to a > string where it adheres to the semantics of NULL termination for strings > cleanly. > > If you want to include the null byte in your final strings: > > my @strings = $b.decode.comb(/ .*? "\0" /) > > would be a way. > > > > > Another question might be, should decode() follow null terminating > semantics instead of number of elements in a given Buf. > > No. The C-string semantics are what they are. They are not the semantics > used in the Raku Programming Language. > > > > Liz -- __________________ :(){ :|:& };: