Автор Тема: Как правильно указать общие переменные в скриптах?  (Прочитано 3556 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Что-то зациклился с модулями :insane:

Есть общие переменные для всех скриптов, цеплять через require - не особо хочется, но как правильней выбирать эти переменные используя модуль?

Вариант 1 (в модуле просто указать процедуру):


package PH
::constant;

use 
strict;
our(@ISA, @EXPORT);
require 
Exporter;
@
ISA qw(Exporter);
@
EXPORT qw(SetConstant);

sub SetConstant {
%
= {
             
var1 => \'value1\',
             var2 => \'value2\',
             var3 => \'value3\',
             var4 => \'value4\',
         };
return %_
}

1;


Вызов:
use PH::constant;
my %site_vars SetConstant;

print 
$site_vars{\'var1\'};


Вариант 2 (объектом);

package PH::constant;

use 
strict;
our(@ISA, @EXPORT, @EXPORT_OK);
require 
Exporter;
@
ISA qw(Exporter);

sub new {
    
my $self;
    
$self = {
             
var1 => \'value1\',
             var2 => \'value1\',
             var3 => \'value1\',
             var4 => \'value1\',
                };
   bless $self;
   return $self  
}

1;


Вызов:

Вызов:
use PH::constant;
my $site_vars = new PH::constant;

print 
$site_vars -> {var1};


Вообще этот хеш массив, я еще часто передаю для использования в другие вспомогательные модули, но разница передачи не существенна:

$template -> parce(\\%site_vars); # или
$template -> parce($site_vars);

Вот и никак не могу определиться что использовать лучше...

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
что на тебе удобнее то и используй... :)
из перечисленных вариантов я бы выбрал второй...
And no religion too...

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
commander
Так дело в том, что я действий над этим объектом (вариант 2) никаких не делаю, я просто получил этот массив и все, но в при первом варианте мне постоянно приходится делать ссылку на этот массив (хотя, впрочем, её можно сделать сразу)...

А что будет меньше использовать ресурсов?

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Можно выбрать явно несуществующий модуль и оспользовать переменные относительно его. Получится эффект действительно глобальных переменных.
Я остановился на несуществующем(в моём случае) модуле s, пример $s::var1, $s::var2

Можно ссылаться на стартовый скрипт $::var1, $::var2. Но это дело вкуса.
0 OK, 0:1

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
ondr
;) Было два решения, теперь три...

Что-то не пойму, а как в твоем варианте их объявлять? точнее где?

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Phoinix
Объявлять присвоением. Где - неважно, главное заранее ;)
0 OK, 0:1

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
ondr
Не совсем пойдет, скрипты, которым нужны эти данные, работают сами по себе, между ними связи практически нет, и насколько я понимаю, данный метод больше ориентирован под mod_perl, что вообщем-то мне не нужно...

Я бы их вообще с удовольствием в базе бы хранил, но некоторые из них как раз переменные для подключения к ней... :)

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
А стоп. Похоже я не так тебя понял.
Данный метод догится для создания глобалных переменных.

Хм... А конфигурационные файлы не устраивают?
0 OK, 0:1

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
ondr

Этот модуль как раз и есть конфигурационный файл ;), в нем всего одна процедура определния хеш массива с ключевыми переменными (пути, параметры базы и т.д.)

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28