Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re^4: accessing stashes

by ikegami (Pope)
on Mar 01, 2019 at 19:52 UTC ( #1230735=note: print w/replies, xml ) Need Help??


in reply to Re^3: accessing stashes
in thread accessing stashes

Something changed in 5.22. $My::{$symbol} can return a code reference or -1 instead of a glob.

The following is therefore needed:

sub get_code_ref_by_fqn { # Fully qualified name my ($fqn) = @_; my @pkg_name_parts = split /::/, $fqn; my $symbol = pop(@pkg_name_parts); my $pkg = \%::; for (@pkg_name_parts) { $pkg = $pkg->{$_.'::'} or return undef; } my $glob_or_code = $pkg->{$symbol} or return undef; return $glob_or_code if ref($glob_or_code); return undef if ref(\$glob_or_code) ne 'GLOB'; return *$glob_or_code{CODE}; }

But you know what, let's just leave those dirty details to Perl.

sub get_code_ref_by_fqn { # Fully qualified name my ($fqn) = @_; no strict qw( refs ); return undef if !defined(&$fqn); return \&$fqn; }

Above tested using

use 5.012; use warnings; sub Foo::Bar::y; sub Foo::Bar::z { } say get_code_ref_by_fqn('Foo::Bar::x') // '[undef]'; say get_code_ref_by_fqn('Foo::Bar::y') // '[undef]'; say get_code_ref_by_fqn('Foo::Bar::z') // '[undef]';

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1230735]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (4)
As of 2021-03-03 20:40 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My favorite kind of desktop background is:











    Results (92 votes). Check out past polls.

    Notices?