добавление подпрограм

Пытаюсь понять какой из способов оптималнее для использования при создании сайта

пример 1
#!/usr/bin/perl
require "./start_html.pl";
require "./content.pl";
require "./end_html.pl";

пример 2
#!/usr/bin/perl
use lib './lib';
use Start_html;
use Content;
use End_html;

пример 3
#!/usr/bin/perl
print "head";
print "text";
print "end";

проведя некоторые замеры с use Time::HiRes выяснилось что использование require и use одинаковы по нагрузке на сервер, но есть некоторые существенные отличия.
Так к примеру, require подгружается только тогда, когда до него дойдет скрипт, в то время как использование use предполагает загрузку их всех при старте. Поэтому что б замерить привильно вариант №2 пришлось создать дополнительный модуль в котором было прописано:
use Time::HiRes qw(gettimeofday tv_interval);
$t1 = [gettimeofday];
с этим ясно. вроде обьяснил то что понял и особой разницы между этими вариантами нету. А потому что мне удобней работать с require - использую его.

С третим вариантом естественно гораздо лучше все, но если код переваливает за 20 кб то использование его вызывает у меня легкое подергивание левого глаза :-)

Вот собственно и все что на данный момент я знаю, если где не прав, подскажите где.

Вы знаете чем

Вы знаете чем отличаются CGI, FASTCGI, mod_perl?

нет

опять гуглить?

CGI,FastCGI,mod_perl

Отличаются способами загрузки интерпретатора. При CGI при каждом вызове скрипта/программы Апач загружает перловый интерпрератор, который выполняет программу и выдает результаты Апачу. При mod_perl перловый интерпретатор уже заранее загружен, поэтому время и ресурсы на загрузку не тратятся. Согласно книгам, производительность при использовании mod_perl возрастает в 20 - 200 раз. Однако апач с мод_перл весьма прожорлив в отношении ресурсов, особенно памяти. Приемы программирования также заметно отличаются. Под mod_perl есть 2 модуля: mod_perl::Registry и mod_perl::PerlRun. С первым -- специфическое для mod_perl поведение и максимальная производительность, второй имитирует поведение CGI модуля и несколько отстает в производительности. С FastCGI ни разу не работал, поэтому говорить не буду. Но пишут, что он значительно превосходит CGI по производительности. Думается, что где-то между CGI и mod_perl.

Если совсем

Если совсем кратко, CGI каждый раз перед запуском компилирует скрипт заново, mod_perl и FastCGI держат в памяти уже загруженный и скомпилированный скрипт.

Принципиальное отличие mod_perl, которое я лично знаю в том что его более глубоко интегрировали в http сервер чем FastCGI, что позволило значительно расширить его возможности - например можно в общесистемных настройках указать что какие-то модули будут загружаться при загрузке сервера, также можно сделать какие-то имена общедоступными и особенно интересно что в рамках mod_perl можно цеплять обработчики на perl к различным хукам API apache и даже писать на Perl куски настроек apache.

FastCGI это стандартный интерфейс, к которому можно присоединить не только Perl (есть, например, FastCGI php), общая идеология что под интерпретатором Perl запускается процесс, который через сокет присоединяется к серверу http (ЕМНИП не обязательно apache) и обрабатывает соединения некоторой заранее предусмотренной подпрограммой.

Плюс в сравнении с mod_perl в том что процесс FastCGI можно запустить под любым пользователем и в общем случае не обязательно на той-же машине, где работает сервер http. Конечно, при большом числе запросов (или при большом объеме прокачиваемых данных), будет заметно что FastCGI медленнее, потому что он работает не внутри процесса сервера http а соединяется с сервером через сеть.

Минус что mod_perl, что FastCGI, что требуется более высокая квалификация разработчика чем для простого CGI, потому что в CGI утечки памяти некритичны, а так они будут накапливаться.

программа для FastCGI выглядит так:

use CGI::Fast qw(:standard);
$COUNTER = 0;
$ENV{FCGI_SOCKET_PATH} = "sputnik:8888";

while (new CGI::Fast) {
print header;
print start_html("Fast CGI Rocks");
print
h1("Fast CGI Rocks"),
"Invocation number ",b($COUNTER++),
" PID ",b($$),".",
hr;
print end_html;
}

Для очень приблизительного сравнения CGI и FastCGI у меня как раз появился пример:
есть в программе управления файрволлом FreeBSD возможность загружать список IP адресов с которыми хочется что-то делать в виде таблицы:
ipfw table 1 add 62.149.2.1/32
ipfw table 1 add 62.149.3.1/32
...

реально у меня в скрипте это выглядело так:
awk '{ print "/sbin/ipfw table 1 add ",$0 }' < $1 | /bin/sh

то же можно исполнить таким образом:
awk '{ print "table 1 add ",$0," \n" }' < $1 | /sbin/ipfw /dev/stdin

ipfw это довольно легкая программа, несравнимо легче интерпретатора perl, однако первым способом список из 1300 адресов загружается около 7 секунд, вторым способом (через пайп) за доли секунды, которые я глазом поймать не могу, следовательно где-то порядка менее 0.1с, то есть в 50-100 раз быстрей (замерять точно мне если честно просто лень, потому что это все часть работающей системы и надо специально выковыривать кусок формирующий список и его выдающий).

Еще когда-то проводил замеры скорости многократного запуска скомпилированной программы и получалось на современных машинках x86 где-то порядка 200-300 запусков в секунду, скорость-же исполнения уже скомпилированного байт-кода Perl (фактически скорость виртуальной машины Perl) у меня получалась где-то порядка 300000 шагов в секунду (шаг это например один пустой цикл оператора foreach или какая-то встроенная в систему функция Perl, но скажем undef или вставка в хеш может занять много шагов, потому что требуется выделение памяти и тп).

Занемательная инфа

Занемательная инфа, но как она в данном случае касется меня если запросов предполагается очень много, а сервер предоставляет хостер без mod_perl.
Исходя из всего вышесказоного выбор с использованием require самый правильный?

Я делаю так..

Приветствую тебя, я понял что ты новичек, я тоже. Я делаю вот так:

unshift (@INC, "/path/to/work/place");
require "conf.pl";

PS: Используй теги для форматирования кода, таких ресурсов не очень много, пусть тут все будет красово =)

------------------
use Source();

правильнее

правильнее так:

use lib "/path/to/work/place";
require "conf.pl";

templates

Исходя из первого поста я рекомендую все же сразу обратить внимание на templates
Некоторые из них (например HTML::Template с caching) даже под CGI дают хороший результат

Поддерживаю. А

Поддерживаю. А HTML::Template::JIT вообще летает.