> On 14 Mar 2017, at 02:04, ToddAndMargo <toddandma...@zoho.com> wrote: > On 03/13/2017 02:21 PM, Elizabeth Mattijsen wrote: >>> On 13 Mar 2017, at 22:17, ToddAndMargo <toddandma...@zoho.com> wrote: >>> I adore this feature of loops: >>> >>> perl6 -e 'my @x=qw[a b z y]; >>> for @x -> $a, $b { say "<$a> <$b>" };' >>> >>> <a> <b> >>> <z> <y> >>> >>> >>> because I can preassign a names to "$_". >>> >>> Question: in a pattern match such as: >>> >>> perl6 -e 'my $x="ab12cd"; >>> $x ~~ m/(ab)(12)(cd)/; >>> say "$x\n\$0=<$0>\t\$1=<$1>\t\$2=<$2>\n";' >>> >>> ab12cd >>> $0=<ab> $1=<12> $2=<cd> >>> >>> Is there a similar way to preassign names to >>> "$0", "$1", "$2" ? >> >> $/[$n] > The answer is "no" to predefined variables, but as > Liz points out, there is a bit of a work around: > > Note: the name of the variable is $<a> not $a > > perl6 -e 'my $x="ab12cd"; $x ~~ m/$<a>=(ab) $<b>=(12) $<c>=(cd)/; > say "$x\n\$a=<$<a>>\t\$b=<$<b>>\t\$c=<$<c>>\n";' > > ab12cd > $a=<ab> $b=<12> $c=<cd> > > I might be more readable to stick with $0, etc, as > you have to assign the <> variables to predefined > variables anyway
You can also slice $/: $ 6 'my $x=“ab12cd”; say "$<a b c>” if $x ~~ m/$<a>=(ab) $<b>=(12) $<c>=(cd)/' ab 12 cd Please note that I put the slice between double quotes, otherwise you will see the gist of Match objects: $ 6 'my $x=“ab12cd”; say $<a b c> if $x ~~ m/$<a>=(ab) $<b>=(12) $<c>=(cd)/' (「ab」 「12」 「cd」) HTH Liz