Я пытаюсь написать абстрактный код для поиска в списке похожих объектов для первого объекта, атрибуты которого соответствуют определенным значениям. Для этого мне нужно вызвать несколько методов доступа и проверить все их значения по одному. Я хотел бы использовать абстракцию как это:
sub verify_attribute {
my ($object, $attribute_method, $wanted_value) = @_;
if ( call_method($object, $attribute_method) ~~ $wanted_value ) {
return 1;
}
else {
return;
}
}
Затем я могу перебрать хеш, ключами которого являются имена методов доступа, а значениями являются значения, которые я ищу для этих атрибутов. Например, если этот хеш называется %wanted
, я мог бы использовать такой код, чтобы найти нужный объект:
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;
}
Конечно, единственная проблема в том, что call_method
не существует. Или это? Как я могу вызвать метод, если у меня есть строка, содержащая его имя? Или есть лучшее решение всей этой проблемы?