<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Ворота в Perl</title>
    <link rel="alternate" type="text/html" href="http://perlmonks.org.ru/vorota_v_perl/" />
    <link rel="self" type="application/atom+xml" href="http://perlmonks.org.ru/vorota_v_perl/atom.xml" />
    <id>tag:perlmonks.org.ru,2009-03-08:/vorota_v_perl//1</id>
    <updated>2010-02-05T07:49:41Z</updated>
    <subtitle>#!/usr/bin/perl -w</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.3</generator>

<entry>
    <title>Why Perl?</title>
    <link rel="alternate" type="text/html" href="http://perlmonks.org.ru/vorota_v_perl/2010/02/why-perl.html" />
    <id>tag:perlmonks.org.ru,2010:/vorota_v_perl//1.47</id>

    <published>2010-02-05T07:42:54Z</published>
    <updated>2010-02-05T07:49:41Z</updated>

    <summary>Лучший ответ в moscow.pm: Я считаю, что те кто переходит с перла на пайтон/руби - еретики и скорее всего попадут в ад....</summary>
    <author>
        <name>Monks</name>
        
    </author>
    
        <category term="Заметки программиста" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="holywar" label="holywar" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ru" xml:base="http://perlmonks.org.ru/vorota_v_perl/">
        <![CDATA[<p>Лучший ответ в moscow.pm:</p>
<p>Я считаю, что те кто переходит с перла на пайтон/руби - еретики и скорее всего попадут в ад.</p>
<p><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2010/02/lisp-150.html','popup','width=740,height=220,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2010/02/lisp-150.html"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="118" alt="Why Perl?" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2010/02/lisp-thumb-400x118-150.jpg" width="400" /></a><a href="http://xkcd.com/224/"></a></p>]]>
        
    </content>
</entry>

<entry>
    <title>HTML-Template и UTF-8</title>
    <link rel="alternate" type="text/html" href="http://perlmonks.org.ru/vorota_v_perl/2010/02/html-template-i-utf-8.html" />
    <id>tag:perlmonks.org.ru,2010:/vorota_v_perl//1.46</id>

    <published>2010-02-01T07:35:21Z</published>
    <updated>2010-02-02T08:07:48Z</updated>

    <summary>В процессе разработки одного модуля для внутренней системы заказчика, столкнулся с HTML-Template, UTF-8 и MSSQL. Все шло хорошо, пока не потребовалось вставлять в БД значения типа nvarchar, естественно юникодные, естественно на русском языке. Долго экспериментировал с DBIC, CGI-Simple (все эти...</summary>
    <author>
        <name>Monks</name>
        
    </author>
    
        <category term="Cookbook" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="htmltemplate" label="HTML-Template" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="utf8" label="utf-8" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ru" xml:base="http://perlmonks.org.ru/vorota_v_perl/">
        <![CDATA[<p>В процессе разработки одного модуля для внутренней системы заказчика, столкнулся с HTML-Template, UTF-8 и MSSQL. Все шло хорошо, пока не потребовалось вставлять в БД значения типа nvarchar, естественно юникодные, естественно на русском языке. Долго экспериментировал с DBIC, CGI-Simple (все эти модули были задействованы в проекте), и даже с типами данных в БД и кодировками файлов шаблонов, но проблема оставалась - в базе была полная абракадабра или в выводе клиенту - была полная абракадабра... То есть либо там либо там было все хорошо, но не вместе... Это меня навело на мысль, что проблема в шаблонах, а точнее в модуле их обрабатывающих.</p>]]>
        <![CDATA[<p>В итоге созрел хак для модуля HTML-Template, сперва такой:</p>
<p>open(TEMPLATE,"&lt;:encoding(utf-8)", $filepath);</font></span></p>
<p>А затем, благодаря Mons Anderson с moscow.pm, он был оптимизирован:</p>
<p>open(TEMPLATE,'&lt;:utf8', $filepath);</p>
<p>Хакнутый модуль доступен <a href="http://perlmonks.org.ru/vorota_v_perl/HTML-Template.zip" target="_blank">здесь</a></p>
<p>&nbsp;</p>
<p>P.S.</p>
<p>Тема неожиданно получила продолжение в списке рассылки <a href="http://moscow.pm.org/" target="_blank">moscow.pm</a>. А именно, высказали опасения насчет безопасности использования второго способа с utf8. В качестве аргумента приводится статья: <a href="http://www.perlmonks.org/?node_id=644786" target="_blank">http://www.perlmonks.org/?node_id=644786</a>. Думаю каждый сам решит для себя как лучше здесь поступить. В коде самого модуля вызов open(TEMPLATE...) встречается всего два раза - и желающие всегда смогут&nbsp; изменить его на нужный вариант.</p>]]>
    </content>
</entry>

<entry>
    <title>Переход с ActivePerl на Strawberry perl</title>
    <link rel="alternate" type="text/html" href="http://perlmonks.org.ru/vorota_v_perl/2009/12/perexod-s-activeperl-na-strawberry-perl.html" />
    <id>tag:perlmonks.org.ru,2009:/vorota_v_perl//1.45</id>

    <published>2009-12-24T14:09:42Z</published>
    <updated>2009-12-29T12:18:44Z</updated>

    <summary>Сегодня наконец-то решился на переход с activeperl на strawberry. Соблазнила возможность устанавливать модули со CPAN. Переход состоялся абсолютно без глючно, в том смысле что разработку я веду в ActiveState Komodo, и strawberry отлично подружился с этой IDE. Среди прочих приятностей...</summary>
    <author>
        <name>Monks</name>
        
    </author>
    
        <category term="Заметки программиста" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="activeperl" label="ActivePerl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="strawberry" label="strawberry" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ru" xml:base="http://perlmonks.org.ru/vorota_v_perl/">
        <![CDATA[<p>Сегодня наконец-то решился на переход с activeperl на strawberry. Соблазнила возможность устанавливать модули со CPAN. Переход состоялся абсолютно без глючно, в том смысле что разработку я веду в ActiveState Komodo, и strawberry отлично подружился с этой IDE. Среди прочих приятностей - поддержка ppm репозиториев (можно ставить как со CPAN, так и с ppm репозитория).</p>]]>
        
    </content>
</entry>

<entry>
    <title>Perl 22 года.</title>
    <link rel="alternate" type="text/html" href="http://perlmonks.org.ru/vorota_v_perl/2009/12/perl-22-goda.html" />
    <id>tag:perlmonks.org.ru,2009:/vorota_v_perl//1.44</id>

    <published>2009-12-18T07:43:08Z</published>
    <updated>2009-12-18T07:47:26Z</updated>

    <summary>Сегодня день рождения Perl, кто-то относится к этому серьезно, кто-то не очень :). Perl исполняется 22 года сегодня, хороший возраст. В этом возрасте человек уже полностью самостоятельный :), а наш Perl скоро станет папой (я надеюсь), с появлением Perl6 :)....</summary>
    <author>
        <name>Monks</name>
        
    </author>
    
        <category term="Заметки программиста" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ru" xml:base="http://perlmonks.org.ru/vorota_v_perl/">
        <![CDATA[<p>Сегодня день рождения Perl, кто-то относится к этому серьезно, кто-то не очень :). Perl исполняется 22 года сегодня, хороший возраст. В этом возрасте человек уже полностью самостоятельный :), а наш Perl скоро станет папой (я надеюсь), с появлением Perl6 :).</p>
<p>Зарефрешим мемори:</p>
<p>18 декабря, 1987, Ларри Уолл выложил Perl 1 в общий доступ. ;-)</p>]]>
        
    </content>
</entry>

<entry>
    <title>Moscow.pm 3декабря. Offline</title>
    <link rel="alternate" type="text/html" href="http://perlmonks.org.ru/vorota_v_perl/2009/12/moscowpm-3dekabrja-offline.html" />
    <id>tag:perlmonks.org.ru,2009:/vorota_v_perl//1.43</id>

    <published>2009-12-04T09:32:07Z</published>
    <updated>2009-12-04T09:42:54Z</updated>

    <summary><![CDATA[3 декабря в офисе Рамблер&nbsp; прошла офлайн встреча участников группы Moscow.pm Успел послушать только 4-х докладчиков, к сожалению, но и то что увидел/услышал - очень понравилось с точки зрения и организации и вовлеченности участников в процесс. Хотел бы также в...]]></summary>
    <author>
        <name>Monks</name>
        
    </author>
    
        <category term="Заметки программиста" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="monks" label="monks" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="moscowpm" label="moscow.pm" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ru" xml:base="http://perlmonks.org.ru/vorota_v_perl/">
        <![CDATA[<p>3 декабря в офисе <a href="http://rambler.ru/">Рамблер</a>&nbsp; прошла офлайн встреча участников группы <a href="http://moscow.pm.org/">Moscow.pm</a></p>
<p>Успел послушать только 4-х докладчиков, к сожалению, но и то что увидел/услышал - очень понравилось с точки зрения и организации и вовлеченности участников в процесс.</p>
<p>Хотел бы также в этой заметке прорекламировать очень полезный инструмент для freebsd администраторов и разработчиков от Андрея Костенко. Почему в этой заметке? Потому что об этой программе было рассказано на офлайновой встрече. Итак:</p>
<p><a href="http://search.cpan.org/~gugu/App-Pm2Port-0.23/lib/App/Pm2Port.pm">Утилита </a>&nbsp;для создания портов для FreeBSD из дистрибутивов CPAN. Действительно полезная вещь, ибо сам неоднократно мучался с этим. Помимо того что вещь полезная - она еще и очень friendly-used :).</p>
<p>P.S.</p>
<p>Надеюсь что презентации со встречи скоро появятся на соответствующих ресурсах.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Новая книга: Perl, memcached, MySQL, Apache</title>
    <link rel="alternate" type="text/html" href="http://perlmonks.org.ru/vorota_v_perl/2009/11/novaja-kniga-perl-memcached-mysql-apache.html" />
    <id>tag:perlmonks.org.ru,2009:/vorota_v_perl//1.42</id>

    <published>2009-11-13T07:59:55Z</published>
    <updated>2009-11-13T08:10:30Z</updated>

    <summary><![CDATA[&nbsp; &nbsp; Вышла очень интересная, на мой взгляд книга: "Developing Web Applications with Apache, MySQL, memcached, and Perl" by Patrick Galbraith. Самое удивительное что ее уже можно найти в сети :). &nbsp;...]]></summary>
    <author>
        <name>Monks</name>
        
    </author>
    
        <category term="Заметки программиста" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="memcached" label="memcached" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mysql" label="mysql" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ru" xml:base="http://perlmonks.org.ru/vorota_v_perl/">
        <![CDATA[<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/11/0470414642-145.html','popup','width=300,height=379,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/11/0470414642-145.html"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="379" alt="Developing Web Applications with Apache, MySQL, memcached, and Perl" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/11/0470414642-thumb-300x379-145.jpg" width="300" /></a>Вышла очень интересная, на мой взгляд книга: "Developing Web Applications with Apache, MySQL, memcached, and Perl" by Patrick Galbraith. Самое удивительное что ее уже можно найти в сети :).</p>
<p>&nbsp;</p>]]>
        
    </content>
</entry>

<entry>
    <title>Играемся со Skype из Perl (SkypeAPI)</title>
    <link rel="alternate" type="text/html" href="http://perlmonks.org.ru/vorota_v_perl/2009/10/igraemsja-so-skype-iz-perl-skypeapi.html" />
    <id>tag:perlmonks.org.ru,2009:/vorota_v_perl//1.41</id>

    <published>2009-10-21T12:02:53Z</published>
    <updated>2009-10-21T13:03:38Z</updated>

    <summary> Skype давно уже открыл свой API для сторонних разработчиков. Написано уже масса библиотек для работы с его протоколом для разных языков. Что нам может предложить perl по этому поводу? Порыскав на cpan, нашел всего лишь 1 модуль - SkypeAPI...</summary>
    <author>
        <name>Monks</name>
        
    </author>
    
        <category term="Заметки программиста" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="skype" label="Skype" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="skypeapi" label="SkypeAPI" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ru" xml:base="http://perlmonks.org.ru/vorota_v_perl/">
        <![CDATA[<font size="2">
<p>Skype давно уже открыл свой API для сторонних разработчиков. Написано уже масса библиотек для работы с его протоколом для разных языков. Что нам может предложить perl по этому поводу?</p>
<p>Порыскав на cpan, нашел всего лишь 1 модуль - <a href="http://search.cpan.org/~laomoi/SkypeAPI-0.08/lib/SkypeAPI.pm" target="_blank">SkypeAPI</a> для поставленной задачи (работа с протоколом Skype). Но это «ВСЕГО ЛИШЬ» преждевременно, как будет рассмотрено ниже - этот модуль покрывает основную часть наших потребностей работы со Skype.</p>
<p>Посмотрев скромную документацию по модулю, а также попытавшись разобраться в иероглифах (сайт с DEMO ROBOTS) - понял что надо идти своим путем, то есть читать <a href="https://developer.skype.com/Docs/ApiDoc/" target="_blank">документацию по API на сайте skype</a> и проверять все на практике.</p></font>]]>
        <![CDATA[<font size="2">
<p><strong>Итак, начнем...</strong></p>
<p>Прежде чем что-либо писать дальше, скажу сразу, что данный модуль работает только под Windows (пока... к сожалению). Так что наша тестовая среда (в моем случае) Windows XP SP3, ActivePerl 5.8.9, Skype 3.8. </p>
<p>Наверное, первый вопрос, который мне зададут - как это будет работать и зачем установленный Skype на компьютере? Как всегда в вопросе - половина ответа. Скрипт на perl работает через установленный клиент Skype, использует текущий аккаунт, который использует Skype на этом компьютере, и совершает все действия от имени этого аккаунта.</p><b>
<p>Получение статуса пользователя.</p></b>
<p>Начнем с очень простой задачи - получение информации о текущем пользователе, получение его статуса и изменение его статуса:</p>
<p><font color="#555555">&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;</font><span class="comments"><em><font color="#666666">#!/usr/bin/perl&nbsp;-w</font></em></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keywords"><font color="#333399">use</font></span><span class="default">&nbsp;</span><span class="identifiers"><strong>strict</strong></span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keywords"><font color="#333399">use</font></span><span class="default">&nbsp;</span><span class="identifiers"><strong>SkypeAPI</strong></span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keywords"><font color="#333399">my</font></span><span class="default">&nbsp;</span><span class="variables"><font color="#400000">$skype</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=</font></span><span class="default">&nbsp;</span><span class="identifiers"><strong>SkypeAPI</strong></span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="keywords"><font color="#333399">new</font></span><span class="operators"><font color="#781f87">();</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keywords"><font color="#333399">if</font></span><span class="operators"><font color="#781f87">(</font></span><span class="default">&nbsp;</span><span class="variables"><font color="#400000">$skype</font></span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers"><strong>attach</strong></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">)</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">{</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keywords"><font color="#333399">my</font></span><span class="default">&nbsp;</span><span class="variables"><font color="#400000">$command</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=</font></span><span class="default">&nbsp;</span><span class="variables"><font color="#400000">$skype</font></span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers"><strong>create_command</strong></span><span class="operators"><font color="#781f87">(</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">{</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#996633">string</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=&gt;</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#996633">"GET&nbsp;USERSTATUS"</font></span><span class="operators"><font color="#781f87">}</font></span><span class="default">&nbsp;&nbsp;</span><span class="operators"><font color="#781f87">);</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keywords"><font color="#333399">print</font></span><span class="default">&nbsp;</span><span class="variables"><font color="#400000">$skype</font></span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers"><strong>send_command</strong></span><span class="operators"><font color="#781f87">(</font></span><span class="variables"><font color="#400000">$command</font></span><span class="operators"><font color="#781f87">)</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">,</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#996633">"\n"</font></span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keywords"><font color="#333399">print</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#996633">"Now&nbsp;go&nbsp;away\n"</font></span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="comments"><em><font color="#666666">#&nbsp;переведем&nbsp;клиента&nbsp;в&nbsp;статус&nbsp;Нет&nbsp;на&nbsp;месте&nbsp;:)</font></em></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="variables"><font color="#400000">$command</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=</font></span><span class="default">&nbsp;</span><span class="variables"><font color="#400000">$skype</font></span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers"><strong>create_command</strong></span><span class="operators"><font color="#781f87">(</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">{</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#996633">string</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=&gt;</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#996633">"SET&nbsp;USERSTATUS&nbsp;AWAY"</font></span><span class="operators"><font color="#781f87">}</font></span><span class="default">&nbsp;&nbsp;</span><span class="operators"><font color="#781f87">);</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keywords"><font color="#333399">print</font></span><span class="default">&nbsp;</span><span class="variables"><font color="#400000">$skype</font></span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers"><strong>send_command</strong></span><span class="operators"><font color="#781f87">(</font></span><span class="variables"><font color="#400000">$command</font></span><span class="operators"><font color="#781f87">)</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">,</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#996633">"\n"</font></span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;13&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="operators"><font color="#781f87">}</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;14&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keywords"><font color="#333399">else</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">{</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;15&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="keywords"><font color="#333399">print</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#996633">"Please,&nbsp;install&nbsp;Skype&nbsp;on&nbsp;PC&nbsp;and&nbsp;login\n"</font></span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;16&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="keywords"><font color="#333399">exit</font></span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;17&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="operators"><font color="#781f87">}</font></span> <br /></p><font size="2">
<p>Поясню что происходит в этом скрипте, чтобы дальше вам было проще понимать суть происходящего.</p>
<p>Создаем объект для работы с модулем через вызов new.</p>
<p>Подключаемся к клиенту Skype через вызов метода attach (при этом ваш Skype должен выдать предупреждение о том, что программа perl.exe пытается получить доступ к Skype, вы должны разрешить ей это сделать).</p>
<p>Вся остальная работа возлагается фактически на два метода модуля SkypeAPI, Это:</p>
<p>create_command - создает команду на основании переданного значения для string</p>
<p>send_command - передает созданную команду клиенту, и возвращает ответы. Вывод можно сразу отправлять на print или сохранять в любых переменных perl.</p>
<p>Фактически на этом работа с perl завершена и дальше уже будет только работа с командами SkypeAPI, поэтому дальнейшие примеры я буду приводить только в части отправки и обработки команд для SkypeAPI.</p>
<p><strong>Отправляем текстовое сообщение.</strong></p>
<p></font><span class="comments"><em><font color="#666666">#&nbsp;отправляем&nbsp;текстовое&nbsp;сообщение</font></em></span>&nbsp;<br /><span class="variables"><font color="#400000">$command</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=</font></span><span class="default">&nbsp;</span><span class="variables"><font color="#400000">$skype</font></span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers"><strong>create_command</strong></span><span class="operators"><font color="#781f87">(</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">{</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#996633">string</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=&gt;</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#996633">"CHAT&nbsp;CREATE&nbsp;user_vasya"</font></span><span class="operators"><font color="#781f87">}</font></span><span class="default">&nbsp;&nbsp;</span><span class="operators"><font color="#781f87">);</font></span>&nbsp;<br /><span class="keywords"><font color="#333399">my</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">(</font></span><span class="arrays">@a</span><span class="operators"><font color="#781f87">)=</font></span><span class="keywords"><font color="#333399">split</font></span><span class="operators"><font color="#781f87">(</font></span><span class="regex"><font color="#c86400">/&nbsp;/</font></span><span class="operators"><font color="#781f87">,</font></span><span class="variables"><font color="#400000">$skype</font></span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers"><strong>send_command</strong></span><span class="operators"><font color="#781f87">(</font></span><span class="variables"><font color="#400000">$command</font></span><span class="operators"><font color="#781f87">));</font></span><span class="comments"><em><font color="#666666">#$a[1]&nbsp;-&nbsp;CHAT&nbsp;ID</font></em></span>&nbsp;<br /><span class="keywords"><font color="#333399">my</font></span><span class="default">&nbsp;</span><span class="variables"><font color="#400000">$i</font></span><span class="operators"><font color="#781f87">=</font></span><span class="numbers"><font color="#8b0000">0</font></span><span class="operators"><font color="#781f87">;</font></span>&nbsp;<br /><span class="comments"><em><font color="#666666">#&nbsp;слегка&nbsp;поспамим&nbsp;:0)</font></em></span>&nbsp;<br /><span class="keywords"><font color="#333399">while</font></span><span class="operators"><font color="#781f87">(</font></span><span class="variables"><font color="#400000">$i</font></span><span class="operators"><font color="#781f87">&lt;</font></span><span class="numbers"><font color="#8b0000">2</font></span><span class="operators"><font color="#781f87">)</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">{</font></span>&nbsp;<br /><span class="variables"><font color="#400000">$command</font></span><span class="operators"><font color="#781f87">=</font></span><span class="variables"><font color="#400000">$skype</font></span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers"><strong>create_command</strong></span><span class="operators"><font color="#781f87">(</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">{</font></span><span class="strings"><font color="#996633">string</font></span><span class="operators"><font color="#781f87">=&gt;</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#996633">"CHATMESSAGE&nbsp;</font></span><span class="variables"><font color="#400000">$a[</font></span><span class="strings"><font color="#996633">1]&nbsp;Вот&nbsp;так&nbsp;вот"</font></span><span class="operators"><font color="#781f87">}</font></span><span class="operators"><font color="#781f87">);</font></span>&nbsp;<br /><span class="keywords"><font color="#333399">print</font></span><span class="default">&nbsp;</span><span class="variables"><font color="#400000">$skype</font></span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers"><strong>send_command</strong></span><span class="operators"><font color="#781f87">(</font></span><span class="variables"><font color="#400000">$command</font></span><span class="operators"><font color="#781f87">)</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">,</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#996633">"\n"</font></span><span class="operators"><font color="#781f87">;</font></span><br /><span class="variables"><font color="#400000">$i</font></span><span class="operators"><font color="#781f87">++;</font></span>&nbsp;<br /><span class="operators"><font color="#781f87">}</font></span>&nbsp;</p>
<p>&nbsp;</p>
<p><font size="2">В строке&nbsp;3 мы извлекаем результат выполнения команды в массив, для того чтобы извлечь CHAT ID (уникальный идентификатор созданного чата). Вы можете вынести это в какую-либо функцию, я для примера не стал заморачиваться с элегантностью решения.</p>
<p>CHAT CREATE user_vasya - создает новый чат для отправки сообщений пользователю user_vasya</p>
<p>CHATMESSAGE CHAT_ID Сообщение без кавычек будет передано в чат как есть. - эта команда отправляет в указанный по ID чат все слова написанные после CHAT ID</p><font size="2">
<p><strong>Звоним, записываем...</strong></p></font>
<p><span class="comments"><em><font color="#666666">#&nbsp;делаем&nbsp;звонок</font></em></span>&nbsp;<br /><span class="variables"><font color="#400000">$command</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=</font></span><span class="default">&nbsp;</span><span class="variables"><font color="#400000">$skype</font></span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers"><strong>create_command</strong></span><span class="operators"><font color="#781f87">(</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">{</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#996633">string</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=&gt;</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#996633">"CALL&nbsp;user_vasya"</font></span><span class="operators"><font color="#781f87">}</font></span><span class="default">&nbsp;&nbsp;</span><span class="operators"><font color="#781f87">);</font></span>&nbsp;<br /><span class="keywords"><font color="#333399">my</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">(</font></span><span class="arrays">@a</span><span class="operators"><font color="#781f87">)=</font></span><span class="keywords"><font color="#333399">split</font></span><span class="operators"><font color="#781f87">(</font></span><span class="regex"><font color="#c86400">/&nbsp;/</font></span><span class="operators"><font color="#781f87">,</font></span><span class="variables"><font color="#400000">$skype</font></span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers"><strong>send_command</strong></span><span class="operators"><font color="#781f87">(</font></span><span class="variables"><font color="#400000">$command</font></span><span class="operators"><font color="#781f87">));</font></span><span class="comments"><em><font color="#666666">#&nbsp;$a[1]&nbsp;&lt;-&nbsp;ID</font></em></span>&nbsp;<br /><span class="comments"><em><font color="#666666">#&nbsp;запись&nbsp;сообщений</font></em></span>&nbsp;</p>
<p><span class="keywords"><font color="#333399">my</font></span><span class="default">&nbsp;</span><span class="variables"><font color="#400000">$cmd</font></span><span class="operators"><font color="#781f87">=</font></span><span class="strings"><font color="#996633">qq(ALTER&nbsp;CALL&nbsp;</font></span><span class="variables"><font color="#400000">$a[</font></span><span class="strings"><font color="#996633">1]&nbsp;SET_OUTPUT&nbsp;file="d:\\123.wav" </font></span><span class="strings"><font color="#996633">SOUNDCARD="default")</font></span><span class="operators"><font color="#781f87">;</font></span></p>
<p><span class="variables"><font color="#400000">$command</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=</font></span><span class="default">&nbsp;</span><span class="variables"><font color="#400000">$skype</font></span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers"><strong>create_command</strong></span><span class="operators"><font color="#781f87">(</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">{<span class="default">&nbsp;</span><span class="strings"><font color="#996633">string</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=&gt;</font></span>$cmd} );</font></span></p>
<p><span class="keywords"><font color="#333399">print</font></span><span class="default">&nbsp;</span><span class="variables"><font color="#400000">$skype</font></span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers"><strong>send_command</strong></span><span class="operators"><font color="#781f87">(</font></span><span class="variables"><font color="#400000">$command</font></span><span class="operators"><font color="#781f87">)</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">,</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#996633">"\n"</font></span><span class="operators"><font color="#781f87">;</font></span><br /></p>
<p>&nbsp;</p>
<p><font size="2">В данном примере мы позвонили контакту user_vasya (кстати на стационарные телефоны также можем звонить при наличии положительного баланса в Skype, только не забывайте о формате номера <strong>+7495</strong>1234545 (пример для Москвы)). После того как контакт ответил - записываем всю его речь в файл 123.wav на диске d:\ :- ). Так же указываем использовать звуковую карту по умолчанию, это важно!</font></p><font size="2">
<p><strong>Звоним, вещаем...</strong></p>
<p></font><font color="#555555">&nbsp;</font><span class="comments"><em><font color="#666666">#&nbsp;отправка&nbsp;сообщений</font></em></span>&nbsp;<br /><span class="linenumbers"><font color="#555555">&nbsp;</font></span><span class="keywords"><font color="#333399">my</font></span><span class="default">&nbsp;</span><span class="variables"><font color="#400000">$cmd</font></span><span class="operators"><font color="#781f87">=</font></span><span class="strings"><font color="#996633">qq(ALTER&nbsp;CALL&nbsp;</font></span><span class="variables"><font color="#400000">$a</font></span><span class="strings"><font color="#996633">[1]&nbsp;SET_INPUT&nbsp;file="d:\\123.wav"&nbsp;SOUNDCARD="default")</font></span><span class="operators"><font color="#781f87">;</font></span>&nbsp;<br /><span class="linenumbers"><font color="#555555">&nbsp;</font></span><span class="keywords"><font color="#333399">print</font></span><span class="default">&nbsp;</span><span class="variables"><font color="#400000">$cmd</font></span><span class="operators"><font color="#781f87">,</font></span><span class="strings"><font color="#996633">"\n"</font></span><span class="operators"><font color="#781f87">;</font></span>&nbsp;<br /><span class="linenumbers"><font color="#555555">&nbsp;</font></span><span class="variables"><font color="#400000">$command</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=</font></span>&nbsp;<span class="linenumbers"><font color="#555555">&nbsp;&nbsp;</font></span><span class="variables"><font color="#400000">$skype</font></span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers"><strong>create_command</strong></span><span class="operators"><font color="#781f87">(</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">{</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#996633">string</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=&gt;</font></span><span class="default">&nbsp;</span><span class="variables"><font color="#400000">$cmd</font></span><span class="operators"><font color="#781f87">}</font></span><span class="default">&nbsp;&nbsp;</span><span class="operators"><font color="#781f87">);</font></span>&nbsp;<br /><span class="linenumbers"><font color="#555555">&nbsp;</font></span><span class="keywords"><font color="#333399">print</font></span><span class="default">&nbsp;</span><span class="variables"><font color="#400000">$skype</font></span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers"><strong>send_command</strong></span><span class="operators"><font color="#781f87">(</font></span><span class="variables"><font color="#400000">$command</font></span><span class="operators"><font color="#781f87">)</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">,</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#996633">"\n"</font></span>&nbsp;</p><font size="2">
<p>В данном примере все тоже самое, что и в предыдущем, за исключением команды SET_INPUT. Теперь вместо того чтобы записывать речь контакта, мы ему сами воспроизводим файл для прослушивания.</p>
<p><strong>Резюме.</strong></p>
<p>Все довольно просто. Теперь вы можете написать программу для обзвона клиентов с предложением заплатить по долгам, купить ваш продукт по обзвону, и т.п. </p></font></font></font>]]>
    </content>
</entry>

<entry>
    <title>Работаем с CGI::FormBuilder</title>
    <link rel="alternate" type="text/html" href="http://perlmonks.org.ru/vorota_v_perl/2009/10/rabotaem-s-cgiformbuilder.html" />
    <id>tag:perlmonks.org.ru,2009:/vorota_v_perl//1.40</id>

    <published>2009-10-15T12:37:23Z</published>
    <updated>2009-10-15T13:16:17Z</updated>

    <summary><![CDATA[CGI::FormBuilder&nbsp; - очень удобный модуль для работы с web-формами, особенно когда в проекте их много, и в них много элементов. При этом он активно используется в связке с Catalyst'ом, но им можно пользоваться и отдельно, что я и рассмотрю в...]]></summary>
    <author>
        <name>Monks</name>
        
    </author>
    
        <category term="Заметки программиста" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="cgi" label="cgi" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="cgiformbuilder" label="CGI-FormBuilder" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="htmltemplate" label="HTML-Template" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ru" xml:base="http://perlmonks.org.ru/vorota_v_perl/">
        <![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font size="3"><font color="#000000"><font face="Calibri"><span lang="EN-US" style="mso-ansi-language: EN-US">CGI</span>::<span lang="EN-US" style="mso-ansi-language: EN-US">FormBuilder</span><span style="mso-spacerun: yes">&nbsp; </span>- очень удобный модуль для работы с <span lang="EN-US" style="mso-ansi-language: EN-US">web</span>-формами, особенно когда в проекте их много, и в них много элементов. При этом он активно используется в связке с <span lang="EN-US" style="mso-ansi-language: EN-US">Catalyst</span>'ом, но им можно пользоваться и отдельно, что я и рассмотрю в этой заметке. Модуль работает в связке с <span lang="EN-US" style="mso-ansi-language: EN-US">TT</span><span lang="EN-US"> </span>или <span lang="EN-US" style="mso-ansi-language: EN-US">HTML</span>-<span lang="EN-US" style="mso-ansi-language: EN-US">Template</span>, и кажется, он работает даже с <span lang="EN-US" style="mso-ansi-language: EN-US">Mason</span>. </font></font></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">Итак, для наглядности создадим небольшую форму для обратной связи с помощью данного модуля. Будем использовать <span lang="EN-US" style="mso-ansi-language: EN-US">HTML</span>-<span lang="EN-US" style="mso-ansi-language: EN-US">Template</span><span lang="EN-US"> </span>для обработки шаблонов (при этом нам не надо отдельно загружать данный модуль, <span lang="EN-US" style="mso-ansi-language: EN-US">CGI</span>-<span lang="EN-US" style="mso-ansi-language: EN-US">FormBuilder</span><span lang="EN-US"> </span>будет использовать его абсолютно прозрачно для пользователя).</font></p>]]>
        <![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">Создание формы мы начнем от обратного, то есть не с описания шаблона формы, а с программирования формы, пусть вам это не кажется странным, ведь в заметке я хочу в первую очередь показать, как работать с модулем из кода <span lang="EN-US" style="mso-ansi-language: EN-US">Perl</span>, хотя и работу с шаблонами мы также рассмотрим.</font></p>
<p><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><br /></span><span class="linenumbers"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#555555">&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span class="keywords"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#871f78">my</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;</span></span><span class="variables"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">$form</span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">=</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;</span></span><span class="identifiers"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">CGI</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">::</font></span></span><span class="identifiers"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">FormBuilder</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">-&gt;</font></span></span><span class="keywords"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#871f78">new</font></span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">(</font></span></span><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"> <br /></span><span class="linenumbers"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#555555">&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span class="strings"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#23238e">source</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">=&gt;</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;</span></span><span class="strings"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#23238e">'./feedback.fb'</font></span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">,</font></span></span><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><br /></span><span class="linenumbers"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#555555">&nbsp;&nbsp;13&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span class="strings"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#23238e">messages</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">=&gt;</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;</span></span><span class="strings"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#23238e">'./messages.ru'</font></span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">,</font></span></span><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><br /></span><span class="linenumbers"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#555555">&nbsp;&nbsp;14&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span class="strings"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#23238e">template</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">=&gt;</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;</span></span><span class="strings"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#23238e">'./feedback.html'</font></span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">,</font></span></span><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><br /></span><span class="linenumbers"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#555555">&nbsp;&nbsp;15&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span class="strings"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#23238e">title</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">=&gt;</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;</span></span><span class="strings"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#23238e">'Форма&nbsp;обратной&nbsp;связи'</font></span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">,</font></span></span><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><br /></span><span class="linenumbers"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#555555">&nbsp;&nbsp;16&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">);</font></span></span><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"> <o:p></o:p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">Создаем объект для работы с формой. Рассмотрим опции переданные в конструктор <span lang="EN-US" style="mso-ansi-language: EN-US">new</span>.</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><em><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><font size="3"><font color="#000000">Source - указывает путь к файлу-шаблону формы<o:p></o:p></font></font></span></em></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><em><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><font size="3"><font color="#000000">Message - указывает путь к файлу-шаблону для сообщений JavaScript, которые выводятся при проверке формы на валидность (по умолчанию модуль выводит сообщения на английском языке, и если вам нужна локализация - указываете нужный файл, о его формате я расскажу позже)<o:p></o:p></font></font></span></em></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><em><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><font size="3"><font color="#000000">Template - указывает путь к файлу-шаблону HTML-Template<o:p></o:p></font></font></span></em></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font size="3"><font color="#000000"><em><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">Title - это уже один из параметров для шаблона HTML-Template</span></em><em><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><o:p></o:p></span></em></font></font></p>
<p><span style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Courier New'">Теперь напишем небольшой блок условий, для обработки добавленной формы:<o:p></o:p></span></p>
<p><span lang="EN-US" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US"><br /></span><span class="linenumbers"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#555555">&nbsp;&nbsp;20&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span class="keywords"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#871f78">if</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">(</font></span></span><span class="variables"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">$form</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">-&gt;</font></span></span><span class="identifiers"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">submitted</span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">&amp;&amp;</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;</span></span><span class="variables"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">$form</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">-&gt;</font></span></span><span class="identifiers"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">validate</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">)</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">{</font></span></span><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"> <br /></span><span class="linenumbers"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#555555">&nbsp;&nbsp;21&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span class="variables"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">$form</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">-&gt;</font></span></span><span class="identifiers"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">title</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">(</font></span></span><font color="#23238e"><span class="strings"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">'Успешно&nbsp;добавлен</span></span><span class="strings"><span style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'">о</span></span><span class="strings"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">'</span></span></font><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">);</font></span></span><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"> <br /></span><span class="linenumbers"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#555555">&nbsp;&nbsp;22&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span class="variables"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">$in</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">{</font></span></span><span class="strings"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#23238e">name</font></span></span><font color="#781f87"><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">}</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast"> </span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">=</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast"> </span></span></font><span class="variables"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">$form</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">-&gt;</font></span></span><span class="identifiers"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">field</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">(</font></span></span><span class="strings"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#23238e">'name'</font></span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">);</font></span></span><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"> <br /></span><span class="linenumbers"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#555555">&nbsp;&nbsp;23&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span class="variables"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">$form</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">-&gt;</font></span></span><span class="identifiers"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">tmpl_param</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">(</font></span></span><span class="strings"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#23238e">user</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;&nbsp;</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">=&gt;</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;</span></span><span class="variables"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">$in</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">{</font></span></span><span class="strings"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#23238e">name</font></span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">});</font></span></span><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"> <br /></span><span class="linenumbers"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#555555">&nbsp;&nbsp;24&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span class="keywords"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#871f78">print</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;</span></span><span class="variables"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">$form</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">-&gt;</font></span></span><span class="identifiers"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">confirm </span></span><span class="strings"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#23238e">template</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">=&gt;</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;</span></span><span class="strings"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#23238e">'./success.htm'</font></span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">);</font></span></span><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"> <br /></span><span class="linenumbers"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#555555">&nbsp;&nbsp;25&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">}</font></span></span><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"> <br /></span><span class="linenumbers"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#555555">&nbsp;&nbsp;26&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span class="keywords"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#871f78">else</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">{</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp; </span></span><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><br /></span><span class="linenumbers"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#555555">&nbsp;&nbsp;27&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span class="keywords"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#871f78">print</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;</span></span><span class="variables"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">$form</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">-&gt;</font></span></span><span class="identifiers"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">render</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">(</font></span></span><span class="strings"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#23238e">sticky</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;</span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">=&gt;</font></span></span><span class="default"><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">&nbsp;</span></span><span class="numbers"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#8b0000">1</font></span></span><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#781f87">);</font></span></span><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"> <br /></span><span class="linenumbers"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><font color="#555555">&nbsp;&nbsp;28&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><font color="#781f87"><span class="operators"><span lang="EN" style="FONT-SIZE: 11.5pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN">}</span></span><span lang="EN" style="FONT-SIZE: 11.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><em><span lang="EN" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><o:p><font color="#000000" size="3">&nbsp;</font></o:p></span></em></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">Методы <span lang="EN-US" style="mso-ansi-language: EN-US">CGI</span>-<span lang="EN-US" style="mso-ansi-language: EN-US">FormBuilder</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US">submitted</span><span lang="EN-US"> </span>и <span lang="EN-US" style="mso-ansi-language: EN-US">validate</span><span lang="EN-US"> </span>возвращают <span lang="EN-US" style="mso-ansi-language: EN-US">true</span>, если форма отправлена и прошла проверку, в противном случае возвращаем форму. Параметр <span lang="EN-US" style="mso-ansi-language: EN-US">sticky</span> =&gt; 1 позволяет сохранить уже введенные пользователем данные и не очищать форму («приклеивает» значения формы).</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font size="3"><font color="#000000"><font face="Calibri">Итак, если форма добавлена, мы перезаписываем <span lang="EN-US" style="mso-ansi-language: EN-US">title</span><span lang="EN-US"> </span>страницы с информацией типа «Успешно добавлено». Затем получаем из формы значение поля <span lang="EN-US" style="mso-ansi-language: EN-US">name</span>, для этого используется модуль <span lang="EN-US" style="mso-ansi-language: EN-US">CGI</span>. (<span lang="EN-US" style="mso-ansi-language: EN-US">NB</span>: модуль предполагает использование <span lang="EN-US" style="mso-ansi-language: EN-US">CGI</span>.<span lang="EN-US" style="mso-ansi-language: EN-US">pm</span><span lang="EN-US"> </span>для работы с входными/выходными данными, в данном случае я использую его так: <span lang="EN-US" style="mso-ansi-language: EN-US">use</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US">CGI</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US">qw</span> (<span lang="EN-US" style="mso-ansi-language: EN-US">param</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US">header</span>)).<span lang="EN-US" style="mso-ansi-language: EN-US"><o:p></o:p></span></font></font></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">Вот собственно и весь код по отображению формы. Теперь перейдем к написанию шаблонов.</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font size="3"><font color="#000000"><font face="Calibri">Начнем с шаблона формы <span lang="EN-US" style="mso-ansi-language: EN-US">feedback</span>.<span lang="EN-US" style="mso-ansi-language: EN-US">fb</span></font></font></font></p><font size="3"><font color="#000000"><font face="Calibri"><span lang="EN-US" style="mso-ansi-language: EN-US">
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong># метод пост, заголовок не отправлять<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong>method: POST<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong>header: 0<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><o:p><strong>&nbsp;</strong></o:p></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong># define fields<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong>fields:<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><strong><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"># </span></span><span class="MsoBookTitle"><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">имя</span></span><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><o:p></o:p></span></span></strong></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>name:<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><strong><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span class="MsoBookTitle"><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">label:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Ваше имя<o:p></o:p></span></span></strong></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span># type:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>text по умолчанию<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><strong><span class="MsoBookTitle"><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">size:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>30<o:p></o:p></span></span></strong></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>style:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>background:#FFF39C;text-align:right;<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>required:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>1<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><o:p><strong>&nbsp;</strong></o:p></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong># E-MAIL<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>email:<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><strong><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>label:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span class="MsoBookTitle"><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">Эл</span></span><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">. </span></span><span class="MsoBookTitle"><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">почта</span></span><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><o:p></o:p></span></span></strong></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>size:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>30<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>validate:<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>EMAIL<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>style:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>background:#FFF39C;text-align:right;<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>required:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>1<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><o:p><strong>&nbsp;</strong></o:p></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><strong><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"># </span></span><span class="MsoBookTitle"><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">сайт</span></span><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><o:p></o:p></span></span></strong></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>domain:<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><strong><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>label:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span class="MsoBookTitle"><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">Ваш</span></span><span class="MsoBookTitle"><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"> </span></span><span class="MsoBookTitle"><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">сайт</span></span><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><o:p></o:p></span></span></strong></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>size:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>30<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>validate:<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>/^.+\.ru/<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>style:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>background:#FFF39C;text-align:right;<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>required:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>1<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><o:p><strong>&nbsp;</strong></o:p></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><strong><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"># </span></span><span class="MsoBookTitle"><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">сообщение</span></span><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><o:p></o:p></span></span></strong></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>message<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><strong><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>label:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span class="MsoBookTitle"><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">Сообщение</span></span><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><o:p></o:p></span></span></strong></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>type:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>textarea<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>rows:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>5<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cols:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>50<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>style:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>background:#FFF39C;text-align:right;<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><strong><span class="MsoBookTitle"><span lang="EN-US" style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span class="MsoBookTitle"><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">required:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>1<o:p></o:p></span></span></strong></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><o:p><strong>&nbsp;</strong></o:p></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><o:p><strong>&nbsp;</strong></o:p></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong># Кнопка сабмита<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><span style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"><strong>submit:<span style="mso-spacerun: yes">&nbsp; </span>Отправить вопрос<o:p></o:p></strong></span></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt">Язык описания шаблона формы - <span lang="EN-US" style="mso-ansi-language: EN-US">YAML</span>, довольно простой и удобный, для интересующихся отправляю на википедию. Несколько пояснений: </p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt">- <span lang="EN-US" style="mso-ansi-language: EN-US">LABEL</span><span lang="EN-US"> </span>необходим для того чтобы <span lang="EN-US" style="mso-ansi-language: EN-US">JavaScript</span><span lang="EN-US"> </span>при генерации ошибок выдавал не имя формы из <span lang="EN-US" style="mso-ansi-language: EN-US">HTML</span> (тэг <span lang="EN-US" style="mso-ansi-language: EN-US">name</span>), а что-то человекопонятное.</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt">- <span lang="EN-US" style="mso-ansi-language: EN-US">TYPE</span> - по умолчанию <span lang="EN-US" style="mso-ansi-language: EN-US">text</span>, для типа <span lang="EN-US" style="mso-ansi-language: EN-US">select</span><span lang="EN-US"> </span>можно передавать ссылку на массив в опции <span lang="EN-US" style="mso-ansi-language: EN-US">options</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 36pt"><span style="mso-spacerun: yes">&nbsp; </span>type:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>select</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>options:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>\&amp;return_sources</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt">При этом опция <span lang="EN-US" style="mso-ansi-language: EN-US">options</span>: принимает ссылку на функцию, которая и возвращает нужный формат данных (<span lang="EN-US" style="mso-ansi-language: EN-US">return</span>_<span lang="EN-US" style="mso-ansi-language: EN-US">sources</span><span lang="EN-US"> </span>- обычная функция описанная в теле основного скрипта, и не вызываемая оттуда, а просто описанная там в блоке <span lang="EN-US" style="mso-ansi-language: EN-US">sub</span> {} )</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt 36pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1"><span style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><span style="mso-list: Ignore">-<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US">REQUIRED</span> - опция принимает 0 или 1, и определяет является ли поле обязательным к заполнению</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt 36pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1"><span style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><span style="mso-list: Ignore">-<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US">STYLE - custom </span>стиль для элемента</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt 36pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1"><span style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><span style="mso-list: Ignore">-<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US">VALIDATE</span> - проверка для поля, поддерживает уже предопределенные регэкспы типа: <span lang="EN-US" style="mso-ansi-language: EN-US">EMAIL</span>, <span lang="EN-US" style="mso-ansi-language: EN-US">PHONE</span>, <span lang="EN-US" style="mso-ansi-language: EN-US">INT</span><span lang="EN-US"> </span>и т.п., а также <span lang="EN-US" style="mso-ansi-language: EN-US">custom</span><span lang="EN-US"> </span>регэкспы (никак не отвяжусь от этого <span lang="EN-US" style="mso-ansi-language: EN-US">custom</span>...)</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt">Опции также предусматривают <span lang="EN-US" style="mso-ansi-language: EN-US">custom</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US">JavaScript</span>, То есть написанный прямо в этом файле в опциях конкретного поля.</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt">Думаю, достаточно о шаблонах для формы, теперь к шаблону <span lang="EN-US" style="mso-ansi-language: EN-US">HTML</span>.</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt">Шаблон почти полностью повторяет стиль <span lang="EN-US" style="mso-ansi-language: EN-US">HTML</span>-<span lang="EN-US" style="mso-ansi-language: EN-US">Template</span>, только для того чтобы прописать где будет у нас находиться конкретное поле (тэг <span lang="EN-US" style="mso-ansi-language: EN-US">input</span>) пишем:</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><span lang="EN-US" style="mso-ansi-language: EN-US">&lt;td height=30&gt; &lt;b&gt;</span>Ваш<span lang="EN-US" style="mso-ansi-language: EN-US"> email: *&lt;/b&gt;&lt;/td&gt;<o:p></o:p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><span lang="EN-US" style="mso-ansi-language: EN-US">&lt;td bgcolor=#ffffff&gt; &lt;tmpl_var field-email&gt;&lt;/td&gt;<o:p></o:p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt">Для того чтобы определить границы формы (тэги &lt;<span lang="EN-US" style="mso-ansi-language: EN-US">form</span>&gt; и &lt;/<span lang="EN-US" style="mso-ansi-language: EN-US">form</span>&gt;) используем:</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><span lang="EN-US" style="mso-ansi-language: EN-US">&lt;tmpl_var form-start&gt; </span>и<span style="mso-ansi-language: EN-US"> <span lang="EN-US">&lt;tmpl_var form-end&gt;, </span></span>соответственно<span lang="EN-US" style="mso-ansi-language: EN-US">.<o:p></o:p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt">Для того чтобы модуль <span lang="EN-US" style="mso-ansi-language: EN-US">CGI</span>-<span lang="EN-US" style="mso-ansi-language: EN-US">FormBuilder</span><span lang="EN-US"> </span>генерил <span lang="EN-US" style="mso-ansi-language: EN-US">JS</span><span lang="EN-US"> </span>код, необходимо в тэгах &lt;<span lang="EN-US" style="mso-ansi-language: EN-US">head</span>&gt;&lt;/<span lang="EN-US" style="mso-ansi-language: EN-US">head</span>&gt; вставить:</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt">&lt;tmpl_var js-head&gt;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt">Вот собственно и все.</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt">Шаблон для <span lang="EN-US" style="mso-ansi-language: EN-US">custom</span>-сообщений <span lang="EN-US" style="mso-ansi-language: EN-US">JS</span> (<span lang="EN-US" style="mso-ansi-language: EN-US">messages</span>.<span lang="EN-US" style="mso-ansi-language: EN-US">ru</span>) выглядит так:</p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: EN-US">#<o:p></o:p></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: EN-US"># messages.ru - messages for Russian<o:p></o:p></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: EN-US">#<o:p></o:p></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: EN-US">js_invalid_start<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></span>Обнаружено<span lang="EN-US" style="mso-ansi-language: EN-US"> %s </span>ошибок<span lang="EN-US" style="mso-ansi-language: EN-US">:<o:p></o:p></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: EN-US">js_invalid_default<span style="mso-spacerun: yes">&nbsp; </span>- </span>Поле<span lang="EN-US" style="mso-ansi-language: EN-US"> "%s" </span>заполнено<span style="mso-ansi-language: EN-US"> </span>неверно<span lang="EN-US" style="mso-ansi-language: EN-US"><o:p></o:p></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt">js_invalid_input<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>- Поле "%s" заполнено неверно</p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: EN-US">js_invalid_end<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>For more help, click the "Help" button<o:p></o:p></span></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt">form_invalid_text<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>Форма заполнена неверно или с ошибками!</p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt">js_invalid_select<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>- Не выбрана опция "%s" из списка</p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt">js_invalid_textarea - Не заполнено поле "%s"</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"># - Это комментарии, а дальше просто описаны события и значения для них на русском. Не буду подробно расписывать эти события, я думаю вы без труда отыщите и не описанные мной.</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt">Итак - наша форма готова и работает:</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><o:p></o:p></span></font></font></font>&nbsp;</p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><span class="MsoBookTitle"><strong><font color="#000000"><o:p><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/10/рис1-135.html','popup','width=506,height=368,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/10/рис1-135.html"><font size="3"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="363" alt="Форма обратной всязи" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/10/рис1-thumb-500x363-135.jpg" width="500" /></font></a></o:p></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><o:p><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/10/рис2-138.html','popup','width=467,height=419,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/10/рис2-138.html"><font size="3"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="358" alt="Обработка ошибки" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/10/рис2-thumb-400x358-138.jpg" width="400" /></font></a></o:p><o:p><font size="3"></font></o:p></p>
<p class="MsoNoSpacing" style="MARGIN: 0cm 0cm 0pt"><o:p><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/10/рис3-141.html','popup','width=455,height=173,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/10/рис3-141.html"><font size="3"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="152" alt="Успешно добавлено!" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/10/рис3-thumb-400x152-141.jpg" width="400" /></font></a></o:p></font></strong></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">Весь код описанный в заметке лежит <a href="http://perlmonks.org.ru/files/code01.zip">здесь</a>.</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><b style="mso-bidi-font-weight: normal"><font size="3"><font color="#000000"><font face="Calibri">Резюме:<o:p></o:p></font></font></font></b></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">В итоге мы получили очень правильно структурированный проект (может слишком громко для такого примера, но кто сталкивался в практике - тот поймет). Если нам необходимо изменить длину какого-то поля, его тип, или вставить новое поле - достаточно внести изменения либо в один файл шаблон формы, либо в шаблон формы и шаблон <span lang="EN-US" style="mso-ansi-language: EN-US">html</span> (в зависимости от глобальности изменений). В любом случае - проект очень ясный и легко читаемый, с ним удобно работать и развивать.</font></p>]]>
    </content>
</entry>

<entry>
    <title>Очередная оценка популярности языков. Perl лидирует!</title>
    <link rel="alternate" type="text/html" href="http://perlmonks.org.ru/vorota_v_perl/2009/09/ocherednaja-ocenka-populjarnosti-jazikov-perl-lidiruet.html" />
    <id>tag:perlmonks.org.ru,2009:/vorota_v_perl//1.39</id>

    <published>2009-09-09T07:55:01Z</published>
    <updated>2009-09-10T07:59:22Z</updated>

    <summary><![CDATA[В рассылке moscow-pm@pm.org&nbsp;сегодня промелькнул линк на очередную оценку популярности языков по 2009 году, основанную на результатах соревнований. Сравнивая 2008 и 2009 год по итогам интересующего нас Perl (в первую очередь), можно сказать о небольшом росте его популярности в абсолюных единицах,...]]></summary>
    <author>
        <name>Monks</name>
        
    </author>
    
        <category term="Заметки программиста" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="community" label="community" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="java" label="Java" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ru" xml:base="http://perlmonks.org.ru/vorota_v_perl/">
        <![CDATA[В рассылке <span style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: RU; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a>&nbsp;сегодня промелькнул <noindex><a href="http://www.go-hero.net/jam/09/languages" target="_blank" rel="nofollow">линк </a></noindex>на очередную оценку популярности языков по 2009 году, основанную на результатах соревнований. Сравнивая 2008 и 2009 год по итогам интересующего нас Perl (в первую очередь), можно сказать о <em><strike>небольшом</strike></em> росте его популярности в абсолюных единицах, но давайте посчитаем в процентном соотношении его рост.</span>]]>
        <![CDATA[<p><font face="Calibri" size="3">Взгляните сперва на эти диаграммы по 2008 и 2009 годам соответственно:</font></p>
<p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/chart2008-128.html','popup','width=380,height=220,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/chart2008-128.html"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="220" alt="2008 год" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/chart2008-thumb-380x220-128.png" width="380" /></a></span></p>
<p align="center">Рис. 1. Данные 2008 года</p>
<p align="center">
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/chart2009-131.html','popup','width=380,height=220,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/chart2009-131.html"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="220" alt="2009 год" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/chart2009-thumb-380x220-131.png" width="380" /></a></span></p>
<p align="center">Рис. 2. Данные 2009 года</p>
<p align="left">А теперь посмотрим процентное соотношение прироста:</p>
<p align="left"><strong>Perl 40.2 %</strong></p>
<p align="left">Python 36.7%</p>
<p align="left">C++ 36.6%</p>
<p align="left">Java 13.3%</p>
<p align="left">Ruby только в этом году смог выделиться из группы Others, что тоже очень не плохо.</p>
<p align="left">Если учесть долю Perl в общем кол-ве от диаграммы, то опять же получаем:</p>
<p align="left">2008 год - доля Perl 2.7%</p>
<p align="left">2009 год - доля Perl 3.02%</p>
<p align="left">Кто сказал что Perl умер? Киньте в него камень!*</p>
<p align="left">&nbsp;</p>
<p align="left"><font style="FONT-SIZE: 0.8em">* - надеюсь, виртуальный, ведь вы не кровожадны? :)</font></p>
<p><font size="3"></font>&nbsp;</p>]]>
    </content>
</entry>

<entry>
    <title>Работаем в ActiveState Komodo 5.x IDE Pro</title>
    <link rel="alternate" type="text/html" href="http://perlmonks.org.ru/vorota_v_perl/2009/09/rabotaem-v-activestate-komodo-5x-ide-pro.html" />
    <id>tag:perlmonks.org.ru,2009:/vorota_v_perl//1.38</id>

    <published>2009-09-02T09:19:42Z</published>
    <updated>2009-09-02T09:48:27Z</updated>

    <summary><![CDATA[Я думаю, многие из вас знают&nbsp;эту IDE от ActiveState. Не многие знают, что существует и бесплатная версия этого IDE, правда с довольно ограниченными возможностями против Pro (во всяком случае, мне ее не хватает). В этой статье я расскажу о некоторых...]]></summary>
    <author>
        <name>Monks</name>
        
    </author>
    
        <category term="Заметки программиста" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="activeperl" label="ActivePerl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="activestate" label="activestate" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ide" label="IDE" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="komodo" label="komodo" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ru" xml:base="http://perlmonks.org.ru/vorota_v_perl/">
        <![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">Я думаю, многие из вас знают&nbsp;эту <span lang="EN-US" style="mso-ansi-language: EN-US">IDE</span> от <span lang="EN-US" style="mso-ansi-language: EN-US">ActiveState</span>. Не многие знают, что существует и бесплатная версия этого <span lang="EN-US" style="mso-ansi-language: EN-US">IDE</span>, правда с довольно ограниченными возможностями против <span lang="EN-US" style="mso-ansi-language: EN-US">Pro</span> (во всяком случае, мне ее не хватает). В этой статье я расскажу о некоторых вкусностях версии <span lang="EN-US" style="mso-ansi-language: EN-US">Pro</span>, возможно не столь очевидных для некоторых, возможно кто-то скажет что все это есть в <span lang="EN-US" style="mso-ansi-language: EN-US">Eclipse</span> (и даже больше), но мне лично больше нравится <span lang="EN-US" style="mso-ansi-language: EN-US">Komodo</span>... (когда же NetBeans будет поддерживать <span lang="EN-US" style="mso-ansi-language: EN-US">Perl</span>&amp;?!?!).</font></p>]]>
        <![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">Для начала небольшая таблица сравнения бесплатной версии и платной версии:</font></p>
<p>
<p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/Compare_K-EDIT_1-85.html','popup','width=372,height=337,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/Compare_K-EDIT_1-85.html"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="271" alt="Сравнение версий" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/Compare_K-EDIT_1-thumb-300x271-85.jpg" width="300" /></a></span>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: RU; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><font color="#000000">А вот отсюда вы можете скачать <a href="http://downloads.activestate.com/Komodo/releases/5.1.4/Komodo-Edit-5.1.4-3797.msi" target="_blank">бесплатную версию</a></font></span></form>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: RU; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><font color="#000000">&nbsp;и <span style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: RU; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><a href="http://downloads.activestate.com/Komodo/releases/5.1.4/Komodo-IDE-5.1.4-30485.msi" target="_blank">платную версию</a>.</span></font></span></form></p>
<p></p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: RU; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><font color="#000000"><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: RU; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt">После того как я ввел вас в курс дела - приступаем к работе с <span lang="EN-US" style="mso-ansi-language: EN-US">Komodo</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US">IDE</span>:</p></span></font>
<h1 style="MARGIN: 24pt 0cm 0pt"><font size="5"><font color="#365f91"><font face="Cambria">Стартуем.</font></font></font></h1>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; LINE-HEIGHT: normal"><font color="#000000"></font>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; LINE-HEIGHT: normal"><font color="#000000">После установки и первого запуска <span lang="EN-US" style="mso-ansi-language: EN-US">IDE</span><span lang="EN-US"> </span>надо немного настроить. Не буду описывать всех возможностей доступных в настройках (это выходит за рамки этой статьи), напишу лишь о том что настраиваю я. <span lang="EN-US" style="mso-ansi-language: EN-US"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; LINE-HEIGHT: normal"><font color="#000000">Итак, заходим в пункт меню <span lang="EN-US" style="mso-ansi-language: EN-US">Edit</span><span lang="EN-US"> </span>- <span lang="EN-US" style="mso-ansi-language: EN-US">Preferences</span></font></p>
<p style="MARGIN: 24pt 0cm 0pt"></form>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/Tune_2-89.html','popup','width=625,height=628,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/Tune_2-89.html"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="672" alt="Настройки" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/Tune_2-thumb-669x672-89.jpg" width="669" /></a></span></p>
<p></span>&nbsp;</p>
<p class="MsoListParagraphCxSpFirst" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1"><font color="#000000"><span lang="EN-US" style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"><span style="mso-list: Ignore"><font face="Calibri" size="3">1.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font face="Calibri"><font size="3">Включить<span style="mso-ansi-language: EN-US"> </span>отображение<span style="mso-ansi-language: EN-US"> </span>номеров<span style="mso-ansi-language: EN-US"> </span></font><font size="3">строк</font><span lang="EN-US" style="mso-ansi-language: EN-US"><font size="3"> (Editor-&gt;show line numbers)<o:p></o:p></font></span></font></font></p>
<p class="MsoListParagraphCxSpMiddle" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1"><font color="#000000"><span lang="EN-US" style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"><span style="mso-list: Ignore"><font face="Calibri" size="3">2.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font face="Calibri"><font size="3"><span lang="EN-US" style="mso-ansi-language: EN-US">Internationaliation-&gt;Use Encoding </span>ту<span style="mso-ansi-language: EN-US"> </span>которая<span style="mso-ansi-language: EN-US"> </span>вам<span style="mso-ansi-language: EN-US"> </span></font><font size="3">нужна<span lang="EN-US" style="mso-ansi-language: EN-US"><o:p></o:p></span></font></font></font></p>
<p class="MsoListParagraphCxSpMiddle" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1"><font color="#000000"><span lang="EN-US" style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"><span style="mso-list: Ignore"><font face="Calibri" size="3">3.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font face="Calibri"><span lang="EN-US" style="mso-ansi-language: EN-US"><font size="3">Language Help -&gt; </font></span><font size="3">выбрать </font><span lang="EN-US" style="mso-ansi-language: EN-US"><font size="3">Perl<o:p></o:p></font></span></font></font></p>
<p class="MsoListParagraphCxSpMiddle" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1"><font color="#000000"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"><span style="mso-list: Ignore"><font face="Calibri" size="3">4.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font face="Calibri"><font size="3">В опции <span lang="EN-US" style="mso-ansi-language: EN-US">Languages</span>-&gt;<span lang="EN-US" style="mso-ansi-language: EN-US">Perl</span><span lang="EN-US"> </span>можете поиграться с различными параметрами (влюкчить логгирование отладки, добавить доп. Директории в <span lang="EN-US" style="mso-ansi-language: EN-US">@INC</span></font><font size="3"> и т.п.)</font></font></font></p>
<p class="MsoListParagraphCxSpLast" style="MARGIN: 0cm 0cm 10pt 36pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1"><font color="#000000"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"><span style="mso-list: Ignore"><font face="Calibri" size="3">5.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font face="Calibri"><font size="3"><span lang="EN-US" style="mso-ansi-language: EN-US">Source</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US">Code</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US">Control</span> -&gt; я использую <span lang="EN-US" style="mso-ansi-language: EN-US">Subversion</span>, вы так же можете выбрать: <span lang="EN-US" style="mso-ansi-language: EN-US">Git</span>, <span lang="EN-US" style="mso-ansi-language: EN-US">CVS</span>, <span lang="EN-US" style="mso-ansi-language: EN-US">Perforce</span>, <span lang="EN-US" style="mso-ansi-language: EN-US">Bazaar</span>, <span lang="EN-US" style="mso-ansi-language: EN-US">Mercurial</span></font><font size="3">.</font></font></font></p>
<h1 style="MARGIN: 24pt 0cm 0pt"><font face="Cambria" color="#365f91" size="5">Налево...</font></h1>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><o:p><font face="Calibri" color="#000000" size="3">&nbsp;</font></o:p></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><o:p></o:p><font face="Calibri" color="#000000" size="3">Теперь создадим проект (для наглядности лучше создать проект в уже существующем проекте - и комодо подтянет все файлы и каталоги в текущем каталоге вашего проекта).</font></p>
<p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_3-92.html','popup','width=464,height=503,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_3-92.html"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="433" alt="komodo_3.JPG" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_3-thumb-400x433-92.jpg" width="400" /></a></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt 18pt"><font face="Calibri" color="#000000" size="3">Слева мы видим дерево нашего проекта в файловой системе. Здесь же можно добавлять новые виртуальные/реальные папки в проект, добавлять файлы и т.п.</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt 18pt">
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_4-95.html','popup','width=441,height=473,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_4-95.html"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="429" alt="komodo_4.JPG" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_4-thumb-400x429-95.jpg" width="400" /></a></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt 18pt"><font face="Calibri" color="#000000" size="3">Так же в этом окне мы можем запустить<span style="mso-spacerun: yes">&nbsp; </span><span lang="EN-US" style="mso-ansi-language: EN-US">Code</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US">Browser</span><span lang="EN-US"> </span>и просмотреть наш проект в разрезе подпрограмм, переменных и модулей.</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt 18pt">&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt 18pt">
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_5-98.html','popup','width=291,height=510,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_5-98.html"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="350" alt="komodo_5.JPG" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_5-thumb-200x350-98.jpg" width="200" /></a></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt 18pt"><font face="Calibri" color="#000000" size="3">При двойном клике в <span lang="EN-US" style="mso-ansi-language: EN-US">Code</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US">Browser</span><span lang="EN-US"> </span>по переменной или функции вы перейдете к определению этой функции/переменной.</font></p>
<h1 style="MARGIN: 24pt 0cm 0pt"><font face="Cambria" color="#365f91" size="5">По-центру...</font></h1>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><o:p><font face="Calibri" color="#000000" size="3">&nbsp;</font></o:p></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><o:p></o:p><font color="#000000"><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: RU; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">Теперь посмотрим на центральную часть интерфейса, где открыты файлы проекта. Здесь все стандартно - вкладки по файлам, замочек на вкладке - обозначает, что файл </span><span lang="EN-US" style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">read</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: RU; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">-</span><span lang="EN-US" style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">only</span><span lang="EN-US" style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: RU; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"> </span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: RU; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">(как правило, на модулях из дистрибутива). В Версии 5.1 появилась дополнительная опция при нажатии на </span><span lang="EN-US" style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">Ctrl</span><span lang="EN-US" style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: RU; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"> </span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-ansi-language: RU; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">и наведении мышки на какой-либо функции/методе/переменной она подчеркивается (превращается в гиперссылку?):</span></font>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt 18pt">
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="74" alt="komodo_6.JPG" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_6-thumb-400x74-101.jpg" width="400" /></span><font face="Calibri" color="#000000" size="3">После чего по двойному клику на подчеркнутом тексте вы перейдете к определению этой функции/методу/переменной. Так же сочетание с <span lang="EN-US" style="mso-ansi-language: EN-US">Ctrl</span><span lang="EN-US"> </span>добавляет кое-какие возможности при работе с <span lang="EN-US" style="mso-ansi-language: EN-US">HTML</span> (выбор цвета из палитры, и т.п.).</font></p>
<h1 style="MARGIN: 24pt 0cm 0pt"><font face="Cambria" color="#365f91" size="5">Направо...</font></h1>
<p style="MARGIN: 24pt 0cm 0pt"><font size="3"><font color="#000000"><font face="Calibri">Теперь обратим свой взор на некоторые удобства, которые расположены справа. Кстати, забыл сказать, что если каких-то панелей у вас нет, включите их через меню <span lang="EN-US" style="mso-ansi-language: EN-US">View</span>-&gt;<span lang="EN-US" style="mso-ansi-language: EN-US">Tabs</span>&amp;<span lang="EN-US" style="mso-ansi-language: EN-US">Sidebars</span></font></font></font></p>
<p style="MARGIN: 24pt 0cm 0pt"><font size="3"><font color="#000000"><font face="Calibri"><span lang="EN-US" style="mso-ansi-language: EN-US">
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_7-104.html','popup','width=208,height=360,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_7-104.html"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="346" alt="komodo_7.JPG" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_7-thumb-200x346-104.jpg" width="200" /></a></span></span></font></font></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt 18pt"><font face="Calibri" color="#000000" size="3">Здесь лично я использую две предопределенные опции:</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt 18pt"><font size="3"><font color="#000000"><font face="Calibri"><span lang="EN-US" style="mso-ansi-language: EN-US">Perldoc on selection (for builtin functions) </span>и<span style="mso-ansi-language: EN-US"> <span lang="EN-US">Perldoc on selection (for modules).<o:p></o:p></span></span></font></font></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt 18pt"><font face="Calibri" color="#000000" size="3">Работают они так: ставите курсор на интересующую функцию в тексте скрипта и двойной клик по одной из опций (первая для функций, вторая для модулей). Довольно удобно вызывать документацию в <span lang="EN-US" style="mso-ansi-language: EN-US">html </span>формате.</font></p>
<h1 style="MARGIN: 24pt 0cm 0pt"><font face="Cambria" color="#365f91" size="5">Отладчик...</font></h1>
<p style="MARGIN: 24pt 0cm 0pt"><font face="Calibri" color="#000000" size="3">Встроенный отладчик довольно удобен. Он позволяет помимо стандартного набора опций, эмулировать <span lang="EN-US" style="mso-ansi-language: EN-US">CGI</span>-параметры, что позволяет удобно отлаживать скрипты для <span lang="EN-US" style="mso-ansi-language: EN-US">web</span>. При этом эмулирует он не только <span lang="EN-US" style="mso-ansi-language: EN-US">GET</span>/<span lang="EN-US" style="mso-ansi-language: EN-US">POST</span><span lang="EN-US"> </span>запрос, но и <span lang="EN-US" style="mso-ansi-language: EN-US">cookies</span><span lang="EN-US"> </span>и <span lang="EN-US" style="mso-ansi-language: EN-US">file</span>.</font></p>
<p style="MARGIN: 24pt 0cm 0pt"><font face="Calibri" color="#000000">
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_8-107.html','popup','width=472,height=544,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_8-107.html"><font size="3"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="461" alt="komodo_8.JPG" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_8-thumb-400x461-107.jpg" width="400" /></font></a></span><font size="3">&nbsp;</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font size="3">Естественно поддерживаются <span lang="EN-US" style="mso-ansi-language: EN-US">breakpoint</span>'<span lang="EN-US" style="mso-ansi-language: EN-US">s</span>, в том числе с условиями:</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font size="3">
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_9-110.html','popup','width=420,height=368,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_9-110.html"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="350" alt="komodo_9.JPG" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_9-thumb-400x350-110.jpg" width="400" /></a></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font size="3">В нижней части окна при работе в отладчике отображается различная информация, удобно разбитая по <span lang="EN-US" style="mso-ansi-language: EN-US">name</span>_<span lang="EN-US" style="mso-ansi-language: EN-US">spases</span><span lang="EN-US"> </span><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">J</span></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font size="3"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_10-113.html','popup','width=613,height=360,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_10-113.html"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="352" alt="komodo_10.JPG" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_10-thumb-600x352-113.jpg" width="600" /></a></span></span></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font size="3">Соответственно по вкладкам: просматриваемые переменные, локальные, глобальные, аргументы, и спец. переменные ($!, $' и т.п.) .</font></p>
<h1 style="MARGIN: 24pt 0cm 0pt"><font face="Cambria" color="#365f91" size="5">Напоследок о регэкспах...</font></h1>
<p style="MARGIN: 24pt 0cm 0pt"><font size="3">Всего не расскажешь о <span lang="EN-US" style="mso-ansi-language: EN-US">Komodo</span>, да я думаю этого и не надо - все что вам надо вы в нем найдете сами (или не найдете - но это уже к разработчикам <span style="FONT-FAMILY: Wingdings; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">J</span></span>). Но не сказать о <span lang="EN-US" style="mso-ansi-language: EN-US">RxToolkit</span><span lang="EN-US"> </span>я не могу.</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font size="3">Итак, <span lang="EN-US" style="mso-ansi-language: EN-US">Rx</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US">Toolkit</span><span lang="EN-US"> </span>- удобное средство для отладки ваших регулярных выражений. Вызывается из меню:</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt">&nbsp;</p></font>
<p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_11-116.html','popup','width=511,height=99,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_11-116.html"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="96" alt="komodo_11.JPG" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_11-thumb-500x96-116.jpg" width="500" /></a></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">Лично я работаю с ним так:</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">Выделяю в коде часть регэкспа, к примеру так:</font></p>
<p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_12-119.html','popup','width=265,height=65,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_12-119.html"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="61" alt="komodo_12.JPG" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_12-thumb-250x61-119.jpg" width="250" /></a></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">И вызываю <span lang="EN-US" style="mso-ansi-language: EN-US">Rx</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US">Toolkit</span>, который подхватывает мое выделение и вставляет его в окно для регулярных выражений.<span style="mso-spacerun: yes">&nbsp; </span>Остальное я думаю ясно из следующего рисунка.</font></p>
<p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_13-122.html','popup','width=650,height=600,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_13-122.html"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="553" alt="komodo_13.JPG" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_13-thumb-600x553-122.jpg" width="600" /></a></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">С <span lang="EN-US" style="mso-ansi-language: EN-US">replace</span><span lang="EN-US"> </span>выражениями тулкит работает так:</font></p>
<p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_14-125.html','popup','width=650,height=600,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_14-125.html"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="553" alt="komodo_14.JPG" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/komodo_14-thumb-600x553-125.jpg" width="600" /></a></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">В общем - это удобный инструмент для поиска нужной регулярки, для ее проверки и т.п.</font></p>
<h1 style="MARGIN: 24pt 0cm 0pt"><font face="Cambria" color="#365f91" size="5">Резюме...</font></h1>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font size="3"><font color="#000000"><font face="Calibri"></font></font></font>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font size="3"><font color="#000000"><font face="Calibri">В общем - рассмотренная <span lang="EN-US" style="mso-ansi-language: EN-US">IDE</span><span lang="EN-US"> </span>вполне приличный инструмент для разработчика на <span lang="EN-US" style="mso-ansi-language: EN-US">Perl</span>, хотя кто-то ругает ее за ресурсоемкость (типа отъедает памяти иногда свыше 100Мб), но, на мой взгляд, когда гигабайт уже не размер - считать мегабайты удел неудачников </font><span style="FONT-FAMILY: Wingdings; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">J</span></span><font face="Calibri">. Добавьте сюда дистрибутивы под <span lang="EN-US" style="mso-ansi-language: EN-US">Linux</span>, и вы полюбите этот инструмент.</font></font></font></p>
<p>&nbsp;</p>]]>
    </content>
</entry>

<entry>
    <title>Карта Perl-сообщества. Июль 2009</title>
    <link rel="alternate" type="text/html" href="http://perlmonks.org.ru/vorota_v_perl/2009/09/karta-perl-soobschestva-ijul--2009.html" />
    <id>tag:perlmonks.org.ru,2009:/vorota_v_perl//1.37</id>

    <published>2009-09-01T09:39:30Z</published>
    <updated>2009-09-01T09:48:58Z</updated>

    <summary><![CDATA[&nbsp; Обнаружил тут интересный документ, представляющий собой карту Perl-сообщества, а точнее целую вселенную сайтов связанных с perl. В нем целые созвездия, звезды гиганты, такие как Perl.Org, Cpan.Org и совсем небольшие звездочки такие как PerlMonks.Org.ru :-)...]]></summary>
    <author>
        <name>Monks</name>
        
    </author>
    
        <category term="Заметки программиста" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="community" label="community" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ru" xml:base="http://perlmonks.org.ru/vorota_v_perl/">
        <![CDATA[<p>&nbsp;</p>
<p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/Map-76.html','popup','width=750,height=262,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/Map-76.html"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="139" alt="Map.JPG" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/Map-thumb-400x139-76.jpg" width="400" /></a></span>Обнаружил тут <a href="http://perlmonks.org.ru/files/web.pdf">интересный документ</a>, представляющий собой карту Perl-сообщества, а точнее целую вселенную сайтов связанных с perl. В нем целые созвездия, звезды гиганты, такие как Perl.Org, Cpan.Org и совсем небольшие звездочки такие как PerlMonks.Org.ru :-)</p>]]>
        <![CDATA[<p>
<p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><a onclick="window.open('http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/Web-79.html','popup','width=773,height=737,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/Web-79.html"><img class="mt-image-center" style="DISPLAY: block; MARGIN: 0px auto 20px; TEXT-ALIGN: center" height="381" alt="Web.jpg" src="http://perlmonks.org.ru/vorota_v_perl/assets_c/2009/09/Web-thumb-400x381-79.jpg" width="400" /></a></span></p>
<p>
<p>
<p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline">Наш сайт совем незаметен на этой огромной карте, но надеюсь что он будет расти и радовать полезной информацией его посетителей!</span></p>
<p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline">Спасибо за то, что читаете нас, спасибо за, то что пишете на Perl!</span></p>
<p></p>
<p></p>
<p></p>]]>
    </content>
</entry>

<entry>
    <title>Модуль CGI::Session</title>
    <link rel="alternate" type="text/html" href="http://perlmonks.org.ru/vorota_v_perl/2009/08/modul--cgisession.html" />
    <id>tag:perlmonks.org.ru,2009:/vorota_v_perl//1.36</id>

    <published>2009-08-31T12:58:03Z</published>
    <updated>2009-09-01T09:20:09Z</updated>

    <summary>Довольно распространенный модуль для работы с сессиями CGI::Session. В статье я кратко расскажу, как заставить его работать в связке с MySQL....</summary>
    <author>
        <name>Monks</name>
        
    </author>
    
        <category term="Заметки программиста" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="cgi" label="cgi" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="cgisession" label="cgi-session" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="modules" label="modules" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mysql" label="mysql" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sessions" label="sessions" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ru" xml:base="http://perlmonks.org.ru/vorota_v_perl/">
        <![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">Довольно распространенный модуль для работы с сессиями <span lang="EN-US" style="mso-ansi-language: EN-US">CGI</span>::<span lang="EN-US" style="mso-ansi-language: EN-US">Session</span>. В статье я кратко расскажу, как заставить его работать в связке с <span lang="EN-US" style="mso-ansi-language: EN-US">MySQL</span>.</font></p>]]>
        <![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font size="3"><font color="#000000"><font face="Calibri">Итак<span lang="EN-US" style="mso-ansi-language: EN-US">, </span>в<span style="mso-ansi-language: EN-US"> </span>скрипте<span style="mso-ansi-language: EN-US"> </span>пишем<span lang="EN-US" style="mso-ansi-language: EN-US">:<o:p></o:p></span></font></font></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><span lang="EN-US" style="mso-ansi-language: EN-US"><font face="Calibri" color="#000000" size="3">use CGI::Session ( '-ip_match' );</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">Опция -<span lang="EN-US" style="mso-ansi-language: EN-US">ip</span>_<span lang="EN-US" style="mso-ansi-language: EN-US">match</span><span lang="EN-US"> </span>привязывает сессию к <span lang="EN-US" style="mso-ansi-language: EN-US">IP</span>-адресу. То есть сессия будет привязана к <span lang="EN-US" style="mso-ansi-language: EN-US">IP</span>-адресу пользователя.</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">Для того чтобы хранить сессии в БД <span lang="EN-US" style="mso-ansi-language: EN-US">MySQL</span>, а не в файловой системе, необходимо создать сессию примерно следующим образом:</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font size="3"><font color="#000000"><font face="Calibri">$<span lang="EN-US" style="mso-ansi-language: EN-US">session</span> = <span lang="EN-US" style="mso-ansi-language: EN-US">CGI</span>::<span lang="EN-US" style="mso-ansi-language: EN-US">Session-&gt;new</span>('<span lang="EN-US" style="mso-ansi-language: EN-US">driver</span>:<span lang="EN-US" style="mso-ansi-language: EN-US">mysql</span>', <span lang="EN-US" style="mso-ansi-language: EN-US">undef</span>, { <span lang="EN-US" style="mso-ansi-language: EN-US">Handle</span> =&gt; $<span lang="EN-US" style="mso-ansi-language: EN-US">dbh</span> }<span style="mso-spacerun: yes">&nbsp; </span>);<span lang="EN-US" style="mso-ansi-language: EN-US"><o:p></o:p></span></font></font></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font size="3"><font color="#000000"><font face="Calibri">В данном примере $<span lang="EN-US" style="mso-ansi-language: EN-US">dbh</span><span lang="EN-US"> </span>- стандартный дескриптор подключения к базе данных. В<span style="mso-ansi-language: EN-US"> </span>БД<span style="mso-ansi-language: EN-US"> </span>должна<span style="mso-ansi-language: EN-US"> </span>существовать<span style="mso-ansi-language: EN-US"> </span>таблица<span lang="EN-US" style="mso-ansi-language: EN-US">: <span style="mso-spacerun: yes">&nbsp;</span>sessions,&nbsp;с</span><span style="mso-ansi-language: EN-US"> </span>полями<span lang="EN-US" style="mso-ansi-language: EN-US">: id CHAR(32) NOT NULL PRIMARY KEY, a_session TEXT NOT NULL<o:p></o:p></span></font></font></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">Но если вы укажите только это в своем скрипте, то к удивлению своему не обнаружите в БД записи о сессиях. Для того чтобы все заработало, необходимо еще подключить один модуль:</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><span lang="EN-US" style="mso-ansi-language: EN-US"><font face="Calibri" color="#000000" size="3">use CGI::Session::Driver::mysql;</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">Теперь все заработает!</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">Работа с сессиями осуществляется довольно просто:</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font size="3"><font color="#000000"><font face="Calibri">Создать новую сессию можно методом <span lang="EN-US" style="mso-ansi-language: EN-US">new</span></font></font></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><span lang="EN-US" style="mso-ansi-language: EN-US"><font size="3"><font color="#000000"><font face="Calibri">$session = CGI::Session-&gt;new('driver:mysql', undef, { Handle =&gt; $dbh }<span style="mso-spacerun: yes">&nbsp; </span>);<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">Сохранить данные в сессии (а точнее значение параметра):</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">$session-&gt;param(<span lang="EN-US" style="mso-ansi-language: EN-US">user</span> =&gt; '<span lang="EN-US" style="mso-ansi-language: EN-US">name</span>');</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">После того как вы сохранили данные в сессии вы можете получать эти данные позже:</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><span lang="EN-US" style="mso-ansi-language: EN-US"><font size="3"><font color="#000000"><font face="Calibri">$username = $session-&gt;param('user');<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">Для загрузки сессии (у пользователя идентификатор сессии хранится в <span lang="EN-US" style="mso-ansi-language: EN-US">cookie</span>) используйте <span lang="EN-US" style="mso-ansi-language: EN-US">load</span>:</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><span lang="EN-US" style="mso-ansi-language: EN-US"><font face="Calibri" color="#000000" size="3">$session = CGI::Session-&gt;load('driver:mysql', undef, { Handle =&gt; $dbh } );</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">Чтобы удалить сессию (к примеру для реализации <span lang="EN-US" style="mso-ansi-language: EN-US">logout</span>'<span lang="EN-US" style="mso-ansi-language: EN-US">a</span>) используйте <span lang="EN-US" style="mso-ansi-language: EN-US">delete</span>:</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font size="3"><font color="#000000"><font face="Calibri">$session-&gt;delete();<span lang="EN-US" style="mso-ansi-language: EN-US"><o:p></o:p></span></font></font></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">Вот собственно и все!</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" color="#000000" size="3">Рабочий пример:</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="comments"><em><font color="#696969">#!/usr/bin/perl&nbsp;-w</font></em></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp; </span><br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="comments"><em><font color="#696969">#&nbsp;login.pl</font></em></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">use</font></span><span class="default">&nbsp;</span><span class="identifiers">strict</span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">use</font></span><span class="default">&nbsp;</span><span class="identifiers">warnings</span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">use</font></span><span class="default">&nbsp;</span><span class="identifiers">CGI</span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">use</font></span><span class="default">&nbsp;</span><span class="identifiers">DBI</span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">use</font></span><span class="default">&nbsp;</span><span class="identifiers">CGI</span><span class="operators"><font color="#781f87">::</font></span><span class="identifiers">Session</span><span class="operators"><font color="#781f87">::</font></span><span class="identifiers">Driver</span><span class="operators"><font color="#781f87">::</font></span><span class="identifiers">mysql</span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">use</font></span><span class="default">&nbsp;</span><span class="identifiers">CGI</span><span class="operators"><font color="#781f87">::</font></span><span class="identifiers">Carp</span><span class="default">&nbsp;</span><span class="strings"><font color="#23238e">qw/fatalsToBrowser&nbsp;warningsToBrowser/</font></span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">use</font></span><span class="default">&nbsp;</span><span class="identifiers">CGI</span><span class="operators"><font color="#781f87">::</font></span><span class="identifiers">Session</span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">(</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#23238e">'-ip_match'</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">);</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">my</font></span><span class="default">&nbsp;</span><span class="variables">$config</span><span class="operators"><font color="#781f87">=</font></span><span class="identifiers">read_config</span><span class="operators"><font color="#781f87">(</font></span><span class="strings"><font color="#23238e">'config.cgi'</font></span><span class="operators"><font color="#781f87">);</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">my</font></span><span class="default">&nbsp;</span><span class="variables">$q</span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=</font></span><span class="default">&nbsp;</span><span class="identifiers">CGI-&gt;<span class="keywords"><font color="#871f78">new()</font></span></span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;13&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">my</font></span><span class="default">&nbsp;</span><span class="variables">$dbh</span><span class="operators"><font color="#781f87">=</font></span><span class="identifiers">mysql_connect</span><span class="operators"><font color="#781f87">(</font></span><span class="variables">$config</span><span class="operators"><font color="#781f87">);</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;14&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">my</font></span><span class="default">&nbsp;</span><span class="variables">$usr</span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=</font></span><span class="default">&nbsp;</span><span class="variables">$q</span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers">param</span><span class="operators"><font color="#781f87">(</font></span><span class="strings"><font color="#23238e">'usr'</font></span><span class="operators"><font color="#781f87">);</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;15&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">my</font></span><span class="default">&nbsp;</span><span class="variables">$pwd</span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=</font></span><span class="default">&nbsp;</span><span class="variables">$q</span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers">param</span><span class="operators"><font color="#781f87">(</font></span><span class="strings"><font color="#23238e">'pwd'</font></span><span class="operators"><font color="#781f87">);</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;16&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">my</font></span><span class="default">&nbsp;</span><span class="variables">$session</span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#23238e">''</font></span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;17&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp; </span><br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;18&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">if</font></span><span class="operators"><font color="#781f87">(</font></span><span class="variables">$usr</span><span class="default">&nbsp;</span><span class="keywords"><font color="#871f78">ne</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#23238e">''</font></span><span class="operators"><font color="#781f87">)</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;19&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="operators"><font color="#781f87">{</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;20&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">if</font></span><span class="operators"><font color="#781f87">(</font></span><span class="variables">$usr</span><span class="default">&nbsp;</span><span class="keywords"><font color="#871f78">eq</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#23238e">"demo"</font></span><span class="default">&nbsp;</span><span class="keywords"><font color="#871f78">and</font></span><span class="default">&nbsp;</span><span class="variables">$pwd</span><span class="default">&nbsp;</span><span class="keywords"><font color="#871f78">eq</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#23238e">"demo"</font></span><span class="operators"><font color="#781f87">)</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;21&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="operators"><font color="#781f87">{</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;22&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="variables">$session</span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=</font></span><span class="default">&nbsp;</span><span class="identifiers">CGI</span><span class="operators"><font color="#781f87">::</font></span><span class="identifiers">Session-&gt;<span class="keywords"><font color="#871f78">new</font></span></span><span class="operators"><font color="#781f87">(</font></span><span class="strings"><font color="#23238e">'driver:mysql'</font></span><span class="operators"><font color="#781f87">,</font></span><span class="default">&nbsp;</span><span class="keywords"><font color="#871f78">undef</font></span><span class="operators"><font color="#781f87">,</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">{</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#23238e">Handle</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=&gt;</font></span><span class="default">&nbsp;</span><span class="variables">$dbh</span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">}</font></span><span class="default">&nbsp;&nbsp;</span><span class="operators"><font color="#781f87">);</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;23&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="variables">$session</span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers">param</span><span class="operators"><font color="#781f87">(</font></span><span class="strings"><font color="#23238e">username</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=&gt;</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#23238e">'demo'</font></span><span class="operators"><font color="#781f87">);</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;24&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">print</font></span><span class="default">&nbsp;</span><span class="variables">$session</span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers">header</span><span class="operators"><font color="#781f87">(</font></span><span class="strings"><font color="#23238e">-location</font></span><span class="operators"><font color="#781f87">=&gt;</font></span><span class="strings"><font color="#23238e">'index.pl'</font></span><span class="operators"><font color="#781f87">);</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;25&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="operators"><font color="#781f87">}</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;26&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">else</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;27&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="operators"><font color="#781f87">{</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;28&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">print</font></span><span class="default">&nbsp;</span><span class="variables">$q</span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers">header</span><span class="operators"><font color="#781f87">(</font></span><span class="strings"><font color="#23238e">-type</font></span><span class="operators"><font color="#781f87">=&gt;</font></span><span class="strings"><font color="#23238e">"text/html"</font></span><span class="operators"><font color="#781f87">,</font></span><span class="strings"><font color="#23238e">-location</font></span><span class="operators"><font color="#781f87">=&gt;</font></span><span class="strings"><font color="#23238e">"login.pl"</font></span><span class="operators"><font color="#781f87">);</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;29&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="operators"><font color="#781f87">}</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;30&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="operators"><font color="#781f87">}</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;31&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">elsif</font></span><span class="operators"><font color="#781f87">(</font></span><span class="variables">$q</span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers">param</span><span class="operators"><font color="#781f87">(</font></span><span class="strings"><font color="#23238e">'action'</font></span><span class="operators"><font color="#781f87">)</font></span><span class="default">&nbsp;</span><span class="keywords"><font color="#871f78">eq</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#23238e">'logout'</font></span><span class="operators"><font color="#781f87">)</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;32&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="operators"><font color="#781f87">{</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;33&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="variables">$session</span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=</font></span><span class="default">&nbsp;</span><span class="identifiers">CGI</span><span class="operators"><font color="#781f87">::</font></span><span class="identifiers">Session</span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers">load</span><span class="operators"><font color="#781f87">(</font></span><span class="strings"><font color="#23238e">'driver:mysql'</font></span><span class="operators"><font color="#781f87">,</font></span><span class="default">&nbsp;</span><span class="keywords"><font color="#871f78">undef</font></span><span class="operators"><font color="#781f87">,</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">{</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#23238e">Handle</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=&gt;</font></span><span class="default">&nbsp;</span><span class="variables">$dbh</span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">}</font></span><span class="default">&nbsp;&nbsp;</span><span class="operators"><font color="#781f87">)</font></span><span class="default">&nbsp;</span><span class="keywords"><font color="#871f78">or</font></span><span class="default">&nbsp;</span><span class="keywords"><font color="#871f78">die</font></span><span class="default">&nbsp;</span><span class="identifiers">CGI</span><span class="operators"><font color="#781f87">::</font></span><span class="identifiers">Session</span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers">errstr</span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;34&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="variables">$session</span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="keywords"><font color="#871f78">delete</font></span><span class="operators"><font color="#781f87">();</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;35&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">print</font></span><span class="default">&nbsp;</span><span class="variables">$session</span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers">header</span><span class="operators"><font color="#781f87">(</font></span><span class="strings"><font color="#23238e">-location</font></span><span class="operators"><font color="#781f87">=&gt;</font></span><span class="strings"><font color="#23238e">'login.pl'</font></span><span class="operators"><font color="#781f87">);</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;36&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="operators"><font color="#781f87">}</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;37&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">else</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;38&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="operators"><font color="#781f87">{</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;39&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">print</font></span><span class="default">&nbsp;</span><span class="variables">$q</span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers">header</span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;40&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">print</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">&lt;&lt;</font></span><span class="here_documents"><strong><font color="#232383">HTML</font></strong></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;41&nbsp;&nbsp;&nbsp;&nbsp;</font></span><strong><font color="#232383"><span class="here_documents">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;form&nbsp;method="post"&gt; </span><br /></font></strong><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;42&nbsp;&nbsp;&nbsp;&nbsp;</font></span><strong><font color="#232383"><span class="here_documents">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Username:&nbsp;&lt;input&nbsp;type="text"&nbsp;name="usr"&gt; </span><br /></font></strong><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;43&nbsp;&nbsp;&nbsp;&nbsp;</font></span><strong><font color="#232383"><span class="here_documents">&nbsp;&nbsp; </span><br /></font></strong><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;44&nbsp;&nbsp;&nbsp;&nbsp;</font></span><strong><font color="#232383"><span class="here_documents">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Password:&nbsp;&lt;input&nbsp;type="password"&nbsp;name="pwd"&gt; </span><br /></font></strong><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;45&nbsp;&nbsp;&nbsp;&nbsp;</font></span><strong><font color="#232383"><span class="here_documents">&nbsp;&nbsp; </span><br /></font></strong><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;46&nbsp;&nbsp;&nbsp;&nbsp;</font></span><strong><font color="#232383"><span class="here_documents">&nbsp;&nbsp; </span><br /></font></strong><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;47&nbsp;&nbsp;&nbsp;&nbsp;</font></span><strong><font color="#232383"><span class="here_documents">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;type="submit"&gt; </span><br /></font></strong><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;48&nbsp;&nbsp;&nbsp;&nbsp;</font></span><strong><font color="#232383"><span class="here_documents">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/form&gt; </span><br /></font></strong><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;49&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="here_documents"><strong><font color="#232383">HTML</font></strong></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;50&nbsp;&nbsp;&nbsp;&nbsp;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;51&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;</span><span class="operators"><font color="#781f87">}</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;52&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp; </span><br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;53&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp; </span><br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;54&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keywords"><font color="#871f78">sub</font></span><span class="identifiers">&nbsp;read_config&nbsp;</span><span class="operators"><font color="#781f87">{</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;55&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">my</font></span><span class="default">&nbsp;</span><span class="variables">$file</span><span class="operators"><font color="#781f87">=</font></span><span class="keywords"><font color="#871f78">shift</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">||</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#23238e">'config.cfg'</font></span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;56&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">my</font></span><span class="default">&nbsp;</span><span class="hashes">%conf</span><span class="operators"><font color="#781f87">=();</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;57&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">open</font></span><span class="operators"><font color="#781f87">(</font></span><span class="identifiers">CFG</span><span class="operators"><font color="#781f87">,</font></span><span class="strings"><font color="#23238e">"&lt;"</font></span><span class="operators"><font color="#781f87">,</font></span><span class="strings"><font color="#23238e">"</font></span><span class="variables">$file</span><span class="strings"><font color="#23238e">"</font></span><span class="operators"><font color="#781f87">)</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">||</font></span><span class="default">&nbsp;</span><span class="identifiers">croak</span><span class="default">&nbsp;</span><span class="strings"><font color="#23238e">"Config&nbsp;error:&nbsp;$!"</font></span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;58&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">while</font></span><span class="operators"><font color="#781f87">(&lt;</font></span><span class="identifiers">CFG</span><span class="operators"><font color="#781f87">&gt;)</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">{</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;59&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">next</font></span><span class="default">&nbsp;</span><span class="keywords"><font color="#871f78">if</font></span><span class="operators"><font color="#781f87">(</font></span><span class="regex"><font color="#c86400">/^\#/</font></span><span class="operators"><font color="#781f87">);</font></span><span class="default">&nbsp;</span><span class="comments"><em><font color="#696969">#&nbsp;сразу&nbsp;пропускаем&nbsp;комментарии</font></em></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;60&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">chomp</font></span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;61&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="regex"><font color="#c86400">s/^\s+//</font></span><span class="operators"><font color="#781f87">;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comments"><em><font color="#696969">#&nbsp;Убрать&nbsp;начальные&nbsp;пропуски</font></em></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;62&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="regex"><font color="#c86400">s/\s+$//</font></span><span class="operators"><font color="#781f87">;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comments"><em><font color="#696969">#&nbsp;Убрать&nbsp;конечные&nbsp;пропуски</font></em></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;63&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">next</font></span><span class="default">&nbsp;</span><span class="keywords"><font color="#871f78">unless</font></span><span class="default">&nbsp;</span><span class="keywords"><font color="#871f78">length</font></span><span class="operators"><font color="#781f87">;</font></span><span class="default">&nbsp;&nbsp;</span><span class="comments"><em><font color="#696969">#&nbsp;Что-нибудь&nbsp;осталось?</font></em></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;64&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">my</font></span><span class="operators"><font color="#781f87">(</font></span><span class="variables">$key</span><span class="operators"><font color="#781f87">,</font></span><span class="variables">$value</span><span class="operators"><font color="#781f87">)=</font></span><span class="keywords"><font color="#871f78">split</font></span><span class="operators"><font color="#781f87">(</font></span><span class="regex"><font color="#c86400">/\s*=\s*/</font></span><span class="operators"><font color="#781f87">,</font></span><span class="variables">$_</span><span class="operators"><font color="#781f87">,</font></span><span class="default">&nbsp;</span><span class="numbers"><font color="#8b0000">2</font></span><span class="operators"><font color="#781f87">);</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;65&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="variables">$conf</span><span class="operators"><font color="#781f87">{</font></span><span class="variables">$key</span><font color="#781f87"><span class="operators">}</span><span class="operators">=</span></font><span class="variables">$value</span><span class="default">&nbsp;</span><span class="keywords"><font color="#871f78">if</font></span><span class="operators"><font color="#781f87">(</font></span><span class="keywords"><font color="#871f78">defined</font></span><span class="operators"><font color="#781f87">(</font></span><span class="variables">$key</span><span class="operators"><font color="#781f87">)</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">&amp;&amp;</font></span><span class="default">&nbsp;</span><span class="keywords"><font color="#871f78">defined</font></span><span class="operators"><font color="#781f87">(</font></span><span class="variables">$value</span><span class="operators"><font color="#781f87">));</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;66&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="operators"><font color="#781f87">}</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;67&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keywords"><font color="#871f78">return</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">\</font></span><span class="hashes">%conf</span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;68&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="operators"><font color="#781f87">}</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;69&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><span class="default"><strong>FIX:</strong> new CGI::Session на CGI::Session-&gt;new . Спасибо: <a href="http://alexchorny.livejournal.com/">alexchorny</a>&nbsp;за дельное замечание. Для тех кто хочет углубится в суть вопроса читайте <a href="http://mail.pm.org/pipermail/moscow-pm/2009-August/005864.html">ветку рассылки</a>.</span></p>]]>
    </content>
</entry>

<entry>
    <title>Perl - абсолютный лидер!</title>
    <link rel="alternate" type="text/html" href="http://perlmonks.org.ru/vorota_v_perl/2009/08/perl---absoljutnij-lider.html" />
    <id>tag:perlmonks.org.ru,2009:/vorota_v_perl//1.35</id>

    <published>2009-08-17T08:45:48Z</published>
    <updated>2009-09-02T13:26:21Z</updated>

    <summary><![CDATA[Black Duck,&nbsp;занимающаяся производством&nbsp;ПО для анализа исходников, опубликовала сегодня&nbsp;итоги исследования языков программирования по популярности, используемых при написании open-source проектов. Исследователи&nbsp;сделали заключение, что более 40%&nbsp;open-source проектов&nbsp;пишутся на С....]]></summary>
    <author>
        <name>Monks</name>
        
    </author>
    
        <category term="Заметки программиста" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ru" xml:base="http://perlmonks.org.ru/vorota_v_perl/">
        <![CDATA[Black Duck,&nbsp;занимающаяся производством&nbsp;ПО для анализа исходников, опубликовала сегодня&nbsp;итоги исследования языков программирования по популярности, используемых при написании open-source проектов. Исследователи&nbsp;сделали заключение, что более 40%&nbsp;open-source проектов&nbsp;пишутся на С.]]>
        <![CDATA[<p>"Большая часть открытых программ создается на каком-либо одном языке, - говорит вице-президент Black Buck Питер Вескусо. - В то же время, проанализировав значительную часть открытых исходных кодов для opensource-программ, мы пришли к заключению, что JavaScript использовался в 36% случаев".</p>
<p>Среди языков, проекты на которых пишутся полностью, <strong>абсолютным лидером стал Perl </strong>- 15%, второе место с 11% поделили Java и C#. На третьем месте с 10% вышеупомянутый JavaScript. "Обратите внимания, как много открытых проектов используют сравнительно старые языки Perl и Java, полагаем, что данный показатель говорит об общей удовлетворенности конкретным языком программирования", - заключает Вескусо.</p>
<p>В Black Buck говорят, что анализировали только открытые исходники, если в исследование можно было бы включить данные крупных закрытых проектов, то его итоги могли бы отличаться. "Язык C является лидером по объему создаваемых кодов, тогда как PHP и JavaScript используются в максимальном числе открытых проектов", - говорится в отчете.</p>
<p align="right"><a href="http://cybersecurity.ru/software/76223.html"><font style="FONT-SIZE: 0.8em">cybersecurity.ru</font></a></p>]]>
    </content>
</entry>

<entry>
    <title>Взлом PerlMonks.Org</title>
    <link rel="alternate" type="text/html" href="http://perlmonks.org.ru/vorota_v_perl/2009/07/vzlom-perlmonksorg.html" />
    <id>tag:perlmonks.org.ru,2009:/vorota_v_perl//1.34</id>

    <published>2009-07-31T08:13:59Z</published>
    <updated>2009-07-31T08:22:12Z</updated>

    <summary><![CDATA[В новом номере e-zine ZF05&nbsp;пишут о взломе PerlMonks.Org. Конечно, с кем не бывает - ломают всех, даже сайт конторы Кевина Митника ломали не раз. На ПМ и сами признают взлом. В случившемся меня лично удивило что пароли хранились в открытом...]]></summary>
    <author>
        <name>Monks</name>
        
    </author>
    
        <category term="Заметки программиста" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="hack" label="hack" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="monks" label="monks" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ru" xml:base="http://perlmonks.org.ru/vorota_v_perl/">
        <![CDATA[<p>В новом номере e-zine <span style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: RU; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><font color="#000000"><a href="http://lists.grok.org.uk/pipermail/full-disclosure/2009-July/069965.html">ZF05</a>&nbsp;пишут о взломе PerlMonks.Org. Конечно, с кем не бывает - ломают всех, даже сайт конторы Кевина Митника ломали не раз. На ПМ и сами <a href="http://perlmonks.org/?node_id=784737">признают взлом</a>. В случившемся меня лично удивило что пароли хранились в открытом виде:</font></span></p>
<p><span style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: RU; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><strike>There is a really simple reason we owned PerlMonks: we couldn't resist more<br />than 50,000 unencrypted programmer passwords.</strike></span></p>]]>
        
    </content>
</entry>

<entry>
    <title>Авторизация в Active Directory с Perl.</title>
    <link rel="alternate" type="text/html" href="http://perlmonks.org.ru/vorota_v_perl/2009/07/avtorizacija-v-active-directory-s-perl.html" />
    <id>tag:perlmonks.org.ru,2009:/vorota_v_perl//1.33</id>

    <published>2009-07-14T18:12:22Z</published>
    <updated>2009-07-15T09:56:46Z</updated>

    <summary><![CDATA[При разработке практически любого более менее серьезного приложения для web всегда стоит задача аутентификации/авторизации пользователей вашего приложения. В большинстве случаев программист реализует свой собственный механизм доступа взаимодействуя c базой данных или используют&nbsp;базовую авторизацию с помощью web-сервера. Но если вы разрабатываете...]]></summary>
    <author>
        <name>Monks</name>
        
    </author>
    
        <category term="Заметки программиста" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="activedirectory" label="activedirectory" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ad" label="AD" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="modules" label="modules" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="netldap" label="net-ldap" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ru" xml:base="http://perlmonks.org.ru/vorota_v_perl/">
        <![CDATA[<p>При разработке практически любого более менее серьезного приложения для web всегда стоит задача аутентификации/авторизации пользователей вашего приложения. В большинстве случаев программист реализует свой собственный механизм доступа взаимодействуя c базой данных или используют&nbsp;базовую авторизацию с помощью web-сервера. Но если вы разрабатываете приложение для работы в сети Windows, которая как правило, в организациях более 10-15 компьютеров строится на <a href="http://ru.wikipedia.org/wiki/Active_directory">Active Directory</a>, то есть смысл использовать уже готовую базу данных для авторизации и аутентификации. Этой базой является каталог ActiveDirectory, который работает по стандартному протоколу <span class="caps"><a href="http://ru.wikipedia.org/wiki/LDAP">LDAP</a>.&nbsp;</span></p>
<p><span class="caps">Я</span> думаю вы и до этого видели множество продуктов интегрирующихся с AD в плане разграничения доступа. В этой статье я дам простейший пример того как вам интегрировать ваш скрипт с AD для контроля доступа (авторизации) к вашему приложению. </p>]]>
        <![CDATA[<p>Итак, как я уже сказал - ActiveDirectory поддерживает стандартный протокол <span class="caps">LPAD, </span>а соответственно для взаимодействия с базой AD мы можем использовать стандартный модуль Perl (хотя он вроде не входит в стандартную поставку, но доступен на <span class="caps">CPAN </span>под разные платформы) <a href="http://search.cpan.org/~gbarr/perl-ldap-0.39/lib/Net/LDAP.pod">Net::LDAP</a>. </p>
<p>В интернете есть масса примеров по работе с данным модулем, но возможно нет самого простого примера - авторизация в AD. Хотя это очевидно следует из примеров которые вы обнаружите в сети, в некоторых случаях эта очевидность не так очевидна :)). </p>
<p>Итак -&nbsp; основной метод модуля Net::LDAP,&nbsp;который нам потребуется&nbsp;-&gt;&nbsp;bind.</p>
<p>Напишем простую функцию для проверки подлинности пользователя в AD:<br /><span class="linenumbers"><font color="#555555">...&nbsp;&nbsp;&nbsp;</font></span>&nbsp;<br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keywords"><font color="#871f78">sub</font></span><span class="identifiers">&nbsp;auth_AD&nbsp;</span><span class="operators"><font color="#781f87">{</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">my</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">(</font></span><span class="variables">$user</span><span class="operators"><font color="#781f87">,</font></span><span class="default">&nbsp;</span><span class="variables">$pass</span><span class="operators"><font color="#781f87">)</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=</font></span><span class="default">&nbsp;</span><span class="arrays">@_</span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">my</font></span><span class="default">&nbsp;</span><span class="variables">$ad</span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=</font></span><span class="default">&nbsp;</span><span class="identifiers">Net</span><span class="operators"><font color="#781f87">::</font></span><span class="identifiers">LDAP</span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="keywords"><font color="#871f78">new</font></span><span class="operators"><font color="#781f87">(</font></span><span class="strings"><font color="#23238e">"domain.ru"</font></span><span class="operators"><font color="#781f87">)</font></span><span class="default">&nbsp;</span><span class="keywords"><font color="#871f78">or</font></span><span class="default">&nbsp;</span><span class="keywords"><font color="#871f78">die</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#23238e">"Could&nbsp;not&nbsp;connect!&nbsp;$!"</font></span><span class="operators"><font color="#781f87">;</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">my</font></span><span class="default">&nbsp;</span><span class="variables">$mesg</span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=</font></span><span class="default">&nbsp;</span><span class="variables">$ad</span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="keywords"><font color="#871f78">bind</font></span><span class="operators"><font color="#781f87">(</font></span><span class="strings"><font color="#23238e">"</font></span><span class="variables">$user</span><span class="strings"><font color="#23238e">\@domain.ru"</font></span><span class="operators"><font color="#781f87">,</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#23238e">password</font></span><span class="operators"><font color="#781f87">=&gt;</font></span><span class="variables">$pass</span><span class="operators"><font color="#781f87">,</font></span><span class="default">&nbsp;</span><span class="strings"><font color="#23238e">version</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">=&gt;</font></span><span class="default">&nbsp;</span><span class="numbers"><font color="#8b0000">3</font></span><span class="default">&nbsp;</span><span class="operators"><font color="#781f87">);</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keywords"><font color="#871f78">return</font></span><span class="default">&nbsp;</span><span class="variables">$mesg</span><span class="operators"><font color="#781f87">-&gt;</font></span><span class="identifiers">is_error</span><span class="operators"><font color="#781f87">();</font></span> <br /><span class="linenumbers"><font color="#555555">&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="operators"><font color="#781f87">}</font></span></p>
<p><span class="operators"></span><span class="operators"><font color="#781f87">...</font></span></p>
<p><span class="operators">Функция принимает два аргумента, и возвращает цифровой статус ошибки (0 - в случае успеха и положительные числа в случае ошибки).</span></p>
<p><span class="operators">Так же полезной информацией может быть применение следующих вызовов:</span></p>
<p><span class="operators">$mesg-&gt;error(); # краткое описание выполнения операции: (ex. Success)</span></p>
<p><span class="operators">$mesg-&gt;error_text(); # расширенное описание операции (ex. Operation completed without error)</span></p>
<p><span class="operators">Можете возвращать эти вывозы из функций или записывать их для дальнейшего использования.</span></p>
<p><span class="operators">Простейший алгоритм авторизации:</span></p>
<p><span class="operators">1. Запрос данных для AD</span></p>
<p><span class="operators">2. В случае успеха открываем сессию/ставим cookie, etc.</span></p>
<p><span class="operators">Успехов!</span></p>]]>
    </content>
</entry>

</feed>
