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


Автор: GShadrin 15.10.2009, 20:07
Есть имя функции в скалярной переменной.
Задача запустить функцию с этим именем, причем она находится в другом пакете, причем в нее передаются аргументы, причем она возвращает массив.
Пытался написать так
Код

($a, $b)=com::&$new_comand($c, $d);

ничего не вышло
пробывал другие варианты, переставлял амперсанд ничего не выходит

раньше было:
Код

$a=&$new_comand;

оно работало

Но в силу разрастания программы возникла необходимость разбиения на пакеты и избавление от излишних глобальных переменных.

Как реализовать такой вызов функции?

Автор: arto 15.10.2009, 21:09
com->$new_command (..) ?

следите за первым аргументом

Автор: KSURi 16.10.2009, 09:15
Если инвокант не нужен, то можно так:
Код

$new_command = "package::$new_command";
$new_command->($a, $b);

Автор: GShadrin 16.10.2009, 16:19
попробывал написать 
($a, $b) = com->$new_comand($c, $d) ;
в пакет не передаются $c, $d
как работает '->' ?
Мне надо вызвать программу из другого пакета, передавая в нее параметры и принимая ответ от нее
т.е. хочу передать в нее $c, $d
и получить $a, $b

Автор: arto 19.10.2009, 07:35
# perl -le 'package com; sub aa ($$) { return ($_[1]+1,$_[2]+1) } package main; $a = "aa"; print join "\n",com->$a (1,2)'
2
3

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