![]() |
Подключение модулей в Perl
Вот в умной книжке прчитал если я вот так сделаю:
use strict; use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); use Exporter; @ISA = qw(Exporter); @EXPORT = qw(&myfunc); sub myfunc {........ } а в скрипте use этот модуль то ф-ия myfunc будет доступна, но если в @EXPORT myfunc невключать то ее не получится использовать. На практике получаеться поровну напишу я @EXPORT = qw(&myfunc); или нет myfunk в любом случае запускаеться Неподскажите что я не так делаю или не так понял ??? :idontnow: |
хотелось бы уточнить как именно вызывается функция - в полной записи (имя_модуля::функция() ) или как функция, якобы описанная в главной программе ( функция() ) ?
|
вызываеться просто по имени - Функция () без указания модуля
|
Вот работающий пример. Специально написал, чтобы попробовать.
1. Файл библиотеки test.pm #!perl package my_modules::Test; use strict; require Exporter; use vars qw(@ISA @EXPORT); @ISA = qw(Exporter); @EXPORT = qw(&func1 &func2); sub func1 { print "func1\n"; } sub func2 { print "func2\n"; } 1; 2. Файл, из которого вызываются функции proba.pl #!perl use strict; use my_modules::Test; func1(); func2(); Если запустить как есть, то программка отработает без ошибки. Если убрать из строки файла библиотеки @EXPORT = qw(&func1 &func2); , к примеру &func2, то начнет ругаться на неопределенную функцию main::func2, т.е. именно так, как написано. Возможно, Вы привели не весь код библиотеки и там где-то есть дополнительная обработка. p.s. Сам я предпочитаю не пользоваться Exporter. При наличии умного редактора совсем не сложно прописывать полные имена функций и при этом можно не бояться, что имя функции в разных библиотеках совпадет. |
У меня имя пакета в test.pm и в proba.pl одно и то ж, можеть из за этого?
|
| Часовой пояс GMT +4, время: 08:59. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.