In perl, how can I call a method whose name I have in a string?
Posted
by Ryan Thompson
on Stack Overflow
See other posts from Stack Overflow
or by Ryan Thompson
Published on 2010-04-27T06:47:00Z
Indexed on
2010/04/27
6:53 UTC
Read the original article
Hit count: 234
I'm trying to write some abstract code for searching through a list of similar objects for the first one whose attributes match specific values. In order to do this, I need to call a bunch of accessor methods and check all their values one by one. I'd like to use an abstraction like this:
sub verify_attribute {
my ($object, $attribute_method, $wanted_value) = @_;
if ( call_method($object, $attribute_method) ~~ $wanted_value ) {
return 1;
}
else {
return;
}
}
Then I can loop through a hash whose keys are accessor method names and whose values are the values I'm looking for for those attributes. For example, if that hash is called %wanted
, I might use code like this to find the object I want:
my $found_object;
FINDOBJ: foreach my $obj (@list_of_objects) {
foreach my $accessor (keys %wanted) {
next FINDOBJ unless verify_attribute($obj, $accessor, $wanted{$accessor});
}
# All attrs verified
$found_object = $obj;
last FINDOBJ;
}
Of course, the only problem is that call_method
does not exsit. Or does it? How can I call a method if I have a string containing its name? Or is there a better solution to this whole problem?
© Stack Overflow or respective owner