Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Записная книжка чайника   Dmitriy Goldobin   25 Apr 2000 08:57:36 
Архивное /ru.perl/21956c32ffa12.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional