Автор Тема: запутался с модулями и мод_перл:)  (Прочитано 6476 раз)

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

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
запутался с модулями и мод_перл:)
« : 28 Сентября 2004, 00:08:58 »
Вообщем ситуация такая.
Пишу движок. Под mod_perl. Соотвественно юзаю Apache::Registry
Есть достаточно много модулей.
к примеру, пишу в основной программе
use USERS;
use vars ($User);
$User=USERS->new;
$User->authorization;
Так вот, необходимо получить доступ к объекту $User из других модулей, подключаемых аналогично USERS.
Раньше я писал вот так $main::User->id.
С использованием mod_perl, естественно это не работает.
Решил написать:
*User=\\$Foo::User;
И повторить фокус во всех остальных модулях.
Есдинственное что меня останавливает, а правильно ли это? Выглядит кривовато...
Ну к чему все это, лучше бы водки выпили...

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
запутался с модулями и мод_перл:)
« Ответ #1 : 28 Сентября 2004, 19:47:35 »
и тишина...
Хорошо задам вопрос немонго по-дркугому:)
Где можно посмотреть пример программы (исходники) под мод_перл, с большим количеством модулей, написанных в стиле ООП.
Конечно желательно, обрацово-показательный пример.
Ссылки на гуль привествуются, конечно если там будет нужный запрос.
Ну к чему все это, лучше бы водки выпили...

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
запутался с модулями и мод_перл:)
« Ответ #2 : 29 Сентября 2004, 00:37:50 »
Под mod_perl главный модуль имеет иной путь. Ради интереса можешь посмотреть на него выведя на экран значение __PACKAGE__. С практической точки зрения по прежнему работает синтаксис $:: вместо $::main. Т.е. для вызова твоей переменной используй следующую запись $::User.

Советую прочесть книжку Practical mod_perl (у тебя должна быть). Также всё это, и пути решений и примеры описанны на родном сайте mod_perl perl.apache.org
0 OK, 0:1

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
запутался с модулями и мод_перл:)
« Ответ #3 : 29 Сентября 2004, 22:23:09 »
Цитировать
ondr:
Советую прочесть книжку Practical mod_perl (у тебя должна быть)

Есть конечно, читаю. Но там основное содержание - установка и настройка мод_перл. Это тоже интересно, но это больше проблемы хостера, чем мои:)
А вот книгу мод_перл фор дивелоперс - никак не могу найти:(
И ещё тогда вопрос. (задаю здесь, чтобы не плодить топики)
Если хочется написать довольно большую (уже сейчас программа начитывает 7000 строк кода) легко масштабируемую и изменяемую программу.
Стоит ли разбивать программу на множество небольших модулей, в которых присутствуют только одна-две функции? Где-то я читал утверждение, что хорошо структурированная программа делится на модули, в которых каждый умещается на одном печатном листе?
И если так сделать, серьёзно ли скажется это на скорости?
Уточняю, интересует только перл, причём под мод_перл.
Ну к чему все это, лучше бы водки выпили...

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
запутался с модулями и мод_перл:)
« Ответ #4 : 29 Сентября 2004, 22:38:09 »
И ещё вопрос, стоит ли использовать Apache::Registry, или лучше или лучше просто подправить скрипт и внести необходимые изменения чтобы работал, под мод_перл (программа претендует на некоторую серьёзность, поэтому вопрос о совместимости с мод_цги не стоит).
« Последнее редактирование: 30 Сентября 2004, 00:42:07 от glebushka »
Ну к чему все это, лучше бы водки выпили...

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
запутался с модулями и мод_перл:)
« Ответ #5 : 30 Сентября 2004, 00:45:31 »
Цитировать
Стоит ли разбивать программу на множество небольших модулей, в которых присутствуют только одна-две функции? Где-то я читал утверждение, что хорошо структурированная программа делится на модули, в которых каждый умещается на одном печатном листе?

особо много и бессмысленно модули плодить не стоит - слишком большая цепочка наследственности не есть гуд (если ты будешь их наследовать конечно), ну а если ты предполагаешь насоздать кучу объектов - то тоже не супер. Без фанатизма короче стоит подходить к этому впросу :)
 в исканиях.

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
запутался с модулями и мод_перл:)
« Ответ #6 : 01 Октября 2004, 23:43:17 »
ок, следующий вопрос. Условия все теже. мод_перл. юз стрикт.
в основном скрипте:
use Util;
use Users;
$User=Users->new;
$User->authorization;
На этом этапе необходимо в модуле User, в authorization использовтаь одну из функций из модуля Util. Раньше всё было просто:
&main::Util::some_function($param); (если, конечно ,не указана на экспорт, тогда короче).
Так вот, эти конструкции по понятным причинам не работают.
Как можно вызвать функцию? Не загружая лишний раз необходимый модуль Util.pm в модуле User.pm?
Ну к чему все это, лучше бы водки выпили...

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
запутался с модулями и мод_перл:)
« Ответ #7 : 02 Октября 2004, 00:24:25 »
а почему бы просто не передать в параметрах ссылку на объект?
my $Util=Util->new;
$User=Users->new($Util);
ну а там конструктор соотв.видоизменить.
 в исканиях.

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
запутался с модулями и мод_перл:)
« Ответ #8 : 02 Октября 2004, 00:44:51 »
не факт что там ООП

glebushka
Строго рекомендую прочитать про модули, експорт/импорт, доступ к элементам и т.д. Не обращая никакого внимания на mod_perl. Отличия там не настолько серьёзные, чтобы во всём его винить.
0 OK, 0:1

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
запутался с модулями и мод_перл:)
« Ответ #9 : 02 Октября 2004, 00:51:43 »
Цитировать
не факт что там ООП

тогда просто ссылку на подпрограмму.
 в исканиях.

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
запутался с модулями и мод_перл:)
« Ответ #10 : 02 Октября 2004, 00:58:42 »
Цитировать
ondr:
Отличия там не настолько серьёзные, чтобы во всём его винить

Читал. Как оказалось сёрьёзные:( Что в этой ситуации посоветуешь?
Цитировать
Green Kakadu:
тогда просто ссылку на подпрограмму.

слишком много подпрограмм:( Думаю придётся делать объектно-ориентированным. Если ничего не придумаю. или ondr не будет грить читать доки, а скажет какие именно читать:)
ondr, perldoc что?
Ну к чему все это, лучше бы водки выпили...

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
запутался с модулями и мод_перл:)
« Ответ #11 : 02 Октября 2004, 01:06:37 »
Цитировать
слишком много подпрограмм

:) закидываешь ссылки на них в хеш, и передаешь ссылку на этот хеш
 в исканиях.

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
запутался с модулями и мод_перл:)
« Ответ #12 : 02 Октября 2004, 01:17:52 »
ИМХО, кроме отличий в названии главного модуля, доступ к модулям не изменился. Если загружен модуль Util, то и доступ нему Util::. Для удобства можно всё необходимое экспортировать либо использовать ООП. И ничего криминального в "загружая лишний раз необходимый модуль" нету, т.к. загружаться он всё равно будет единожды, сколько раз его не вызывай (и без mod_perl).

Могу поделиться старенькими, но по данному вопросу, по прежнему актуальными книжками на русском: "Самоучитель perl", "Изучаем perl", "Perl: Библиотека программиста". Про модульность там достаточно и хорошо описано.
0 OK, 0:1

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
запутался с модулями и мод_перл:)
« Ответ #13 : 02 Октября 2004, 02:01:36 »
ondr, видимо я не точно выразился.
Вот пример.

index.cgi
------------------
use Util;
use Users;
use vars ($User);
$User=USERS->new;
$User->authorization;
---------------------
Util.pm
package Util;
-----------------------
sub some_function{


}
-------------------------
Users.pm
-------------------------
package Users;
sub authorization{
#а вот тут нужно вызвать some_function.
#вызов &Util::some_function - не работает (что, в принипе, логично:)
#в mod_cgi работает вызов &main::Util::some_function, если функция
#не экспортировалась, или короче &main::some_function
#если экспортировалась. Ни тот ни другой вариант под
#mod_perl не работает
}
-------------------------
Так думаю понятнее объяснил?
ЗЫ. Все нижеперечисленные книжки у меня имеются, и даже более того прочитаны. За исключением первой (может у меня другой самоучитель). А последние прочитаны, если ты имеешь в виду Орейли.
Ну к чему все это, лучше бы водки выпили...

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
запутался с модулями и мод_перл:)
« Ответ #14 : 02 Октября 2004, 02:03:53 »
Цитировать
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