Essentially this means that a rule such as
/:lang(PIR) foo {{ .return "bar" }} /
will match a string containing "foo" but gives the returned match
object a value of "bar".
We can also do things such as
/:lang(PIR) \d+ {{ # return 200 more than matched
$I0 = match
$I0 += 200
.return ($I0) }} /
/:lang(PIR) <moose> {{
$P0 = match["moose"] # get subpattern match
$P1 = "Moose_new"($P0) # create a new Moose object from it
.return ($P0) }} / # and return that as the Match value
To obtain the return value of a Match object, use the value() method:
match = rule(string) # match string against rule
$P0 = match.value()
If a match object doesn't have an explicit return value, then
its value is the substring that it matched.
There are some small examples in t/compilers/pge/p6rules/closure.t .
Comments, questions and tests welcomed.
Pm