Xpoint
   [напомнить пароль]

Как вызвать функцию из пакета, имя которого задано в переменной?

Метки: [без меток]
[удл]
2008-03-11 17:57:44 [обр] sd[досье]

Требуется так сделать модульный скрипт, чтобы:

  1. Подключение нового модуля сводилось бы к добавлению файла Module1.pm в папку MyModules. При этом можно полагаться, что в модуле Module1.pm определены функции с именами func1, func2...
  2. Основной скрипт должен запускать к примеру функцию func1, но именно из того пакета, который определяется введёнными пользователем данными уже во время выполнения.

Подключение модулей сделал пока так:
opendir(D,"MyModules") or die "Can't open dir with modules: $!";
for (readdir(D)) {
    if (/^\w+\.pm$/) {
        require "MyModules/$_" ;
    }
}
closedir D;

После этого становится возможным запускать &Module1::func1() (если в папке MyModules лежит модуль Mudule1,pm, в котором определена func1). Но имя модуля должно задаваться динамически, пусть к примеру после введённых пользователем данных имеем, что $my_module eq "Module1", тогда func1 должна вызываться как-то так:

&$my_module::func1();

но такая конструкция не верна, о чём сообщает компилятор Перл.
Итак вопросы:

  1. Как обратиться к функции func1 из пакета, имя которого задано в переменной $my_module?
  2. Может быть стоит как-то по-другому реализовать процедуру подключения модулей, например запользовать use вместо require?

Буду благодарен за любые комментарии.

спустя 11 минут [обр] ginnie(0/6)[досье]
Предположу, что вызыватся должно так: &{$my_module.'::func1'}();
спустя 12 минут [обр] sd[досье]
Спасибо, работает!
Powered by POEM™ Engine Copyright © 2002-2005