LINUX.ORG.RU

[perl] use $module_name;

 


0

0

Здрасьте всем.

Как использовать в перле use, используя в качестве параметра переменную, а не четко прописанное имя? Можно, конечно, задействовать require, но он автоматом импортирует функции, а к ним нужно обращаться через $module_name::func(), потому что они в каждом модуле названы одинаково. Это, кстати, второй вопрос, потому что конструкцию $module_name::func() перл тоже не жрет.

eval задействовать уж очень неохота.

anonymous

никак, ни первое, ни второе. Вообще странная постановка задачи. Думаю стоит пересмотреть алгоритм.

anonymous
()

Странная необходимость. Я бы вместо этого использовал что-то вроде Class::Factory

swizard
()
Ответ на: комментарий от anonymous

> никак, ни первое, ни второе.

Второе, как выяснилось, можно. &{ "${module_name}::func" }()

//автор темы

anonymous
()
Ответ на: комментарий от anonymous

> никак, ни первое, ни второе.

Второе, как выяснилось, можно. &{ "${module_name}::func" }()

//автор темы

anonymous
()

Дядько, require как раз _не_ имортирует функции. Он вообще вызывающий namespace никак не изменяет. А перловый 'use' эквивалентен BEGIN {require Foo; import Foo;}

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

Ну и если уж у тебя есть модули, в которых есть одинаково называющиеся функции, которые надо вызывать по имени модуля - то совсем непонятно. почему они не объекты.

anonymous
()
Ответ на: комментарий от anonymous

> Ну и если уж у тебя есть модули, в которых есть одинаково называющиеся функции, которые надо вызывать по имени модуля - то совсем непонятно. почему они не объекты.

Мысель интересная. Всем спасибо, буду разбираться.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.