![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| CyberDrony |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 22.2.2012 Репутация: нет Всего: нет |
Ситуация следующая...
Есть скрипт script.pl. В нём use common (моя либа). В common.pm объявляю our $var = 'somethink'; Если в script.pl прописан use strict, то даёт ошибку "Global symbol "$var" requires explicit...". Если не прописан, то, естественно, всё OK. Вопрос. Как правильно передавать переменные из либы в скрипт при наличии use strict? Поясню... В проекте куча скриптов, все они используют некоторые одни и те же переменные (напр. логины к БД, переменные с коэффицентами и пр.). Прописывать их много раз в куче скриптов как-то некомильфо, да и поменять их потом будет проблематично. Есть конечно вариант запихать все общие данные в txt-файлик, считывать его в каждом скрипте и формировать переменные, но это тоже не выглядит элегантным... Посоветуете? |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
perldoc Exporter
|
|||
|
||||
| CyberDrony |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 22.2.2012 Репутация: нет Всего: нет |
config.pm:
--- use Exporter 'import'; my $var = "wow"; @EXPORT_OK = qw($var); 1; --- script.pl: --- use strict; use config; print $var; --- Не работает. Что не так? |
|||
|
||||
| ginnie |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
CyberDrony, я бы сделал так:
config.pm:
script.pl:
P.S. В варианте с Exporter попробуйте экспортировать нелокальную переменную:
Это сообщение отредактировал(а) ginnie - 22.2.2012, 14:42 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
||||||
|
|||||||
| CyberDrony |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 22.2.2012 Репутация: нет Всего: нет |
Да, спасибо! Про вариант с обращением к пакету я в курсе. Но! Дело в том, что мой проект (все эти кучи скриптов) портируется с другого движка и искать все "глобальные" перемнные чтобы добавить к ним $config:: это утопично.
Вариант с Exporter хорош, но я не понимаю почему мой код не работает. Ведь и ошибку не выдаёт. Замена my на our не помогла - переменная не видна. |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
CyberDrony, надо в config.pm добавить
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| CyberDrony |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 22.2.2012 Репутация: нет Всего: нет |
config.pm
script.pl
НЕ-ПА-ШЕТ! |
||||
|
|||||
| DurRandir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 14 Всего: 17 |
Вы документацию читали? Разницу между @EXPORT и @EXPORT_OK чувствуете?) И что надо дополнительно сделать во 2м случае?
|
|||
|
||||
| CyberDrony |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 22.2.2012 Репутация: нет Всего: нет |
Всё! Спасибо! Вот рабочий вариант:
config.pm
script.pl
|
||||
|
|||||
| Pilat66 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 27.1.2009 Репутация: 1 Всего: 1 |
Это очередная засада. Есть модули, например FindBin, с ним получится более переносимо: use FindBin; use lib "$FindBin::Bin/../lib"; Но Ваша задача вообще неправильно решена, использовать глобальные переменные - это разве что для сдачи контрольной чтобы потом скрипт забыть (хотя я бы такие контрольные не принимал). |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |