Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Perl
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2020, 13:49   #1
AndreyK
Подтвердите свой е-майл
 
Регистрация: 05.04.2010
Сообщений: 76
По умолчанию [В закладки] [Окно ответа] 1 (permalink) Использование @EXPORT и @EXPORT_OK

Всем привет. Допустим у меня будет пакетный модуль "My::Func" с функциями, их естественно нужно экспортировать, но у меня возник вопрос: какие из них помещать в массив @EXPORT, а какие в @EXPORT_OK?

Сам пакетный модуль:
Код:
package My::Func;
 
use strict; 
use warnings;
 
our @ISA       = qw(Exporter);  
our @EXPORT    = qw(); # При каких условиях помещаются сюда
our @EXPORT_OK = qw();  #  При каких условиях помещаются сюда
 
sub a1 {
    ...
    return "return value";
}
 
sub a2 {
    ...
    return "return value";
}
 
sub a3 {
    ...
    return "return value";
}
 
sub a4 {
    ...
    return  "return value";
}
 
...
 
1;
Может быть есть какое-то правило? Ведь если я из своего скрипта "script.pl" буду писать так "use My::Func", то импортируются будут только те функции которые в @EXPORT, а если use My::Func qw(a1), то получается, что только функцию a1 можно будет использовать.

Мой скрипт script.pl

Код:
#!/usr/bin/perl
 
use My::Func; # Так использовать?
use My::Func qw(a1); # Или так?
 
print a1();
Прикол в том, что если в модуле будет 90 функций, а в скрипте "script.pl" мне нужно будет всего 3 использовать, то если я все 90 помещу в переменную @EXPORT, и экспортирую их строкой: "use My::Func", то я загажу пространство имён ненужными мне функциями.

Если же я помещу 3 функции в @EXPORT_OK, а 87 в @EXPORT, при этом я смогу использовать 3 функции если вызову строку "use My::Func qw(a1 a2 a3)". Но если мне понадобиться функция a4, то мне придётся дописывать строку "use My::Func" и я опять загажу пространство имён.

Как обычно делают?

Добавлено через 1 час 13 минут
В документации: https://perldoc.perl.org/Exporter написано, чтобы не экспортировали по умолчанию ничего без уважительной причины. Но что считать уважительной причиной, а что нет?
AndreyK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
/ 0 Регистрация: 07.08.2020 Сообщений: 2 [В закладки] [Окно ответа] 1 (permalink) Проблемы со Sprite Editor/Sprite Editor размывает картинки danil444 Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 10.08.2020 07:28
Регистрация: 13.05.2020 Сообщений: 1 [В закладки] [Окно ответа] 1 (permalink) Добавить шрифт в визуальный редактор TinyMCE v4.6.2 MyNam WordPress и другие CMS 0 13.05.2020 20:50
[В закладки] [Окно ответа] 1 (permalink) Добавить метод, который пополняет список одной модели экземплярами второй Lucky63 ASP.NET 0 07.07.2019 19:59
[В закладки] [Окно ответа] #1 Какие ЯП нужно освоить что бы написать игровую рулетку? PoUiLy JavaScript, Ajax 3 31.05.2018 12:42