in reply to accessing stashes
You can do that with the symbol table, but using defined and exists is cleaner.
#!/usr/bin/perl use warnings; use strict; use feature qw{ say }; { package My; sub one { print "123"; } sub two; } say ${My::}{one}; # *My::one say ${My::}{two}; # -1 say ${My::}{three}; # say defined *My::one{CODE}; # 1 say defined *My::two{CODE}; # 1 say defined *My::three{CODE}; # say exists &My::one; # 1 say exists &My::two; # 1 say exists &My::three; # say defined &My::one; # 1 say defined &My::two; # say defined &My::three; #
Update: added the first paragraph of says.
Update 2: Interestingly, a forward declared sub with prototypes returns the prototypes with the first syntax:
sub four (&@); # ... say ${My::}{four}; # &@
Update 3: ... unless you add an attribute, too, which makes it output the glob name.
sub five (&@) :method; say ${My::}{five}; # *My::five
Update 4: The -1 is printed only if you remove all other mentions of My::three, otherwise *My::three is printed.
map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: accessing stashes
by ikegami (Patriarch) on Mar 01, 2019 at 19:12 UTC | |
Re^2: accessing stashes
by morgon (Priest) on Mar 01, 2019 at 18:45 UTC | |
by ikegami (Patriarch) on Mar 01, 2019 at 19:14 UTC | |
by ikegami (Patriarch) on Mar 01, 2019 at 19:52 UTC | |
by morgon (Priest) on Mar 01, 2019 at 19:25 UTC | |
by ikegami (Patriarch) on Mar 01, 2019 at 19:28 UTC | |
by morgon (Priest) on Mar 01, 2019 at 19:35 UTC | |
|
In Section
Seekers of Perl Wisdom