Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

PGE: return values in embedded closures

0 views
Skip to first unread message

Patrick R. Michaud

unread,
Mar 17, 2006, 8:08:55 PM3/17/06
to perl6-i...@perl.org, perl6-c...@perl.org
I've just applied a change (r11921) to PGE that allows
embedded closures in rules to designate a "return value" for
a match (recently added to S05).

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

0 new messages