Вызов метода Perl-модуля из строки - PullRequest
8 голосов
/ 09 июня 2011

С учетом модуля Perl Foo.pm с методами aSub () и bSub ()

my $obj = Foo->new();
my $x = $obj->aSub($argA);
my $y = $obj->bSub($argB);

У меня есть программа TAP, в которой я строю массив хэшей:

my $test_case = [
   'aSub' => "foobar",
   'bSub' => "whobar"
];  

Я бы хотел иметь возможность анализировать массив и использовать элементы ключ / значение для вызова методов объекта Foo $ obj;
Как статический метод:

if ($key eq 'aSub') {
  $obj->aSub($value)
} elsif ($key eq 'bSub') {
  $obj->bSub($value);
}
...

Я бы предпочел сделать это полиморфно, чтобы мне не пришлось жестко кодировать методы:

$obj->{$key}($value) #or something of the sort  

Я пробовал несколько методов, используя ссылки и / или glob, но продолжаю получать сообщение об ошибке:

Ошибка: возникла исключительная ситуация: aSub не определен

Test :: Harness фиксирует ошибку и печатает менее полезное сообщение?

1 Ответ

14 голосов
/ 09 июня 2011

Вызов метода, имя которого находится в переменной, очень прост:

my $key = 'aSub';
my $value = 'foobar';
my $obj = Foo->new();

$obj->$key($value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...