On Mon, 9 Sep 2002, Andrew Wilson wrote:

> On Mon, Sep 09, 2002 at 02:14:25PM -0500, Me wrote:
> > Hence the introduction of let:
> > 
> >     m/ { let $date := <date> } /
> > 
> > which makes (a symbol table like entry for) $date available
> > somewhere via the match object.
> 
> Somewhere?  where it appears in in the namespace of the caller.
> Apparently there is no way to use someone else's grammar and prevent it
> trashing your namespace.

Err.. I don't think so.

        # Date.pm
        grammar Date;
        my $date;
        rule date_rule { $date := <something> }

        # uses_date.p6   (hmm.. I wonder what a nice extension would be...)
        use Date;
        my $date;
        m/ <Date::date_rule> /;

This would mess with $Date::date, not $main::date.  If there was no 
$Date::date, it wouldn't mess with anything, and it would store 
the return value of <something> in $0{date}.

I'm talking about just in the same namespace, how do we keep rules from 
messing with file-scoped (or any-scoped, for that matter) lexicals or 
globals.  How do we get rule- or closure-scoped lexicals that are put into 
$0?

Which of these are legal, and would provide a solution?

        / <something> { let my $date = $something } /
        / <something> { $0{date} = $something } /

If either, I guess I have no complaints.  I'll be angry if the latter 
isn't legal.  Still, they seem a little bit hack-like....

Luke

Reply via email to