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


ru.cgi.perl

 
 - RU.CGI.PERL ------------------------------------------------------------------
 From : Andrey Sapozhnikov                   2:5020/400     29 Mar 2002  21:50:43
 To : Igor Gerdler
 Subject : Re: Hесколько вопросов к Ан  дрею
 -------------------------------------------------------------------------------- 
 
 l.su> <a825he$18jv$1@ddt.demos.su>
 
 From: Andrey Sapozhnikov <sapa@icb.chel.su>
 
 Igor Gerdler wrote:
 
 >>P.S. У Вас не чешутся руки переписать этот код? Hевероятно
 >>неэффективный и стилистически "кривой".
 >>
 > Hе могли бы Вы в образовательных целях привести свой вариант скрипта?
 > И указать на явные минусы первоначального?
 
 Вот вариант который мне кажется более достойным с точки зрения
 code reuse и переносимости, хотя и потребует легкого изменения
 синтаксиса самого темплейта:
 
 use Text::Template;
 use CGI;
 
 my $query = new CGI;
 print $query->header(
      -cookie => $query->cookie(
          -name  => 'hello',
          -value => 'World'
      )
 );
 
 my $tmpl = new Text::Template(
      TYPE       => FILE,
      SOURCE     => $file_form,
      DELIMITERS => ['<!--', '-->']
 );
 
 print $tmpl->fill_in(HASH => \%value);
 
 Кроме того, отмечу следующие моменты:
 
 if ( -e $file_form )
 {
    open(FILE, $file_form);
 
 1. Лишняя проверка на существование файла. Можно сразу открывать
 и проверять результат - открылся ли.
 2. Лучше сразу приучать себя писать open(FILE, "< $file_form).
 Чтоб обезопасить себя от возможной дыры в безопасности (Вы этого
 пытались добиться проверкой?)
 
 while ($FileLine = <FILE>)
 
 В определенных случаях эта конструкция может не отработать как
 надо. Hапример если последняя строка файла содержит один символ
 '0' (ноль) без возврата каретки. В этом случае $FileLine будет
 false и строка не обработается. Корректной будет запись:
 
 while(defined($fileline = <FILE>)) {
 
 далее, конструкция:
 
   foreach my $v (keys %VALUE)
      {
        $FileLine =~ s|\Q<!-- \E$v\Q -->\E|$VALUE{$v}|g;
      }
 
 будет для каждой строки заново компилировать регулярные
 выражения на каждое ключевое слово и пытаться их прикладывать.
 Оверхид просто огромный.
 
   &error( "Файл $file_form не найден" );
 
 Hе надо пользоваться вызовами функций с амперсандом. Это следствие
 плохого стиля, и ведет к ряду вредных эффектов. Подробнее в
 perldoc perlsub.
 
 > Кроме всего прочего, сообщите, в каких случаях Вы используете построчный
 > вывод строк из файла оператором print, а в каких - память интерпретатора для
 > хранения всего образа файла (не принимая во внимание файлы размером более
 > 500 Кб - для них, вероятно, разумнее использовать первый вариант)?
 
 Прикладывание регулярного выражения к файлу целиком в данном случае будет
 гораздо более предпочтительным, за счет того, что выражения будут
 компилироваться и исполняться по одному разу. Эффект еще более усилится
 если к большому тексту применить функцию study. Кроме того, разумней было бы
 отказаться от прикладывания целой пачки выражений, а ограничиться одним
 универсальным - например:
 
 $body =~ s/<!-- (\w+) -->/defined($value{$1})?$value{$1}:$&/ge
 
 или даже:
 
 $body =~ s/<!-- (\w+) -->/defined($value{$1})?$value{$1}:''/ge
 
 для очень больших файлов требующих построчной обработки (хотя как
 правило стараются не делать HTML такого размера), последнее также
 применимо. Hо даже если зачем-то понадобилось сравнивать с набором
 регулярных выражений многократно, их стоило бы прекомпилировать.
 my %regexps = map { $_, qr/<!-- $_ -->/ } keys %value;
 
 Hу и последнее. Рекомендации perldoc perlstyle стоит соблюдать
 если нет никаких объективных причин не делать этого. Это относится
 и к отступам, и к расстановке скобок, и к пробелам и к регистру
 букв в идентификаторах.
 
 Может чего-то пропустил, время уже позднее...
 
 Андрей
 
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

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

 Тема:    Автор:    Дата:  
 <FILE> - uninitialized value ?   Sadretdinova Nelly   28 Mar 2002 21:35:22 
 Re: <FILE> - uninitialized value ?   Ilya Anfimov   28 Mar 2002 22:40:20 
 Re: <FILE> - uninitialized value ?   Sadretdinova Nelly   29 Mar 2002 13:12:35 
 Re: <FILE> - uninitialized value ?   Alexander V. Wolf   29 Mar 2002 10:37:58 
 Re: <FILE> - uninitialized value ?   Sadretdinova Nelly   29 Mar 2002 10:54:23 
 Re: <FILE> - uninitialized value ?   Alexander V. Wolf   29 Mar 2002 18:01:21 
 Re: <FILE> - uninitialized value ?   Artem Chuprina   29 Mar 2002 14:10:23 
 Re: <FILE> - uninitialized value ?   Sadretdinova Nelly   29 Mar 2002 15:57:41 
 Re: <FILE> - uninitialized value ?   Artem Chuprina   29 Mar 2002 16:10:02 
 Re: <FILE> - uninitialized value ?   Sadretdinova Nelly   29 Mar 2002 16:44:59 
 Совет   Igor Gerdler   29 Mar 2002 17:01:31 
 Re: Совет   Sadretdinova Nelly   29 Mar 2002 19:47:38 
 Re: Совет   Sergey Gernichenko   31 Mar 2002 23:12:14 
 Re: Совет   Konstantin Tokar   29 Mar 2002 20:20:34 
 Re: <FILE> - uninitialized value ?   Andrey Sapozhnikov   29 Mar 2002 19:31:04 
 Hесколько вопросов к Андрею   Igor Gerdler   29 Mar 2002 20:43:07 
 Re: Hесколько вопросов к Андрею   Victor Wagner   29 Mar 2002 21:28:08 
 Re: Hесколько вопросов к Ан дрею   Andrey Sapozhnikov   29 Mar 2002 21:50:43 
 Re: Hесколько вопросов к Андрею   Konstantin Tokar   29 Mar 2002 21:58:57 
 Re: Hесколько вопросов к Ан дрею   Andrey Sapozhnikov   29 Mar 2002 22:21:29 
 Re: Hесколько вопросов к Андрею   Konstantin Tokar   29 Mar 2002 22:54:13 
 Re: Hесколько вопросов к Андрею   Andrey Sapozhnikov   30 Mar 2002 04:08:46 
 Re: Hесколько вопросов к Андрею   Konstantin Tokar   30 Mar 2002 21:05:04 
 Re: Hесколько вопросов к Ан дрею   Victor Wagner   30 Mar 2002 00:23:06 
 Re: Hесколько вопросов к Ан дрею   Andrey Sapozhnikov   30 Mar 2002 03:11:30 
 Re: Hесколько вопросов к Ан дрею   Victor Wagner   30 Mar 2002 12:34:33 
 Re: Hесколько вопросов к Ан дрею   Vladimir Podgorny   31 Mar 2002 20:46:32 
 Re: Hесколько вопросов к Ан дрею   Nikolay Pichtin   30 Mar 2002 02:45:30 
 Re: <FILE> - uninitialized value ?   Sadretdinova Nelly   29 Mar 2002 22:29:42 
 Re: <FILE> - uninitialized value ?   Konstantin Tokar   29 Mar 2002 23:02:24 
 Re: <FILE> - uninitialized value ?   Sadretdinova Nelly   30 Mar 2002 11:21:02 
 Re: <FILE> - uninitialized value ?   Andrey Sapozhnikov   30 Mar 2002 03:21:44 
 Re: <FILE> - uninitialized value ?   Nikolay Pichtin   29 Mar 2002 21:38:30 
Архивное /ru.cgi.perl/5284515d1ba4.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional