> 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
>>
On 2/2/19 6:09 AM, Brad Gilbert wrote:
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
Hi Brad,
Thank you!
Did you forget the "return" in the sub?
And, would this be faster or slower than converting to
a string and using "index"?
-T