http://qs1969.pair.com?node_id=660264

lodin has asked for the wisdom of the Perl Monks concerning the following question:

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.

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
This is a major issue as one of the great features of constants is that they normally give compile-time errors if not defined.

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.