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/

Reply via email to