Beefy Boxes and Bandwidth Generously Provided by pair Networks
Come for the quick hacks, stay for the epiphanies.
 
PerlMonks  

Re: running unknown methods

by elusion (Curate)
on Oct 03, 2002 at 23:29 UTC ( [id://202667]=note: print w/replies, xml ) Need Help??


in reply to running unknown methods

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.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (5)
As of 2024-04-19 22:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found