I'm not saying it's necessarily the best idea in the world, but you can in fact find that information (maybe) like this:
I'm not really sure it would be the best idea either. I mean: I don't know Win32::OLE::Const but I suppose it should have a means to list the constants it created. Whatever...
my $symbol_table = *{"main::Example::Package::"}{HASH};
(For sake of completeness) also:
my $symbol_table = \%Example::Package::;
or, in a more package-agnostic way:
my $symbol_table = \%{__PACKAGE__ . '::'};
(of course if it were not for the need to dumping it, one wouldn't probably take the reference at all.)
print "", Dumper($symbol_table), "\n";
One "problem" (hey, notice the quotes!) with this is that it will potentially report also entries which do not correspond to subs. Thus I would filter them out:
my %subs = %{__PACKAGE__ . '::'}; *{$_}{CODE} or delete $subs{$_} for keys %subs;
or
my %subs = map { $_ => *{$_}{CODE} } grep *{$_}{CODE}, keys %{__PACKAGE__ . '::'};
or
my %subs; while ( my ($k,$v)=each %{__PACKAGE__ . '::'} ) { $subs{$k}=$v if *{$v}{CODE}; }
Of course if the OP is only interested in the sub names, as is probable, then a simple grep would do:
my @subs = grep *{$_}{CODE}, keys %{__PACKAGE__ . '::'};
I'm surprised it isn't documented in the module Win32::OLE actually. I'm not at all familiar with these packages (linux fan), but does Win32::OLE::Const help somehow?
As hinted above, I second that. However if one, like the OP, wants to know which "constants" a certain module created, then it would sensible to only find the subs which were added upon its use, perhaps like thus:
package Example::Package; use strict; use warnings; use Data::Dumper; use constant foo => 1; BEGIN { no strict 'refs'; my %subs = map {$_ => 1} grep *{$_}{CODE}, keys %{__PACKAGE__ . '::'}; sub added_subs () { grep *{$_}{CODE} && !$subs{$_}, keys %{__PACKAGE__ . '::'}; } } use constant { bar => 2, baz => 3 }; print Dumper [added_subs]; __END__
In reply to Re^2: How can I find the names of dynamically created subroutines?
by blazar
in thread How can I find the names of dynamically created subroutines?
by Cap'n Steve
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |