Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Strict и переменные из библиотеки, Не получается создать общие переменные 
:(
    Опции темы
CyberDrony
Дата 22.2.2012, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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-файлик, считывать его в каждом скрипте и формировать переменные, но это тоже не выглядит элегантным...
Посоветуете?    
PM MAIL   Вверх
arto
Дата 22.2.2012, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



perldoc Exporter
PM MAIL ICQ   Вверх
CyberDrony
Дата 22.2.2012, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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;
---

Не работает. Что не так?



PM MAIL   Вверх
ginnie
Дата 22.2.2012, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



CyberDrony, я бы сделал так:

config.pm:
Код

#!/usr/bin/perl

package config;

use strict;

our $var = 'test';


script.pl:
Код

#!/usr/bin/perl

use strict;
use config;

warn $config::var;


P.S. В варианте с Exporter попробуйте экспортировать нелокальную переменную:
Код

our $var = "wow";


Это сообщение отредактировал(а) ginnie - 22.2.2012, 14:42


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
CyberDrony
Дата 22.2.2012, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 22.2.2012

Репутация: нет
Всего: нет



Да, спасибо! Про вариант с обращением к пакету я в курсе. Но!  Дело в том, что мой проект (все эти кучи скриптов) портируется с другого движка и искать все "глобальные" перемнные чтобы добавить к ним $config:: это утопично.

Вариант с Exporter хорош, но я не понимаю почему мой код не работает. Ведь и ошибку не выдаёт. Замена my на our не помогла - переменная не видна. 
PM MAIL   Вверх
ginnie
Дата 22.2.2012, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



CyberDrony, надо в config.pm добавить
Код

package config;



--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
CyberDrony
Дата 22.2.2012, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 22.2.2012

Репутация: нет
Всего: нет



config.pm

Код

#!/usr/bin/perl

package config;
use Exporter 'import';
our $var = "wow";
@EXPORT_OK = qw($var);

1;


script.pl

Код

#!/usr/bin/perl

use lib qq($ENV{DOCUMENT_ROOT}/cgi-bin/lib);
use strict;
use warnings;
use config;


print "Content-type: text/html\n\n";
print "$var";


НЕ-ПА-ШЕТ! 

PM MAIL   Вверх
DurRandir
Дата 22.2.2012, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 335
Регистрация: 27.9.2009

Репутация: 14
Всего: 17



Вы документацию читали? Разницу между @EXPORT и @EXPORT_OK чувствуете?) И что надо дополнительно сделать во 2м случае?
PM   Вверх
CyberDrony
Дата 22.2.2012, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 22.2.2012

Репутация: нет
Всего: нет



Всё! Спасибо! Вот рабочий вариант:

config.pm
Код

#!/usr/bin/perl

package config;

use Exporter 'import';
our @EXPORT = qw($var);
our $var = "wow!!!";

1;


script.pl

Код

#!/usr/bin/perl

use lib qq($ENV{DOCUMENT_ROOT}/cgi-bin/lib);
use strict;
use warnings;
use config;


print "Content-type: text/html\n\n";
print "ok<p> $var";



PM MAIL   Вверх
Pilat66
Дата 23.2.2012, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 27.1.2009

Репутация: 1
Всего: 1



Цитата(CyberDrony @  22.2.2012,  16:32 Найти цитируемый пост)
use lib qq($ENV{DOCUMENT_ROOT}/cgi-bin/lib);


Это очередная засада. Есть модули, например FindBin, с ним получится более переносимо:
use FindBin;
use lib "$FindBin::Bin/../lib";

Но Ваша задача вообще неправильно решена, использовать глобальные переменные - это разве что для сдачи контрольной чтобы потом скрипт забыть (хотя я бы такие контрольные не принимал). 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0638 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.