Forum Webscript.Ru
Программирование => Perl => Тема начата: Phoinix от 14 Мая 2004, 11:58:03
-
Что-то зациклился с модулями :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
Так дело в том, что я действий над этим объектом (вариант 2) никаких не делаю, я просто получил этот массив и все, но в при первом варианте мне постоянно приходится делать ссылку на этот массив (хотя, впрочем, её можно сделать сразу)...
А что будет меньше использовать ресурсов?
-
Можно выбрать явно несуществующий модуль и оспользовать переменные относительно его. Получится эффект действительно глобальных переменных.
Я остановился на несуществующем(в моём случае) модуле s, пример $s::var1, $s::var2
Можно ссылаться на стартовый скрипт $::var1, $::var2. Но это дело вкуса.
-
ondr
;) Было два решения, теперь три...
Что-то не пойму, а как в твоем варианте их объявлять? точнее где?
-
Phoinix
Объявлять присвоением. Где - неважно, главное заранее ;)
-
ondr
Не совсем пойдет, скрипты, которым нужны эти данные, работают сами по себе, между ними связи практически нет, и насколько я понимаю, данный метод больше ориентирован под mod_perl, что вообщем-то мне не нужно...
Я бы их вообще с удовольствием в базе бы хранил, но некоторые из них как раз переменные для подключения к ней... :)
-
А стоп. Похоже я не так тебя понял.
Данный метод догится для создания глобалных переменных.
Хм... А конфигурационные файлы не устраивают?
-
ondr
Этот модуль как раз и есть конфигурационный файл ;), в нем всего одна процедура определния хеш массива с ключевыми переменными (пути, параметры базы и т.д.)