|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Dmitriy Goldobin 2:5020/400 25 Apr 2000 08:57:36 To : All Subject : Записная книжка чайника --------------------------------------------------------------------------------
Hi!
Итак подытожу свои мытарства с mod_perl в виде сборника советов
чайника другим чайникам. Все что я написал есть в доках по
mod_perl, но все очень разбросано. Всяческим 'гуру' просьба не
читать, дабы не возбуждаться. :)
1. Stricts
Это относится не только к mod_perl. Всегда используйте perl -w
и use strict. Конечно вы потеряете время на всяких use vars,
no strict 'refs', но сэкономите на порядок больше времени при
отладке.
2. Begin
Поскольку begin {} выполняется только при первой загрузке в кэш,
а не при каждом обращении к скрипту, то использовать его можно
только для инициализации _глобальных_ _констант_. Hикаких 'my',
присвоить их присвоит, но на следующем входе в скрипт они потеряются.
А вот для инициализации констант begin{} в mod_perl в отличие от
обычных скриптов очень полезен, поскольку при следующем входе
в кешированный скрипт время на их присваивание тратиться не будет.
3. My
Избавьтесь от всех my вне процедур. Их конечно можно использовать
в основном блоке, но нельзя потом обращать к ним из процедур.
Поскольку загонять все локальные в пределах основного блока
переменные в use vars обломно, то наилучшее решение - загнать весь
основной блок в {...}, тогда к объявленным там my вы уже не сможете
по забывчивости обратиться из функций. Это еще удобно тем, что
этот {} можно в случае надобности загнать в eval, дабы вместо
HTTP 500 получить что-то более осмысленное.
4. Closures
Все процедуры, объявленные в скрипте на самом деле являются
вложенными процедурами - closures. Проблема в том, что на этапе
компиляции перл считает их обычными процедурами и не выдает
присущих closures ошибок и предупреждений. Поэтому весьма
полезно время от времени добавить в начало всего скрипта
'sub tratata {' и попробовать отдать его в таком виде перлу.
5. прототипы
Это опять же относится не только к mod_perl. Объявление
прототипов функций очень хорошо излечивает от забывчивочти.
хотя я до сих пор этого не делаю, ломает. но когда-нибудь
буду :)
6. Дополняйте, welcome :)
Итак, с учетом вышеизложенного рыба для mod_perl скрипта
у меня выглядит так:
#!/usr/bin/perl -w
#sub as_though_mod_perl {
use strict;
########## Settings
use vars qw($EXPIRES %COUNTRIES);
BEGIN {
$EXPIRES = '+2h';
%COUNTRIES = (RU => 'Russian Federation');
}
########## Libraries
use CGI;
########## Globals
use vars qw(%params %cache);
########## Main code
#eval
{
...
};
#print "Content-Type: text/plain\n\nInternal error: $@" if $@;
########## Procedure xxx
...
Bye.
--- ifmail v.2.15dev5
* Origin: Electronic Microsystems JSC (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/21956c32ffa12.html, оценка из 5, голосов 10
|