Помогите, если кто знает. Имеем динамическую загрузку модуля посредством следующего кода:
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code:</font><HR><pre> use strict; # !!!
# …
$pkg = "mypkg"; $path = "./modules/mypkg.pm"; require $path; </pre><HR></BLOCKQUOTE>
Обработка ошибок, связанных с отсутствием модуля по указанному пути и т.п. к делу отношения не имеет, посему не приводится. Далее из загруженного модуля необходимо получить ссылку на функцию, имя которой известно:
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code:</font><HR><pre> $mysub = \& ("$(pkg)::mysub") ; </pre><HR></BLOCKQUOTE>
(здесь и далее вместо фигурных используются круглые скобки - первые тут почему-то не отображаются, мож кто подскажет?)
Всё было бы хорошо, но как проверить, существует ли в модуле функция с таким именем? В случае вышеприведённого кода при отсутствии таковой всё равно возвращается ссылка (в никуда) и ошибку можно установить только при вызове, что, imho, неизящно. Проверка через таблицу символов, т.е. через %("$(pkg)::") позволяет установить наличие имени, но не позволяет определить, что это - функция, скаляр, ссылка или что-то ещё.
Может быть, кто-нибудь знает, что делать?
[ 05 Февраля 2003: Исправлено Dixx ]
|