On Sun Dec 07 07:24:07 2008, masak wrote: > The .subst method in Rakudo r33599 can understand :x()... > > $ perl6 -e 'say "foo1foo2foo3foo4".subst("foo", "bar", :x(2))' # yes > bar1bar2foo3foo4 > > ...and :nth()... > > $ perl6 -e 'say "foo1foo2foo3foo4".subst("foo", "bar", :nth(2))' # yes > foo1bar2foo3foo4 > > ...and :g... > > $ perl6 -e 'say "foo1foo2foo3foo4".subst("foo", "bar", :g)' # yes > bar1bar2bar3bar4 > > ...but not :x() together with :nth()... > > $ perl6 -e 'say "foo1foo2foo3foo4".subst("foo", "bar", :x(2), > :nth(2))' # expected foo1bar2foo3bar4 > foo1bar2foo3foo4 > > ...and not :g together with :nth(). > > $ perl6 -e 'say "foo1foo2foo3foo4".subst("foo", "bar", :g, :nth(2))' # > expected foo1bar2foo3bar4 > foo1bar2foo3foo4 > > The above are my personal expectations. The current version of S05 is > silent on how :nth() interacts with :x() and :g. There are spectests > for :g:nth but not (as far as I can see) for :x:nth.
Since your personal expectations are the same as mine, I took the liberty to turn our expectations into spec tests, in t/spec/S05-substitution/subst.t (pugs r24207). The reasoning behind it is quite simple: I imagine :g to mean the same as :x(*). Now a :x($x) and :nth($n) interact like this: for 1 .. $x { match here if ($x-1) % $n == 0 { do substitution } } (CC'ing p6l, since it defines language semantics, albeit just a bit)