I'm a little confused as to what you are asking. I can tell that you're getting that error because you have the :: after your dereferenced hashref though. Do you want to call all the defined methods that begin with a "_" from the class of your object? I believe you would do that like so:
sub runTests { my ($self) = @_; my $ref = ref $paragraph; foreach $symname (sort keys %{"${ref}::"}) { next unless defined $symname; next unless $symname =~ /^.+::(_[^:]+)$/; $self->$1(); } } # sub runTests
The first thing I changed was the foreach. The hash you were getting the keys from was the object itself. If I understand you correctly, you want the symbol table for the class/package, which is what I put. (ref will return the object's class)

If, on the other hand, you have stored all the methods you want to call inside of your object, take out the %{"${ref}::"} and replace it with %{$self}

Second, I moved the tests to the front. There's no need to assign something if you're not gonna use it. I also changed your regex. This makes sure that it's testing after the last :: in case you have a subclass like My::Module.

Lastly, I didn't assign via a typoglob (*). Instead, I saved the method name from the regex and executed it as a method of the originating object. You were calling it as a subroutine, which, if I understand you right, you didn't want to do.

I hope I understood you correctly and that this helps. All of this code is untested however, so I can't guarentee that it works.

elusion : http://matt.diephouse.com

Update: I forgot to mention that if you're trying to do this and your object inherits from another class, you won't have access to the parent class's methods, because those are stored in the parent's namespace.

Update: I had to change the symbol table hashref. I don't dabble in the symbol table too much, sorry.


In reply to Re: running unknown methods by elusion
in thread running unknown methods by markcsmith

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.