I think the problem is IO::Socket.read() returns a Blob not a Buf. ~ has a Buf, Buf variant : https://docs.raku.org/language/operators#infix_~
But not a Blob one. Buf does Blob but not vice versa. I think you need to transform the output from .read into a Buf if you want to use the ~= how you want to. Would this work? my Blob $read = Buf.new; $read ~= Buf.new( $socket.read(1024) ); On Tue, 11 Feb 2020 at 10:46, Kevin Pye <kevin....@gmail.com> wrote: > > ~ works fine for concatenating Bufs; For example: > > my $a = Buf.new(1,2,3); > my $b = $a ~ Buf.new(4,5,6) > > will assign correctly to $b. > > I can't work out what the problem is here, despite trying various > combinations. Perhaps socket isn't really returning a Blob? > > Kevin. > > On Tue, 11 Feb 2020 at 21:01, JJ Merelo <jjmer...@gmail.com> wrote: > >> You are using ~, which stringifies. Bufs are not strings: you need to >> decode them to concatenate it to a string. If what you want is to >> concatenate the buffer, probably ,= will work (not sure about this, would >> have to check), or any other operator that works on Positionals. >> >> JJ >> >> El mar., 11 feb. 2020 a las 10:56, David Santiago (<deman...@gmail.com>) >> escribió: >> >>> A 11 de fevereiro de 2020 10:47:34 CET, David Santiago < >>> deman...@gmail.com> escreveu: >>> >A 11 de fevereiro de 2020 09:46:06 CET, David Santiago < >>> deman...@gmail.com> escreveu: >>> >> >>> >>Hi! >>> >> >>> >>Can someone explain me why this doesn't work: >>> >> >>> >>my Blob $read; >>> >>$read ~= $socket.read(1024); >>> >> >>> >>Dies with error: >>> >> >>> >>X::Buf::AsStr: Cannot use a Buf as a string, but you called the >>> Stringy method on it >>> >> >>> >>This also doesn't work: >>> >> >>> >>my Buf $read; >>> >>$read ~= $socket.read(1024); >>> >> >>> >>Dies with the same error as above. >>> >> >>> >> >>> >>But this works? >>> >> >>> >>my Blob $read = Buf.new; >>> >>$read ~= $socket.read(1024); >>> >> >>> >> >>> >>Best regards, >>> >>David Santiago >>> > >>> > >>> >Hi! >>> > >>> >Can someone explain me why this doesn't work: >>> > >>> >my Blob $read; >>> >$read ~= $socket.read(1024); >>> > >>> >Dies with error: >>> > >>> >X::Buf::AsStr: Cannot use a Buf as a string, but you called the Stringy >>> method on it >>> > >>> >This also doesn't work: >>> > >>> >my Buf $read; >>> >$read ~= $socket.read(1024); >>> > >>> >Dies with the same error as above. >>> > >>> > >>> >But this works? >>> > >>> >my Blob $read = Buf.new; >>> >$read ~= $socket.read(1024); >>> > >>> > >>> >Best regards, >>> >David Santiago >>> >>> >>> Hi! >>> >>> Can someone explain me why this doesn't work: >>> >>> my Blob $read; >>> $read ~= $socket.read(1024); >>> >>> Dies with error: >>> >>> X::Buf::AsStr: Cannot use a Buf as a string, but you called the Stringy >>> method on it >>> >>> This also doesn't work: >>> >>> my Buf $read; >>> $read ~= $socket.read(1024); >>> >>> Dies with the same error as above. >>> >>> >>> But this works? >>> >>> my Blob $read = Buf.new; >>> $read ~= $socket.read(1024); >>> >>> >>> Best regards, >>> David Santiago >>> >>> -- >>> Sent from my Android device with K-9 Mail. Please excuse my brevity. >>> >> >> >> -- >> JJ >> > -- Simon Proctor Cognoscite aliquid novum cotidie http://www.khanate.co.uk/