If you have glibc (probably yes for Linux or Mac, probably no for Windows), you can call memmem():
use NativeCall; sub memmem(Blob $haystack, size_t $haystacklen, Blob $needle, size_t $needlelen --> Pointer) is native {} sub buf-index(Blob $buffer, Blob $needle) { (memmem($buffer, $buffer.bytes, $needle, $needle.bytes) // return) - nativecast(Pointer, $buffer) } my $buf = Buf.new(0,0,0,1,2,0); my $needle = Buf.new(1,2); say buf-index($buf, $needle); Curt