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
>
>
>
> --
> __________________
>
> :(){ :|:& };:

Reply via email to