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


Автор: Logo 6.2.2010, 19:53
При вызове import передается список импорта по правилам Exporter, т.е. с списками тегов :foo, с !foo и /foo/.
Как из этого получить список того что Exporter будет экспортировать? Либо сначала экспортировать, а потом узнать, что он экспортировал, для задачи без разницы.

Автор: arto 7.2.2010, 00:00
посмотреть namespace ?

Автор: Logo 7.2.2010, 11:54
В смысле? Хочу, чтобы модуль работал через Exporter, но для каждой экспортируемой функции нужно еще произвести дополнительные действия.
К примеру из списка:
Код

use Module qw(/^foo/ !foo)
#в модуле есть функции foo, foo1, foo2


Получить в процедуре import список:
Код

qw(foo1 foo2)

С реальными именами, с которыми можно работать. 
До или после export_to_level - не важно.

Автор: arto 7.2.2010, 13:47
# perl -MData::Dumper -le 'print Dumper \%Data::Dumper::'
$VAR1 = {
          'version::' => *{'::version::'},
          '/' => *{'::/'},
          'stderr' => *::stderr,
          'SIG' => *::SIG,
          '_<mro.c' => *{'::_<mro.c'},
          'Tie::' => *{'::Tie::'},
          'utf8::' => *{'::utf8::'},
          '1' => *{'::1'},
          '"' => *{'::"'},

и т.д.

Автор: Logo 7.2.2010, 14:42
Не подойдет. Мало того, что надо шерстить всю таблицу имен, так ведь не узнать, действительно ли функция экспортировалась из моего модуля.

К примеру, в моем модуле есть функция foo. Но пользователь не захотел ее использовать, а использовал функцию с таким же именем foo из другого модуля, или написал свою. В таблице имен будет функция foo, но реально экспорт foo из моего модуля никто не запрашивал.

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