Hi, > my $commasep ='abc,<digit>+'; abc,<digit>+
> say 'abc' ~~ / $( $commasep.split(',') ) /; Nil > say 'abc' ~~ / $( $commasep.split(',')[0] ) /; 「abc」 > say '123' ~~ / $( $commasep.split(',')[1] ) /; Nil > say 'abc' ~~ / $( $commasep.split(',')[0..*] ) /; Nil > say 'abc' ~~ / @( $commasep.split(',') ) /; 「abc」 > say 'abc' ~~ / @( $commasep.split(',')[0] ) /; 「abc」 > say '123' ~~ / @( $commasep.split(',')[1] ) /; Nil say 'abc123' ~~ m:g/ <{ $commasep.split(',') }> / (「abc」 「123」) This is interesting. When you coerce to an Array, Perl6 understands you want a return from any of the regex matches (an alternation). But if you use a List, you can still pull out each individual matching sub-pattern by using a post-circumfix index. Presumably one could Loop through all the sub-patterns generated by a List, to test them individually. As Yary has noted, we see problems (above) as "<digit>+" in string "commasep" does not get interpreted as a pattern. (The last example shows a List inside a block getting matched correctly, although as Simon's code suggests, interpolation may be problematic for characters that require escaping). > my $sepcomma ='abc,123'; abc,123 > say 'abc' ~~ / $( $sepcomma.split(',')[0] ) /; 「abc」 > say '123' ~~ / $( $sepcomma.split(',')[1] ) /; 「123」 > say 'abc123' ~~ / $( $sepcomma.split(',') ) /; Nil > say 'abc123' ~~ m:g/ $( $sepcomma.split(',') ) /; () > say 'abc' ~~ m:g/ @( $sepcomma.split(',') ) /; (「abc」) > say '123' ~~ m:g/ @( $sepcomma.split(',') ) /; (「123」) > say 'abc123' ~~ m:g/ @( $sepcomma.split(',') ) /; (「abc」 「123」) > say 'abc123' ~~ m:g/ <{ $sepcomma.split(',') }> / (「abc」 「123」) Regardless, sticking with a List-parentheses syntax seems to be problematic in that I don't seem to be able to pull out a regex match to "<digit>+", no matter how I alter global matching or indices. String "sepcomma" with a literal "123" gets recognized, while string "commasep" with a "<digit>+" does not get interpreted as a pattern. With "List-parentheses" syntax inside a regex, List elements appear to be interpreted literally. And at this point, it's not clear to me that Array-parentheses "@(code)" syntax behaves any differently. HTH, Bill. On Tue, Sep 3, 2019 at 5:10 AM The Sidhekin <sidhe...@gmail.com> wrote: > > > > On Tue, Sep 3, 2019 at 8:37 AM yary <not....@gmail.com> wrote: >>> >>> I see. And that's discussed here (had to really look for it): >>> https://docs.perl6.org/language/regexes#Quoted_lists_are_LTM_matches >>> At first I was looking further down in the "Regex interpolation" >>> section, where it's also touched on, though I kept missing it: >>> > When an array variable is interpolated into a regex, the regex engine >>> > handles it like a | alternative of the regex elements (see the >>> > documentation on embedded lists, above). >> >> >> Which brings up another area for improvement- maybe. A regexp interprets a >> list as alternation only when it's a literal quoted list < like this >, or >> embedded in the regexp as a @-sigilled variable. >> >> That set up an expectation for me- "oh a list in a regexp becomes an >> alternation of the list elements" - but interpolation meets that expectation >> inconsistently. >> >> The interpolation doc section states, for both forms of code interpolation >> $(code) and <{code}>, "Runs Perl 6 code inside the regex, and interpolates >> the stringified return value..." > > > I missed this the first time (or I would have suggested a version without > the variable), but I think what you want is interpolation by way of @(code). > > eirik@greencat[14:04:06]~$ perl6 > You may want to `zef install Readline` or `zef install Linenoise` or use > rlwrap for a line editor > > To exit type 'exit' or '^D' > > my $comma-separated='abc,<digit>+'; > abc,<digit>+ > > say 'abc' ~~ / @( $comma-separated.split(',') ) /; > 「abc」 > > eirik@greencat[14:05:48]~$ > > I'd argue it's better this way, since syntax has me expecting $(...) to > interpolate a scalar (even if produced from a list), and @(…) to interpolate > a list. > > > Eirik