Forum Webscript.Ru

Программирование => Perl => Тема начата: Kipter от 01 Ноября 2005, 09:56:33

Название: Динамическое подключение модулей перла
Отправлено: Kipter от 01 Ноября 2005, 09:56:33
Сообственно возможно ли такое?
и если да то как?

есл кто непонял вопроса... то могу обьяснить что именно нужно...

Допустим есть  такой то код...

#!/usr/bin/perl

use CGI;
use Image::Magick;

my $CGI = new CGI;

print $CGI->header();
print "Hello world!";

И нам в нем в определенно случае нужен Image::Magick а в определенном нет...
а что то вроде:

if($a=1){ use Image::Magick; }

неработает...
Название: Динамическое подключение модулей перла
Отправлено: AnnA от 01 Ноября 2005, 11:26:01
возможно.
всё работает. только это очень неудобно: потом по всему коду искать где, чего подключали.
if($a=1){ use Image::Magick; } - это чего? м?
Название: Динамическое подключение модулей перла
Отправлено: arto от 01 Ноября 2005, 12:58:56
perldoc -f require
perldoc perlmod
Название: Динамическое подключение модулей перла
Отправлено: Kipter от 01 Ноября 2005, 15:25:53
AnnA

Не у меня такая весчь.... в зависимости от запроса.... должно подключиться только нужное....

Например запрос вывести Список фоток.... зафиг подключат для етого кучу лишних библиотек?

Или например нужно отосать письмо.... тогда уже нужно что то подключить....

А так как все ето у меня должно быть в можно сказать в 1 фаиле index.pl вот и нужно сделать так чтоб лишнее не обрабатывалось =)
Название: Динамическое подключение модулей перла
Отправлено: commander от 01 Ноября 2005, 15:44:19
Kipter
позвольте полюбопытствовать...
>вот и нужно сделать так чтоб лишнее не обрабатывалось =)
у вас index.pl так критично нагружает сервер, что вы подошли к таким радикальным мерам или это просто для красоты?
Название: Динамическое подключение модулей перла
Отправлено: Kipter от 01 Ноября 2005, 19:39:36
commander
Сложно ответить на такой вопрос... боюсь расписывать нужно долго и подробно =(

Вообщем я так решил из многих домыслов....
Впринципе скрипт должен подгрузить список модулей из массива....

сперва подгружаютя необходмые (конечно необходимость условная но зачем изобретать велосипед если есть CGI) такие как CGI. Получаем запрос... а в зависимости от него из массива модулей грузим их....

и в зависимости от этого скрипт будет себя по разному вести....

ну а в чем сообственно проблема....
посмотрим на такой пример:

#!/usr/bin/perl

if(1 == 5) { use CGI; }

our $CGI = new CGI;

print $CGI->header();
print "OK";

И что самое интересное - модуль CGI подключается! И скрипт пашет.... хотя должна быть ошибка....

Я попробовал так.... берем 2 фаила 1.pl и 2.pl

1.pl:
--------------------------------------
#!/usr/bin/perl

if(1==5){ require "2.pl"; }

our $CGI = new CGI;

print $CGI->header();
print "OK";

--------------------------

2.pl:
------------------------------
use CGI;
1;

-------------------------------

А вот так все пшет! если условие ложно то получаем ошбку что нету у нас CGI что мы и хотели а если истинно то получаем ОК =)

Но меня вот ета фигня  с дополнительными фаилами как бы неустраивает.... ето чтож... если у меня 10 Модулей подрубается... я что 10 фаилов с 2 строчками делать буду?
Название: Динамическое подключение модулей перла
Отправлено: commander от 02 Ноября 2005, 10:30:05
Kipter
1. Perl скрипт сначала компилируеться,  потом исполняеться! НЕ НАОБОРОД.
2. в вашем втором случае результат будет такой же как и в первом... т.е. модуль подгрузиться не смотря на условие.
3. обращаем свой взор к mod_perl.
Название: Динамическое подключение модулей перла
Отправлено: Kipter от 03 Ноября 2005, 01:10:24
commander
RE 1: Да, забыл забыл... Интепретаторы всетаки компилируют исходный код в машиннный только это делают каждый раз....
Перл же это не скрипт... поэтому действительно выполнение идет уже откомпилированного кода....

Но тогда я непонимаю как проводится такая фишка..... делаем 3 фаила.... 1.pl 2.pl 3.pl

Цитировать

[1.pl]
#!/usr/bin/perl

print "Enter a name of a file which it is necessary to load (2.pl || 3.pl): ";
$name = <>; chomp $name;

require $name;

print "Press any key for end";
<>;

[2.pl]
print "It is a file number 2\\n";

[3.pl]
print "The file 3 is loaded\\n";


Ну вот, вводим имя фаила 2.pl получаем одно сообщение, вводим имя фаила 3.pl получаем другое.... да и вообще какой фаил не прикажи такое мы и получим.....

Может обьсните тогда что же сперва компилируется а что-же исполняется =) =) =)

Или Сперва компилируется, потом исполняется, потом докомпилируется, доисполняется =) =) =)

Перл гибок =)
Название: Динамическое подключение модулей перла
Отправлено: Pegaz от 03 Ноября 2005, 08:15:30
В фазу компеляции подключаются те модули, которые подключане с помощью юза, причём это делается в самом начале скрипта, и модули подключаются в том порядке, в котором их нашёл парсер в скрипте. Рекваи же подключаются уже когда скрипт откомпилирован... именно поэтому рекваи и замедляют работу скрипта.

ЗЫ: под компиляцией тут понимается не та компиляция как в С++, а псевдокомпиляциия перла.
Название: Динамическое подключение модулей перла
Отправлено: Kipter от 03 Ноября 2005, 09:30:29
Pegaz
И сильно ли замедлют работу эти Рекваи?
у меня все запчати скрипта рекваем грузятся =)

толко если нагрузка незначительна думаю и смысла нет отказываеться от рекваев....
Название: Динамическое подключение модулей перла
Отправлено: commander от 03 Ноября 2005, 09:39:13
Цитировать
толко если нагрузка незначительна

если нагрузка незначительна... к чему вообще все вышесказаное?
Название: Динамическое подключение модулей перла
Отправлено: Kipter от 03 Ноября 2005, 11:04:53
commander
А я вот лично езнаю значительная она или незначительная =)
Вот его и спрашиваю... при большом количестве подключаемых фаилов имеет ли место реквай?

Он ведь сказал:
Цитировать
Рекваи же подключаются уже когда скрипт откомпилирован... именно поэтому рекваи и замедляют работу скрипта.


Вот я подумал а может и не стоит?
Название: Динамическое подключение модулей перла
Отправлено: commander от 03 Ноября 2005, 12:47:13
Kipter
используй use ...
Название: Динамическое подключение модулей перла
Отправлено: Kipter от 03 Ноября 2005, 17:30:37
commander

Ох какой совет =) ну да... буду я подключать 40 Фаилов.....
из которых только в 1 та фукция что будет использоваться =)

Я думаю что тут require больше подходит.... а впринципе на практике проверю....
Просто думал мож кто на этом форуме сталкивался с таким... дабы мне на грабли не наступать.... а оказывается придется самому проверить....
Название: Динамическое подключение модулей перла
Отправлено: NeoNox от 03 Ноября 2005, 17:49:29
perldoc autouse