sub buf-index ( Buf $buf, +@match ) { my $elems = @match.elems; $buf.rotor( $elems => 1 - $elems ).first(* eqv @match.List, :k) }
my $buf = Buf[uint8].new(0x4D, 0x5A, 0x90, 0x00, 0x03); say buf-index( $buf, (0x90, 0x00, 0x03)); # 2 On Fri, Feb 1, 2019 at 11:02 PM ToddAndMargo via perl6-users <perl6-us...@perl.org> wrote: > > On 2/1/19 8:26 PM, ToddAndMargo via perl6-users wrote: > > On 2/1/19 8:07 PM, ToddAndMargo via perl6-users wrote: > >> 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? > > > > Need `pos` for Buf > > Actually I do believe it is the binary equivalent of `index` I > am looking for > > -- > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > Computers are like air conditioners. > They malfunction when you open windows > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~