Forum Webscript.Ru
Программирование => Perl => Тема начата: 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; }
неработает...
-
возможно.
всё работает. только это очень неудобно: потом по всему коду искать где, чего подключали.
if($a=1){ use Image::Magick; } - это чего? м?
-
perldoc -f require
perldoc perlmod
-
AnnA
Не у меня такая весчь.... в зависимости от запроса.... должно подключиться только нужное....
Например запрос вывести Список фоток.... зафиг подключат для етого кучу лишних библиотек?
Или например нужно отосать письмо.... тогда уже нужно что то подключить....
А так как все ето у меня должно быть в можно сказать в 1 фаиле index.pl вот и нужно сделать так чтоб лишнее не обрабатывалось =)
-
Kipter
позвольте полюбопытствовать...
>вот и нужно сделать так чтоб лишнее не обрабатывалось =)
у вас index.pl так критично нагружает сервер, что вы подошли к таким радикальным мерам или это просто для красоты?
-
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 строчками делать буду?
-
Kipter
1. Perl скрипт сначала компилируеться, потом исполняеться! НЕ НАОБОРОД.
2. в вашем втором случае результат будет такой же как и в первом... т.е. модуль подгрузиться не смотря на условие.
3. обращаем свой взор к mod_perl.
-
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
И сильно ли замедлют работу эти Рекваи?
у меня все запчати скрипта рекваем грузятся =)
толко если нагрузка незначительна думаю и смысла нет отказываеться от рекваев....
-
толко если нагрузка незначительна
если нагрузка незначительна... к чему вообще все вышесказаное?
-
commander
А я вот лично езнаю значительная она или незначительная =)
Вот его и спрашиваю... при большом количестве подключаемых фаилов имеет ли место реквай?
Он ведь сказал:
Рекваи же подключаются уже когда скрипт откомпилирован... именно поэтому рекваи и замедляют работу скрипта.
Вот я подумал а может и не стоит?
-
Kipter
используй use ...
-
commander
Ох какой совет =) ну да... буду я подключать 40 Фаилов.....
из которых только в 1 та фукция что будет использоваться =)
Я думаю что тут require больше подходит.... а впринципе на практике проверю....
Просто думал мож кто на этом форуме сталкивался с таким... дабы мне на грабли не наступать.... а оказывается придется самому проверить....
-
perldoc autouse