in reply to Re: exists(&subname) causes strange autovivification problem
in thread exists(&subname) causes strange autovivification problem
I have no words to express how f*cked *p typeglobs are!!!
If only a sub is using the symbol, then the coderef is stored directly where the glob is supposed to be.
(Larry gets a spanking next time we meet ;)
Anyway this code seems to work in all edge cases, only tested on mobile phone yet.
use strict; use warnings; use feature 'say'; no autovivification; use Data::Dump qw/pp/; sub sub_exists{ my $name = shift; return exists $::{$name} # symbol exists && ( ref $::{$name} eq "CODE" # only code || (*{$::{$name}}{CODE} && 1) # also code || !1 # false ); } for my $name (qw/zero one two three/) { pp { $name => sub_exists($name) }; } our $one=1; our $two=2; sub two {2}; sub three {3}
{ zero => "" } { one => "" } { two => 1 } { three => 1 }
Cheers Rolf
(addicted to the Perl Programming Language :)
see Wikisyntax for the Monastery
Extend code to cover subs in other namespaces than main
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: exists(&subname) causes strange autovivification problem (workaround)
by ikegami (Patriarch) on Nov 06, 2024 at 17:30 UTC |