Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Встака модуля перл прямо в код программы


Автор: rcdimon 11.1.2006, 01:10
Как можно объеденить модуль перла и программу... ЧТо бы не нужно было устанавливать модуль! Потому что часто у хостинг провайдеров с этим проблемы. Не хотят устанавливать и все... А иногда хочется немного отредактировать код модуля smile ЧТо бы подогнать его под себя. А когда установят программу на другую машину все будет испорчено...

Как объеденить? Что бы файл с модулем был бы отдельным файлом в CGI-BIN и подключался чем нить типа use или require

Автор: korob2001 11.1.2006, 05:12
Если модуль написан на Perl и не зависит от других модулей которые не установлены у твоего хостера, то можешь просто скопировать его в какой-нить каталог, а затем в начале файла, который будет подключать этот модуль указать:
Код

use lib qw( путь/к/каталогу/с/твоими/модулями );
use Image::Info;

Я привёл пример с очень полезным, но в то же время не везде установленом, модуле Image::Info.
Кстати, вовсе не обязательно модули хранить в каталоге /cgi-bin, их можно вообще хранить на уровень выше корневого каталога с правами 0664, правда у каталога должны быть права 0755.

PS: вот здесь можешь скачать "http://forum.vingrad.ru/index.php?act=Attach&type=post&id=514481" от http://vingrad.ru/@sharq, там помоему есть описание того, что тебе нужно.

Автор: rcdimon 11.1.2006, 13:02
А если я кроме установленных локально модулей использую еще другие, нормально установленные, модули, то как мне быть?

строка

Код

use lib qw( путь/к/каталогу/с/твоими/модулями );    



Как я понимаю вообще изменит путь где Перл будет искать модули? И тогда все остальные модули он будет искать там же.. Или нет?

Или сначала присоединять нормальные модула, а потом локальные:

Код

use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);

use lib qw( путь/к/каталогу/с/твоими/модулями );    

use Image::Info;


И еще вопрос... путь/к/каталогу/с/моими/модулями как должен выглядеть? Он должен быть абсолютный? То есть начинаться с /home/httpd/mysite.ru/ и т.д. Или он должен начинаться с другого места?

Спасибо за ответ.

Автор: korob2001 11.1.2006, 16:54
Цитата

А если я кроме установленных локально модулей использую еще другие, нормально установленные, модули, то как мне быть?

Раскручивать хостера, либо попробовать написать программу, которая будет устанавливать модуль в определённый каталог, а потом указывать этот путь в lib.
Цитата

Как я понимаю вообще изменит путь где Перл будет искать модули? И тогда все остальные модули он будет искать там же.. Или нет?

rcdimon - да ну smile , на такие вопросы, честно говоря, не хочется и отвечать. Не быстрее ли будет взять, да пропробовать самому, для начала набрать perldoc lib или запустить такой код?
Код

#!/usr/bin/perl
# Этот модуль находится в стандартном каталоге модулей PERL
use CGI;
# Добавляем в массив @INC ещё и такой "библиотечный" путь  
use lib qw( /home/localhost/my/Mod ); 
# Подключаем собственный класс из собственной библиотеки
use MyClass; 

Если после запуска не получишь сообщение об ошибке, что не найден пакет MyClass из всех перечисленных бибилиотек в массиве @INC, то значит PERL находит и стандартные библиотеки и твою собственную. smile
Вобщем use lib '';, это тоже самое что и:
Код

BEGIN { unshift( @INC, "/путь/к/твоей/библиотеке" ) };

Т.е. просто на этапе компиляции добавляется ещё один путь к библиотекам PERL, а тот в свою очередь ищет модули в тех библиотеках, которые перечислены в этом массиве.
Цитата

И еще вопрос... путь/к/каталогу/с/моими/модулями как должен выглядеть? Он должен быть абсолютный? То есть начинаться с /home/httpd/mysite.ru/ и т.д. Или он должен начинаться с другого места?

Лично я всегда использую полный путь /home/localhost/и/тд , это очень удобно когда ты располагаешь свою библиотеку выше в иерархии, относительно корневого каталога. Но можно указывать и просто:
Код

use lib qw(.);   # Искать модули в том же каталоге, где находится скрипт
use lib qw( MyLib/ ); # Искать в каталоге MyLib/, который находится в томже каталоге, где находится скрипт.

Автор: rcdimon 11.1.2006, 21:14
ОК. огромное пасиба

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)