Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Perl: porters

[perl #108286] Wishlist: Overridable keywords

 

 

Perl porters RSS feed   Index | Next | Previous | View Threaded


perlbug-comment at perl

Jul 4, 2012, 2:24 PM

Post #1 of 1 (38 views)
Permalink
[perl #108286] Wishlist: Overridable keywords

On Mon May 21 05:00:56 2012, zefram [at] fysh wrote:
> Father Chrysostomos via RT wrote:
> >I'd love to hear them. What I've come up with does have a few rough
> >edges that I've been trying to iron out.
>
> My basic concept is that the keyword-style name lookup searches through
> a path-like sequence of namespaces (~= packages). By default you get
> lookup in CORE::DEFAULT followed by standard sub name lookup. To override
> a core keyword you should be able to stick some other namespace on the
> front of the path, which provides the override.
>
> Where we currently have feature flags that make additional keywords
> available, such as feature "switch", the "use feature" directive needs
> to add another package into the search path. For example, "given" and
> "when" *won't* be in CORE::DEFAULT, they'll be in CORE::SWITCH.
>
> You'd be able to completely replace the default set of keywords by
> setting up a custom package and putting that into the path *in place of*
> CORE::DEFAULT. So, for example, you can have "if" unbound, rather than
> merely overridden. For the ultimate purist position, you import specific
> CVs from CORE::DEFAULT into your current package (or lexical namespace)
> and then *remove* CORE::DEFAULT from the path. You can operate with
> a completely empty path as long as you've got the essential facilities
> available through standard sub lookup.

How exactly would that work in practice? A pragma? ‘use keywords
"CORE::DEFAULT", __PACKAGE__’?

And where would lexical subs fit into that scheme? Should CORE::glob
fallback to a lexical glob, the way it falls back to a package sub (I
hope not)?

> Your "overrides" feature roughly corresponds to putting CORE::DEFAULT
> *after* standard sub lookup in the search path. Not sure whether it's
> useful to support that, in the absence of backcompat requirement.
>
> >* foo'bar'x3 is equivalent to foo::bar::x3. print'bar'x3 is equivalent
> > to print 'barbarbar';
>
> Ooh, interesting difference. This is quite similar to hov "s:" is treated
> as the start of a substitution expression, whereas "x:" is a label.
> I think this sort of special parsing behaviour ought to be a flag tied
> to the CV for the keyword-like operator. Probably in the mg_private
> field of the call-parser magic.

What would the public API for that be? CvKEYWORD_on?

>
> >* "require foo" implicitly quotes foo (adding .pm as well). "require
> > time" is a version check guaranteed to fail.
>
> Yow. We might want to remove that one.

But we mustn’t break ‘require if ...’.

On the other hand, I think require VERSION should be a *syntactic*, not
run-time, special case.

--

Father Chrysostomos

Perl porters RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.