|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 02 Aug 2005 17:50:42 To : Andrei Protasovitski Subject : Re: Снова подключение модулей во время вып о лнения -------------------------------------------------------------------------------- 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> память не будет. >> Рекомендую вместо этого почитать умную книжку про perl. my-переменные >> таки да, будут видны только в пределах файла, но это фича, а не баг. AP> Кто бы спорил. >> Вышеупомянутым способом ты старательно раскладываешь себе грабли. AP> Какие? Я не вижу потенциальных трудностей. Покажи. Таким образом ты фактически делаешь my-переменные глобальными. >> Вместо того, чтобы использовать our, если нужны глобальные переменные. AP> Я не хочу использовать глобальные переменные, в том-то и дело, хотя, AP> похоже, придется. Можно оформить включаемый файл как модуль и импортировать из него только то, что надо. Hу и в нем разрешать импортировать только то, что можно... Есть в принципе и другие альтернативы, все зависит от задач. Так, объекты в использующем библиотеку скрипте обычно получают в качестве возвращаемых значений функции. А то, что создавалось там внутри, снаружи видеть ни к чему. -- 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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/25606ea486e34.html, оценка из 5, голосов 10
|