Re: Снова подключение модулей во время вып о лнения

From
Artem Chuprina (2:5020/400)
To
Andrei Protasovitski
Date
2005-08-02T17:50:42Z
Area
RU.PERL
From: Artem Chuprina <ran+news@ran.pp.ru>

Andrei Protasovitski -> Artem Chuprina  @ Tue, 02 Aug 2005 13:57:01 +0400:

 >>  AP> Да модуль грузится через require без лишних телодвижений. Проблема в 
 >>  AP> том, что созданные объекты и переменные видны только в пределах 
 >>  AP> подгружаемого файла.
 >>  AP> Первое, что пришло в голову:
 >>  AP> [-=cut=-]
 >>  AP> my $separator = $/;
 >>  AP> undef $/;
 >>  AP> open(SCRIPT, "path/to/the/script.pl") or die "Cannot load the script:
 >>  AP> $!";
 >>  AP> my $script = <SCRIPT>;
 >>  AP> eval $script;
 >>  AP> $/ = $separator;
 >>  AP> [-=cut=-]
 >>  AP> В принципе, можно написать процедуру, возвращающую $script. Как правило,
 >>  AP> 
 >>  AP> код инициализации небольшой, так что большой нагрузки на память не
 >>  AP> будет.
 >> Рекомендую вместо этого почитать умную книжку про perl.  my-переменные
 >> таки да, будут видны только в пределах файла, но это фича, а не баг.

 AP> Кто бы спорил.

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

 AP> Какие? Я не вижу потенциальных трудностей. Покажи.

Таким образом ты фактически делаешь my-переменные глобальными.

 >> Вместо того, чтобы использовать our, если нужны глобальные переменные.

 AP> Я не хочу использовать глобальные переменные, в том-то и дело, хотя, 
 AP> похоже, придется.

Можно оформить включаемый файл как модуль и импортировать из него только
то, что надо.  Ну и в нем разрешать импортировать только то, что
можно...  Есть в принципе и другие альтернативы, все зависит от задач.
Так, объекты в использующем библиотеку скрипте обычно получают в
качестве возвращаемых значений функции.  А то, что создавалось там
внутри, снаружи видеть ни к чему.

-- 
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru

If it's there and you can see it---it's real
If it's not there and you can see it---it's virtual
If it's there and you can't see it---it's transparent
If it's not there and you can't see it---you erased it!
	IBM poster explaining virtual memory, circa 1978
--- ifmail v.2.15dev5.3
 * Origin: Leninsky 45 home network (2:5020/400)
SEEN-BY: 50/203 520 400/462 814 450/159 186 451/30 461/43 132 640 469/999
SEEN-BY: 4616/3 4625/8 4627/10 4635/4 4641/444 5000/76 5000 5001/5001 5006/1
SEEN-BY: 5007/1 5010/53 70 5012/8 46 5015/10 5020/52 118 154 175 194 400 545
SEEN-BY: 5020/549 715 758 830 1057 1523 1604 1665 1922 2013 2020 2142 2238
SEEN-BY: 5020/2590 4441 5021/3 29 5022/128 5025/3 750 5026/14 49 5027/16
SEEN-BY: 5030/49 115 556 966 1063 1339 1900 5031/47 70 5033/21 5035/3 5036/1
SEEN-BY: 5040/47 5042/13 5045/7 5049/1 5051/15 5053/16 5054/1 8 9 35 36 37 45
SEEN-BY: 5054/66 67 81 85 5057/1 5060/88 5061/15 120 5062/1 10 5064/39 5066/18
SEEN-BY: 5069/7 5070/1222 5075/5 5077/80 5080/80 1003 5081/2 5082/6 5083/21
SEEN-BY: 5085/13 5090/108 113 5095/20 6000/12 6001/3
PATH: 5020/400 4441 545 5054/1 37