Hi Gianni,

Thank you for demonstrating use of the "Test" module in your code.
Just a short note that Eirik's array-based code seems to work fine,
with-or-without backslash-escaping the first input string (minimal
testing, below):

sub contains( Str $chars, Str $_ ) {
  my @arr = $chars.comb;
  m:g/@arr+/
}

say contains('+\/\]\[', 'Apple ][+//e'); # returns (「][+//」)
say contains('+/][', 'Apple ][+//e'); # returns (「][+//」)

HTH, Bill.




On Mon, Sep 2, 2019 at 10:15 AM Gianni Ceccarelli
<dak...@thenautilus.net> wrote:
>
> On 2019-09-02 The Sidhekin <sidhe...@gmail.com> wrote:
> >   To have the (1-character) strings used a literals, rather than
> > compiled as subrules, put them in an array instead of a block wrapped
> > in angle brackets:
> >
> > sub contains( Str $chars, Str $_ ) {
> >   my @arr = $chars.comb;
> >   m:g/@arr+/
>
> This looks to be the correct solution. Notice that yary's initial code
> had::
>
>   matching_chars('+\/\]\[', 'Apple ][+//e')
>
> but those backslashes are an implementation artefact (the Perl5
> version interpolates the given string into a regex without calling
> ``quotemeta``).
>
> If we remove the backslashes, Sidhekin's code works::
>
>   #!perl6
>   use v6;
>   use Test;
>
>   sub matching_chars(Str $chars_to_match, Str $target) {
>     my @chars-to-match = $chars_to_match.comb;
>     return $target ~~ m:g/@chars-to-match + /;
>   }
>
>   is matching_chars("24680", "19584203"),['8420'];
>   is matching_chars("Lorem ipsum dolor sit amet, consectetueradipiscing 
> elit.",
>                     "abcdef"), ['a','cde'];
>   is matching_chars('+/][', 'Apple ][+//e'),['][+//'];
>   is matching_chars('24680', '19584203'),['8420'];
>   is matching_chars('24680', '24680x'),['24680'];
>   is matching_chars('246','13 91 1462 7'),['462'];
>
>   done-testing;
>
> --
>         Dakkar - <Mobilis in mobile>
>         GPG public key fingerprint = A071 E618 DD2C 5901 9574
>                                      6FE2 40EA 9883 7519 3F88
>                             key id = 0x75193F88
>
> Just because it's not nice doesn't mean it's not miraculous.
>         -- (Terry Pratchett, Interesting Times)

Reply via email to