Wim is correct. Tho, the example given is operating on a globally shared buffer that can have its access inlined to speed things up (vs having to shuffle ;buf and ;cap into the correct place with SWP2). If you had a list of buffers, however, there would be no difference between append(buf[i], str) and buf[i].append(str). As noted, Raku (and also Nim) have Uniform Call Syntax because method invocation is the same as "pass a pointer" outside of static singletons such as this buffer example.
(And many OOP languages that compile to machine code will monomorphize into "pass a pointer to static code" where possible cause it's more efficient than dynamically dispatching on the type of the pointer)