Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical

Re: running unknown methods

by elusion (Curate)
on Oct 03, 2002 at 23:29 UTC ( #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 :

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?

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

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (4)
As of 2019-07-19 00:12 GMT
Find Nodes?
    Voting Booth?

    No recent polls found