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

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.