I'm attempting to write a constant::lexical pragma and the only unresolved issue as of now is that the constant names are valid barewords even though the constant subroutine has been undefined.
This is a major issue as one of the great features of constants is that they normally give compile-time errors if not defined.use 5.010; use strict; sub FOO () { 'foo' } BEGIN { undef &FOO } say defined &FOO ? 'subroutine defined' : 'subroutine undef'; say eval 'my $false; FOO if $false; 1' ? 'FOO allowed' : 'FOO not allowed' ; __END__ subroutine undef FOO allowed
I don't see any way to do this in pure Perl. I've browsed perldata, perlapi, perlguts, and perlintern for any ideas but I haven't found anything useful. I don't grok most of the guts. Is it possible using XS? Of course, XS is the very last resort.
lodin
Update: Added stricture and my $false; in the eval to make the test actually work.
In reply to Removing CODE slot in typeglob / Reversing "use subs ...;" by lodin
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |