On 2/1/19 8:03 PM, ToddAndMargo via perl6-users wrote:
 > On Fri, Feb 1, 2019 at 9:37 PM ToddAndMargo via perl6-users
 > <perl6-us...@perl.org> wrote:
 >>
 >> On 2/1/19 7:22 PM, ToddAndMargo via perl6-users wrote:
 >>> Hi All,
 >>>
 >>> On a type Buf, what do I use to check for the
 >>> position of a byte pattern?
 >>>
 >>>
 >>> Many thanks,
 >>> -T
 >>
 >>
 >> Basically, what am I doing wrong here?
 >>
 >> $ p6 'my $handle=open("filever.exe", :bin, :ro); my Buf $b; $b=
 >> $handle.read(5); say $b; say $b[2..4];; if ( $b[2..4] eq 0x90,0x00,0x04
 >> ) {say "y";} else {say "n"}; $handle.close;'
 >> Buf[uint8]:0x<4D 5A 90 00 03>
 >> (144 0 3)
 >> y
 >>
 >>
 >> I am testing to see if the pattern 0x90 0x00 0x04 exists,
 >> which is does not.


On 2/1/19 7:57 PM, Brad Gilbert wrote:
`eq` is string equality
`==` is numeric equality

a Buf is neither.

You want `eqv` (equivalent)

     $b[2..4] eqv (0x90,0x00,0x04)


That was it.  Thank you!

$ p6 'my $handle=open("filever.exe", :bin, :ro); my Buf $b; $b= $handle.read(5); say $b; if ( $b[2..4] eqv (0x90,0x00,0x03) ) {say "y";} else {say "n"}; $handle.close;'
Buf[uint8]:0x<4D 5A 90 00 03>
y

$ p6 'my $handle=open("filever.exe", :bin, :ro); my Buf $b; $b= $handle.read(5); say $b; if ( $b[2..4] eqv (0x90,0x00,0x04) ) {say "y";} else {say "n"}; $handle.close;'
Buf[uint8]:0x<4D 5A 90 00 03>
n


How do I find the position of a pattern in a Buf?

Reply via email to