Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Вызов функции с переменной частью в имени.


Автор: scamelscrud 6.5.2006, 21:22
Делаю сабж таким образом (по другому не знаю как):
Код

my $module = "Modules::MyModule";
eval "use $module";
eval "${module}::start();";

Дальше пытаюсь передать параметр
Код

my %params = (
param1=> value1,
param2=> value2
);
my $module = "Modules::MyModule";
eval "use $module";
eval "${module}::start(\%params);";

Так работать не хочет. Где копать? Как еще можно функцию с переменной частью в имени вызвать?

Автор: shootnix 6.5.2006, 21:59
по-моему, так правильней:
Код

eval "${$module}::start(\%params);";
 

Автор: scamelscrud 6.5.2006, 22:01
Попробовал вот так:
Код

my %params = (
param1=> value1,
param2=> value2
);
my $module = "Modules::MyModule";
eval "use $module";
my $func = "${module}::start";
&$func(\%params);

Но с use strict; работать не будет=\

Добавлено @ 22:08 
2shootnix имхо, так как раз не правильно. 

Автор: scamelscrud 7.5.2006, 10:26
В общем погуглил, поэксперементировал..
Код

use strict;
my %params = (
param1=> value1,
param2=> value2
);
my $module = "Modules::MyModule";
eval "use $module";
&{\&{"${module}::start"}}($params);

Все работает даже без eval:) 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)