|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 02 Aug 2005 13:07:25 To : Andrei Protasovitski Subject : Re: Снова подключение модулей во время вып о лнения -------------------------------------------------------------------------------- Andrei Protasovitski -> Yurik shestakov @ Tue, 02 Aug 2005 08:45:44 +0400: >> AP> if (нужен модуль Module::Name) { >> AP> require Module::Name; >> AP> # создание объектов и переменных (инициализация) >> AP> } >> [...] >> AP> Хотелось бы вынести все, что находится между фигурных скобок, в >> AP> отдельный файл и написать такую процедуру, которая подгружала бы модуль >> AP> и запускала бы инициализацию. Однако что-то у меня ступор от жары: >> AP> модуль подгружается, но переменные не видны. >> AP> Может, кто-нибудь решал подобную проблему? >> А ты попробуй явно позвать функцию Module::Name::import() >> Или неявно через eval "use $package_name"; >> По крайней мере логично было бы специфичную для модуля инициализацию >> вынести в sub import {} 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> my $script = <SCRIPT>; AP> eval $script; AP> $/ = $separator; AP> [-=cut=-] AP> В принципе, можно написать процедуру, возвращающую $script. Как правило, AP> код инициализации небольшой, так что большой нагрузки на память не будет. Рекомендую вместо этого почитать умную книжку про perl. my-переменные таки да, будут видны только в пределах файла, но это фича, а не баг. Вышеупомянутым способом ты старательно раскладываешь себе грабли. Вместо того, чтобы использовать our, если нужны глобальные переменные. -- Artem Chuprina RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru Вам правду резать или кусочком? Кнышев --- ifmail v.2.15dev5.3 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/25606ef392335.html, оценка из 5, голосов 10
|