IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   Подключение модулей в Perl (https://www.imho.ws/showthread.php?t=22368)

usach 12.02.2003 17:55

Подключение модулей в 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:

asfyvv 21.02.2003 20:19

хотелось бы уточнить как именно вызывается функция - в полной записи (имя_модуля::функция() ) или как функция, якобы описанная в главной программе ( функция() ) ?

usach 04.03.2003 14:22

вызываеться просто по имени - Функция () без указания модуля

asfyvv 11.03.2003 19:17

Вот работающий пример. Специально написал, чтобы попробовать.
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. При наличии умного редактора совсем не сложно прописывать полные имена функций и при этом можно не бояться, что имя функции в разных библиотеках совпадет.

usach 12.03.2003 11:31

У меня имя пакета в test.pm и в proba.pl одно и то ж, можеть из за этого?


Часовой пояс GMT +4, время: 08:59.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.