Hi Yary and Paul and Simon, I ran into the same difficulties as Yary with repeated characters, so I tried the .unique method. Then after a while, I realized that problems like this might best be treated as "Set" problems in Perl6. Note the Set Intersection operator "(&)" below:
sub matching_chars(Str $a, Str $b) { my @c = $a.comb.unique; my @d = $b.comb.unique; #say @c; say @d; return @c (&) @d; } say matching_chars("24680", "19584203"); #RETURNS set(0 2 4 8) say matching_chars('+\/\]\[', 'Apple ][+//e'); #RETURNS set(+ / [ ]) https://docs.perl6.org/routine/Set https://docs.perl6.org/language/operators#infix_(&),_infix_∩ HTH, Bill. On Sat, Aug 31, 2019 at 8:59 PM Paul Procacci <pproca...@gmail.com> wrote: > > I'm not entirely sure if this is the correct answer, but if you define your > own custom character class > with a 'regex' object, you can use that in the grouping. > > sub matching_chars(Str $chars_to_match, Str $_) { > my regex x { $chars_to_match ** 1 }; > m/<[<x>]>/; > } > > The above worked for me in the very small testing I did. > > ~Paul > > On Sat, Aug 31, 2019 at 9:54 PM yary <not....@gmail.com> wrote: >> >> I found something easy in Perl 5 that's puzzling me in Perl 6- specifying a >> character class via a variable. >> >> Perl 5: >> sub matching_chars { >> (my $chars_to_match, local $_) = @_; >> /([$chars_to_match]+)/ >> } >> >> say matching_chars('24680', '19584203'); # says 8420 >> say matching_chars('+\/\]\[', 'Apple ][+//e'); # says ][+// >> >> Perl 6: >> sub matching_chars(Str $chars_to_match, Str $_) { >> # warnings, treats as string not variable >> m/<[$chars_to_match]>/; >> } >> >> How do I get Perl 6 to interpret a variable in the contents of a character >> class? >> From http://docs.perl6.org/language/regexes#Regex_interpolation I'd think >> that Rakudo would use the literal contents of $chars_to_match, instead it's >> using the literal chars "$ c h a r s _ t o _ m a t c h" and warning about >> repeated c, underscore, etc. >> >> -y > > > > -- > __________________ > > :(){ :|:& };: