On Thu, Dec 04, 2008 at 07:00:55PM +0100, Moritz Lenz wrote:
> GW wrote:
> > I found something that could be problematic (haven't yet found out if it
> > should be a special case) in Synopsis 5. More precisely it is under the
> > chapter "Accessing captured subrules" in the test case
> > t/regex/from_perl6_rules/capture.t lines 67–71:
> > 
> > ok(eval(' "bookkeeper" ~~ m/<single> ($/<single>)/ '), 'Named backref',
> > :todo<feature>);
> > 
> > How can the parser know what you mean by $/<single>? Maybe you want $/
> > followed by <single> or maybe $/<single>?

I suspect $/<single> would parse as a single variable.  If you want
the separate subrule one can use whitespace (as noted in other posts)
or brackets (if whitespace is an issue):


> The same rule applies for interpolation in strings:
> "my big $house.uc" is parsed as "my big { $house.uc }", ie $house.uc is
> taken as one token, even though a valid interpretation would be to
> interpolate $house first and then append .uc to that string.

Alas, this is not exactly the case here.  Interpolation in strings 
only occurs for things that end with a postcircumfix (parens, braces,
brackets), thus

    my $house = 'building';

    say "a big $house.uc";        #   "a big building.uc"
    say "a big { $house.uc }";    #   "a big BUILDING"
    say "a big $house.uc()";      #   "a big BUILDING"
    say "a big { $house }.uc";    #   "a big building.uc"

> The Perl 6 solution is that you disambiguate with whitespace if you
> don't want to follow the LTM-rule (ie you'd say '$/ <single>' in the regex).

I think I would tend to recommend disambiguating with brackets
instead of whitespace -- it's slightly more explicit (similar to
how we recommend disambiguating with parens in other types of expressions).


Reply via email to