<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Язык программирования Perl</title>
	<atom:link href="http://effectiveperl.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://effectiveperl.com</link>
	<description>Статьи и уроки Perl</description>
	<pubDate>Tue, 03 Nov 2009 10:35:16 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
	<language>en</language>
			<item>
		<title>Работа с хэшами в Perl</title>
		<link>http://effectiveperl.com/?p=92</link>
		<comments>http://effectiveperl.com/?p=92#comments</comments>
		<pubDate>Tue, 03 Nov 2009 10:10:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Изучаем Perl]]></category>

		<guid isPermaLink="false">http://effectiveperl.com/?p=92</guid>
		<description><![CDATA[Инициализация (очистка) хэша
Самый быстрый способ очистки - это присвоение пустого списка.
Реализация
my %hash = ();
Примечание
Часто спрашивают, как инициализировать указатель на хэш (hash ref). Указатель - это скалярная переменная и инициализируется она соответствующим образом. Например:
my $hash_ref;
my $hash_ref = 0; # zero
Добавление пары ключ/значение в хэш
В примерах, приведенных ниже, кавычки вокруг ключей могут быть опущены, если ключи - [...]]]></description>
			<content:encoded><![CDATA[<p>Инициализация (очистка) хэша</p>
<p>Самый быстрый способ очистки - это присвоение пустого списка.</p>
<p>Реализация</p>
<p>my %hash = ();</p>
<p>Примечание</p>
<p>Часто спрашивают, как инициализировать указатель на хэш (hash ref). Указатель - это скалярная переменная и инициализируется она соответствующим образом. Например:</p>
<p>my $hash_ref;<br />
my $hash_ref = 0; # zero<span id="more-92"></span></p>
<p>Добавление пары ключ/значение в хэш</p>
<p>В примерах, приведенных ниже, кавычки вокруг ключей могут быть опущены, если ключи - идентификаторы.</p>
<p>Хэш:</p>
<p>Решение</p>
<p>$hash{ &#8216;key&#8217; } = &#8216;value&#8217;; # хэш</p>
<p>$hash{ $key } = $value; # хэш, с использованием переменной</p>
<p>Указатель на хэш:</p>
<p>Решение</p>
<p>$href-&gt;{ &#8216;key&#8217; } = &#8216;value&#8217;; # указатель на хэш</p>
<p>$href-&gt;{ $key } = $value; # указатель на хэш, с использованием переменной</p>
<p>Добавление нескольких пар ключ/значение в хэш</p>
<p>Решение</p>
<p>Эти операции эквивалентны, просто второй более читаем.</p>
<p>%hash = ( &#8216;key1&#8242;, &#8216;value1&#8242;, &#8216;key2&#8242;, &#8216;value2&#8242;, &#8216;key3&#8242;, &#8216;value3&#8242; );</p>
<p>%hash = (<br />
key1 =&gt; &#8216;value1&#8242;,<br />
key2 =&gt; &#8216;value2&#8242;,<br />
key3 =&gt; &#8216;value3&#8242;,<br />
);</p>
<p>Копирование хэшей</p>
<p>Решение</p>
<p>my %hash_copy = %hash; # копирование хэша</p>
<p>my $href_copy = $href; # копирование указателя на хэш</p>
<p>Удаление одной пары ключ/значение</p>
<p>Не смотря на то что удаление хэша и удаление указателя на хэш, это разные операция, обе они выполняются с помощью функции delete.</p>
<p>Решение</p>
<p>Хэш:</p>
<p>delete $hash{$key};</p>
<p>Указатель на хэш:</p>
<p>delete $hash_ref-&gt;{$key};</p>
<p>Перебор всех пар ключ/значение</p>
<p>Пример, приведенный ниже, печатает все пары ключ/значение.</p>
<p>Решение</p>
<p>Использование функции each с циклом while. Обратите внимание, что each переберет пары в случайном порядке, но порядок будет совпадать с перебором с помощью функций keys и values.</p>
<p>while ( my ($key, $value) = each(%hash) ) {<br />
print &#8220;$key =&gt; $valuen&#8221;;<br />
}</p>
<p>Для указатель на хэш небольшое отличие:</p>
<p>while ( my ($key, $value) = each(%$hash_ref) ) {<br />
print &#8220;$key =&gt; $valuen&#8221;;<br />
}</p>
<p>Решение</p>
<p>Использование функции keys с циклом for</p>
<p>for my $key ( keys %hash ) {<br />
my $value = $hash{$key};<br />
print &#8220;$key =&gt; $valuen&#8221;;<br />
}</p>
<p>Пример</p>
<p>my $file = $ARGV[0] || &#8220;-&#8221;;</p>
<p>my %from = ();</p>
<p>open FILE, &#8220;&lt; $file&#8221; or die &#8220;Can&#8217;t open $file : $!&#8221;;</p>
<p>while(  ) {<br />
if (/^From: (.*)/) { $from{$1}++ } # считаем повторение отправителя<br />
}</p>
<p>close FILE;</p>
<p>for my $sender ( sort keys %from ) {<br />
print &#8220;$sender: $from{$sender}n&#8221;;<br />
}</p>
<p>Получение размера хэша</p>
<p>Решение</p>
<p>print &#8220;size of hash: &#8221; . keys( %hash ) . &#8220;.n&#8221;;</p>
<p>Solution</p>
<p>my $i = 0;</p>
<p>$i += scalar keys %$hash_ref; # метод 1: явный скалярный контекст<br />
$i += keys %$hash_ref; # метод 2: неявный скалярный контекст</p>
<p>Использование указателей на хэш</p>
<p>Решение</p>
<p>sub foo<br />
{<br />
my $hash_ref;</p>
<p>$hash_ref-&gt;{ &#8216;key1&#8242; } = &#8216;value1&#8242;;<br />
$hash_ref-&gt;{ &#8216;key2&#8242; } = &#8216;value2&#8242;;<br />
$hash_ref-&gt;{ &#8216;key3&#8242; } = &#8216;value3&#8242;;</p>
<p>return $hash_ref;<br />
}</p>
<p>my $hash_ref = foo();</p>
<p>print &#8220;ключи&#8230; &#8220;, sort keys %$hash_ref, &#8220;&#8230;n&#8221;;</p>
<p>Функция строящая хэш из хэшей и возвращающая указатель на хэш</p>
<p>Решение</p>
<p>sub foo<br />
{<br />
my ( $login, $p, $uid, $gid, $gecos, $dir, $s );</p>
<p>my %HoH = ();</p>
<p>my $file = &#8216;/etc/passwd&#8217;;<br />
open( PASSWD, &#8220;&lt; $file&#8221; ) or die &#8220;Can&#8217;t open $file : $!&#8221;;</p>
<p>while(<br />
) {<br />
( $login, $p, $uid, $gid, $gecos, $dir, $s ) = split( &#8216;:&#8217; );</p>
<p>$HoH{ $login }{ &#8216;uid&#8217; } = $uid;<br />
$HoH{ $login }{ &#8216;gid&#8217; } = $gid;<br />
$HoH{ $login }{ &#8216;dir&#8217; } = $dir;<br />
}</p>
<p>close PASSWD;</p>
<p>return %HoH;<br />
}</p>
<p>Доступ к хэшу из хэшей с помощью указателей. Вывод значений</p>
<p>Решение</p>
<p>my $rHoH = foo();</p>
<p>my( $uid, $gid, $dir );</p>
<p>for my $login ( keys %$rHoH ) {</p>
<p>$uid = $rHoH-&gt;{ $login }-&gt;{ &#8216;uid&#8217; }; # метод 1. Более читабельный<br />
$gid = ${ $rHoH-&gt;{ $login } }{ &#8216;gid&#8217; }; # метод 2<br />
$dir = ${ ${ $rHoH }{ $login } }{ &#8216;dir&#8217; }; # метод 3. Менее читабельный</p>
<p>print &#8220;uid: $uid, gid: $gid, dir, $dir.n&#8221;;<br />
}</p>
<p>Решение</p>
<p>my $rHoH = foo();</p>
<p>for my $k1 ( sort keys %$rHoH ) {<br />
print &#8220;k1: $k1n&#8221;;<br />
for my $k2 ( keys %{$rHoH-&gt;{ $k1 }} ) {<br />
print &#8220;k2: $k2 $rHoH-&gt;{ $k1 }{ $k2 }n&#8221;;<br />
}<br />
}</p>
<p>Функция строящая хэш из хешей из хешей и возвращающая указатель на хэш</p>
<p>Решение</p>
<p>sub foo<br />
{<br />
my %HoHoH = ();</p>
<p>while( &#8230; ) {</p>
<p>if( /LOCATION:/ ) {</p>
<p>&#8230;</p>
<p>} elsif( /MODULE:/ ) {</p>
<p>$HoHoH{ $loc }{ $module_type }{ MODULE_NAME } = $module_name;</p>
<p>} elsif( $ARGS_ALLOWED ) {</p>
<p>$HoHoH{ $loc }{ $module_type }{ $arg_name } = $arg_value;</p>
<p>}</p>
<p>}</p>
<p>return %HoHoH;<br />
}</p>
<p>Доступ к хэшу из хэшей из хэшей с помощью указателей. Вывод значений.</p>
<p>Решение</p>
<p>my $rHoH = foo();</p>
<p>for my $k1 ( sort keys %$rHoHoH ) {<br />
print &#8220;$k1n&#8221;;</p>
<p>for my $k2 ( sort keys %{$rHoHoH-&gt;{ $k1 }} ) {<br />
print &#8220;t$k2n&#8221;;</p>
<p>for my $k3 ( sort keys %{$rHoHoH-&gt;{ $k1 }-&gt;{ $k2 }} ) {<br />
print &#8220;tt$k3 =&gt; $rHoHoH-&gt;{ $k1 }-&gt;{ $k2 }-&gt;{ $k3 }n&#8221;;<br />
}<br />
}<br />
}</p>
<p>Вывод ключей и значений из хэша, полученного с помощью указателя</p>
<p>Решение</p>
<p>while( my ($k, $v) = each %$hash_ref ) {<br />
print &#8220;ключ: $k, значение: $v.n&#8221;;<br />
}</p>
<p>Определение существования значения в хэше</p>
<p>Решение</p>
<p>print &#8220;Значение СУЩЕСТВУЕТ, но может быть не определено.n&#8221;<br />
if exists $hash{ $key };</p>
<p>print &#8220;Значение ОПРЕДЕЛЕНО, но может быть false.n&#8221;<br />
if defined $hash{ $key };</p>
<p>print &#8220;Значение TRUEn&#8221;<br />
if $hash{ $key };</p>
<p>Пример</p>
<p>Допустим, мы выполнили SQL запрос, который может вернуть записи, содержащие значение NULL. Перед тем как использовать результат запроса нам необходимо проверить, ОПРЕДЕЛЕНЫ ли полученные значения. Обратите внимание, функция sql_fetch_hashref() соединяется с сервером баз данных, подготавливает запрос, выполняет его и получает указатель на хэш с помощью DBI функции fetchrow_hashref().</p>
<p>my $answers = &#8216;a,b,c,d,e&#8217;;</p>
<p>my $sql = &#8220;select max_time, $answers from questions &#8221; .<br />
&#8216;where question_number=?&#8217;;<br />
my $hash_ref = sql_fetch_hashref( $sql, $q );</p>
<p>my @answers = split &#8216;,&#8217;, $answers;</p>
<p>my $max_time = $hash_ref-&gt;{max_time} || &#8216;60&#8242;;</p>
<p>my $hash_ref_ans;<br />
for my $letter ( @answers ) {<br />
$hash_ref_ans-&gt;{ $letter } = $hash_ref-&gt;{ $letter }<br />
if defined $hash_ref-&gt;{ $letter };<br />
}<br />
Источник: www.internet-technologies.ru</p>
]]></content:encoded>
			<wfw:commentRss>http://effectiveperl.com/?feed=rss2&amp;p=92</wfw:commentRss>
		</item>
		<item>
		<title>Определение IP-адреса с помощью Perl</title>
		<link>http://effectiveperl.com/?p=84</link>
		<comments>http://effectiveperl.com/?p=84#comments</comments>
		<pubDate>Tue, 03 Nov 2009 09:59:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Изучаем Perl]]></category>

		<guid isPermaLink="false">http://effectiveperl.com/?p=84</guid>
		<description><![CDATA[Что такое IP-адрес и для чего он нужен вебмастеру?
IP-адрес представляет собой уникальный 32-х битный идентификатор компьютеров, состоящий из четырех десятичных чисел, разделенных точками, например, 127.0.0.2. Взаимодействие или обращение к определенному компьютеру в Интернете осуществляется по его IP-адресу. В идеале каждый компьютер, с которого пользователь запрашивает страницы сайта, имеет постоянный уникальный IP-адрес, который, в свою очередь, [...]]]></description>
			<content:encoded><![CDATA[<p>Что такое IP-адрес и для чего он нужен вебмастеру?</p>
<p>IP-адрес представляет собой уникальный 32-х битный идентификатор компьютеров, состоящий из четырех десятичных чисел, разделенных точками, например, 127.0.0.2. Взаимодействие или обращение к определенному компьютеру в Интернете осуществляется по его IP-адресу. В идеале каждый компьютер, с которого пользователь запрашивает страницы сайта, имеет постоянный уникальный IP-адрес, который, в свою очередь, передается серверу при запросах. <span id="more-84"></span>На практике это не всегда так. Иногда нельзя отличить разных пользователей, работающих через один прокси-сервер по IP-адресам, т.к. в HTTP заголовках передается IP-адрес прокси-сервера, а не конкретного пользователя.</p>
<p>Отслеживание IP-адресов посетителей страницы или сайта позволяет определять новых и старых пользователей, т.е. повторные и новые визиты. В свою очередь эта информация может быть использована для решения различных практических задач, таких как, например, создание счетчиков посещения сайта, ограничение повторного участия в голосовании и т.п. Таким образом, определение IP-адреса является задачей, решение которой открывает массу полезных возможностей для вебмастера.<br />
Переменные окружения CGI и доступ к ним в Perl</p>
<p>При запросе пользователем веб-страницы с сервера браузер посылает ему запрос по протоколу HTTP. Запрос браузера в соответствии с протоколом всегда содержит заголовок. В заголовке содержится имя запрашиваемого файла, путь к нему, версия протокола HTTP и, что наиболее интересно для нас, информация о пользователе, включая IP-адрес. В сценарии, написанном на языке Perl, эта информация доступна через ассоциативный массив (хеш) %ENV. Некоторые переменные окружения, используемые для идентификации пользователя, и их значения представлены в таблице 1.</p>
<p>Таблица 1 - Имена и значения некоторых переменных окружения, используемых для идентификации пользователя<br />
Имя переменной окружения	Значение переменной<br />
HTTP_COOKIE	Записанные в браузере cookie для данного URL<br />
HTTP_X_FORWARDED_FOR	IP-адрес клиента при подключении через прокси<br />
REMOTE_ADDR	Удаленный IP-адрес клиента<br />
REMOTE_HOST	Имя удаленного узла, осуществляющего запрос</p>
<p>Для того, чтобы получить доступ к значению переменной окружения с помощью Perl необходимо просто использовать в качестве ключа в хеше %ENV имя этой переменной. Например, удаленный IP-адрес клиента можно получить, используя в хеше имя REMOTE_ADDR и ,соответственно, запись $ENV{ REMOTE_ADDR }.</p>
<p>Значения всех переменных окружения, доступных через хеш %ENV, можно получить, воспользовавшись простым скриптом:</p>
<p>#!/usr/local/bin/perl<br />
## если perl в другом каталоге - #!/usr/bin/perl</p>
<p>print &#8220;Content-type: text/html\n\n&#8221;;</p>
<p>## перебираем все ключи хеша и для каждого<br />
## выводим запись &#8220;ключ&#8221; - &#8220;значение&#8221;<br />
foreach $key( keys( %ENV ) ) {<br />
print &#8220;$key - $ENV{ $key }<br />
\n&#8221;;<br />
}</p>
<p>Запись IP-адреса в скалярную переменную</p>
<p>Последняя тонкость, которую нужно знать для определения IP-адреса на Perl, состоит в том, что при подключении пользователя через прокси-сервер, в переменной $ENV{ REMOTE_ADDR } будет храниться его IP-адрес, а не IP-адрес пользователя. Как указано в таблице 1, IP-адрес клиента при подключении через прокси находится в переменной $ENV{ HTTP_X_FORWARDED_FOR }. Теперь мы уже знаем все необходимое для определения IP-адреса на Perl. Все что осталось &#8212; это написать соответствующий код:</p>
<p>## если ключ HTTP_X_FORWARDED_FOR определен<br />
if ( $ENV{ HTTP_X_FORWARDED_FOR } ) {</p>
<p>## в переменную $ip записывается IP-адрес<br />
## клиента, подключенного через прокси<br />
$ip = $ENV{ HTTP_X_FORWARDED_FOR};<br />
} else {</p>
<p>## в противном случае запишем в $ip<br />
## удаленный IP-адрес клиента<br />
$ip = $ENV{ REMOTE_ADDR };<br />
}</p>
<p>Согласно этому программному коду в переменную $ip записывается IP-адрес клиента при подключении через прокси или удаленный IP-адрес, если подключение идет не через прокси.<br />
Пример использования IP-адреса для учета повторных визитов</p>
<p>Ниже приведен программный код cgi скрипта на языке Perl, осуществляющий проверку повторных визитов. В том случае, если осуществлен первый визит будет выдано приветствие &#8220;Вы здесь впервые!&#8221;, а если визит повторный &#8212; &#8220;Вы здесь уже были!&#8221;. IP-адреса машин, с которых уже осуществлялись визиты, записываются в файл ip_base на сервере.</p>
<p>#!/usr/local/bin/perl</p>
<p>## записываем IP-адрес в переменную $ip<br />
if ( $ENV{ HTTP_X_FORWARDED_FOR } ) {<br />
$ip = $ENV{ HTTP_X_FORWARDED_FOR };<br />
} else {<br />
$ip = $ENV{ REMOTE_ADDR };<br />
}</p>
<p>$path_to_file = &#8220;ip_base&#8221;;<br />
$comment = &#8220;Вы здесь в первый раз!&#8221;</p>
<p>## открываем файл ip_base и ищем в нем<br />
## IP-адрес из переменной $ip<br />
open ( IP_BASE, &#8220;$path_to_file&#8221; );<br />
while (  ) {<br />
if ( /$ip/ ) {<br />
$comment = &#8220;Вы здесь уже были!&#8221;;<br />
}<br />
}<br />
close ( IP_BASE );</p>
<p>## записываем в файл ip_base новый IP-адрес<br />
## если пользователь здесь впервые<br />
if ( $comment eq &#8220;Вы здесь в первый раз!&#8221; ) {<br />
open ( ADD_IP, &#8220;&gt;&gt;$file&#8221; );<br />
print ADD_IP &#8220;$ip\n&#8221;;<br />
close ( ADD_IP );<br />
}</p>
<p>## Выводим html файл с комментарием<br />
print &#8220;Content-type: text/html\n\n&#8221;;<br />
print &#8221;</p>
<h1>$comment</h1>
<p>&#8220;;<br />
Источнитк: bobrdobr.ru</p>
]]></content:encoded>
			<wfw:commentRss>http://effectiveperl.com/?feed=rss2&amp;p=84</wfw:commentRss>
		</item>
		<item>
		<title>Массивы в Перле</title>
		<link>http://effectiveperl.com/?p=70</link>
		<comments>http://effectiveperl.com/?p=70#comments</comments>
		<pubDate>Tue, 03 Nov 2009 09:32:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Изучаем Perl]]></category>

		<guid isPermaLink="false">http://effectiveperl.com/?p=70</guid>
		<description><![CDATA[Ассоциативные массивы в Perl являются реализацией хэш-таблиц. Ассоциативные массивы, безусловно, являются уникальным и чрезвычайно полезным свойством языка Perl. Они чрезвычайно удобны для связи числовых или текстовых значений с текстовыми строками или при подсчете количества вхождений текстовых строк (при статистическом анализе). В то время как обыкновенная переменная в Perl имеет префикс $, ассоциативные массивы имеют префикс [...]]]></description>
			<content:encoded><![CDATA[<p>Ассоциативные массивы в Perl являются реализацией хэш-таблиц. Ассоциативные массивы, безусловно, являются уникальным и чрезвычайно полезным свойством языка Perl. Они чрезвычайно удобны для связи числовых или текстовых значений с текстовыми строками или при подсчете количества вхождений текстовых строк (при статистическом анализе). В то время как обыкновенная переменная в Perl имеет префикс $, ассоциативные массивы имеют префикс %. Индексами (ключами) у ассоциативных массивов являются строки. Числовые ключи преобразуются в строки. Ключи заключаются в фигурные скобки, а не в квадратные, как это принято в обычных массивах.<span id="more-70"></span> Значениями могут быть любые скалярные данные: строки, числа или ссылки. Ассоциативный массив может быть декларирован напрямую как список пар ключ-значение<br />
Источник: www.emanual.ru</p>
]]></content:encoded>
			<wfw:commentRss>http://effectiveperl.com/?feed=rss2&amp;p=70</wfw:commentRss>
		</item>
		<item>
		<title>Освой самостоятельно Perl за 24 часа</title>
		<link>http://effectiveperl.com/?p=109</link>
		<comments>http://effectiveperl.com/?p=109#comments</comments>
		<pubDate>Mon, 02 Nov 2009 10:34:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Изучаем Perl]]></category>

		<guid isPermaLink="false">http://effectiveperl.com/?p=109</guid>
		<description><![CDATA[Название: Освой самостоятельно Perl за 24 часа
Автор: Клинтон Пирс
Издательство: Вильямс
ISBN: 5-8459-0097-2, 0-672-31773-7
Год: 2001
Формат: PDF
Страниц: 384
Язык: Русский
Описание:
Эта книга научит вас основам языка программирования Perl. Вы узнаете достаточно для того, чтобы самому сделать что-нибудь полезное. Автор ведет повествование в легком и доступном стиле, опуская в тоже время редко встречающиеся нюансы программирования. Каждая новая методика продемонстрирована на множестве [...]]]></description>
			<content:encoded><![CDATA[<p>Название: Освой самостоятельно Perl за 24 часа<br />
Автор: Клинтон Пирс<br />
Издательство: Вильямс<br />
ISBN: 5-8459-0097-2, 0-672-31773-7<br />
Год: 2001<br />
Формат: PDF<br />
Страниц: 384<br />
Язык: Русский</p>
<p>Описание:<br />
Эта книга научит вас основам языка программирования Perl. Вы узнаете достаточно для того, чтобы самому сделать что-нибудь полезное. <span id="more-109"></span>Автор ведет повествование в легком и доступном стиле, опуская в тоже время редко встречающиеся нюансы программирования. Каждая новая методика продемонстрирована на множестве работающих примеров - от создания простейшей программы на Perl и до разработки сложных CGI - приложений. Книга будет интересна широкому кругу читателей.</p>
<p>Оглавление:<br />
ЧАСТЬ I. ОСНОВЫ PERL<br />
1 -й час. Начало работы с Perl<br />
2-й час. Строительные блоки Perl: числа и строки<br />
3-й час. Управление процессом выполнения программы<br />
4-й час. Укладка строительных блоков: списки и массивы<br />
5-й час. Работа с файлами<br />
6-й час. Поиск по шаблону<br />
7-й час. Хэши<br />
8-й час. Функции<br />
ЧАСТЬ II. УГЛУБЛЯЕМСЯ В PERL<br />
9-й час. Дополнительные функции и операторы<br />
10-й час. Файлы и каталоги<br />
11-й час. Взаимодействие с операционной системой<br />
12-й час. Работа с командной строкой Perl<br />
13-й час. Структуры и ссылки<br />
14-й час. Использование модулей<br />
15-й час. Обработка данных в Perl<br />
16-й час. Сообщество Perl<br />
ЧАСТЬ III. CGI-ПРОГРАММИРОВАНИЕ НА PERL<br />
17-й час. Введение в CGI<br />
18-й час. Основы обработки форм<br />
19-й час. Сложные формы<br />
20-й час. Работа с HTML-кодом и CGI-программами<br />
21-й час. Файлы cookie<br />
22-й час. Отправка электронной почты из CGI-программ<br />
23-й час. Push-технология и счетчики посещений Web-страниц<br />
24-й час. Создание интерактивного Web-сервера<br />
Приложение. Инсталляция модулей в Perl<br />
Источник: progbook.net</p>
]]></content:encoded>
			<wfw:commentRss>http://effectiveperl.com/?feed=rss2&amp;p=109</wfw:commentRss>
		</item>
		<item>
		<title>Perl : модули, пакеты, классы, объекты</title>
		<link>http://effectiveperl.com/?p=76</link>
		<comments>http://effectiveperl.com/?p=76#comments</comments>
		<pubDate>Mon, 02 Nov 2009 09:48:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Изучаем Perl]]></category>

		<guid isPermaLink="false">http://effectiveperl.com/?p=76</guid>
		<description><![CDATA[Предисловие.
Хотелось бы сегодня вкратце рассказать об обширной области Perl - о модулях, пакетах, классах и работе с ними. В следующих статьях я расскажу о наследовании и связывании переменных (это тоже имеет отношение к классам). Материал рассчитан на начинающих, но по битам разжевывать не буду. Для более подробного изучения следует обратиться к мануалам Perl. Очередной раз [...]]]></description>
			<content:encoded><![CDATA[<p>Предисловие.</p>
<p>Хотелось бы сегодня вкратце рассказать об обширной области Perl - о модулях, пакетах, классах и работе с ними. В следующих статьях я расскажу о наследовании и связывании переменных (это тоже имеет отношение к классам). Материал рассчитан на начинающих, но по битам разжевывать не буду. Для более подробного изучения следует обратиться к мануалам Perl. Очередной раз рекомендую книгу Perl Programming издательства O&#8217;Reilly (Программирование на Perl - переводное русскоязычное издание издательства Символ), среди авторов которой присутствует имя создателя Perl - Ларри Уолла.<span id="more-76"></span></p>
<p>Немного определений.</p>
<p>Что такое модуль? Это отдельный файл с частью программы.<br />
Что такое пакет? Это пространство имен, обозначаемое командой package.<br />
Что такое класс? Это то же самое, что и пакет.<br />
Что такое объект? Это ссылка на любой встроенный тип данных, &#8220;освященная&#8221; командой bless.<br />
Что такое связанная переменная? Это переменная (не ссылка), &#8220;связанная&#8221; с классом командой tie.</p>
<p>Соглашение именования.</p>
<p>На самом деле никаких ограничений нет, но, если придерживаться некоторых правил, то это уменьшит вероятность ошибки в коде.<br />
Имена переменных и функций принято начинать с маленькой (строчной) буквы, а имена пакетов (классов) и модулей - с большой (прописной).<br />
Вообще, имена модулей допустимо именовать как угодно, но если вы используете для загрузки команды use или require с &#8220;голыми&#8221; именами, то правильно будет именовать именно с большой буквы.<br />
Расширение имен файлов (суффикс) принято такое: pl - для главного модуля, pm - для загружаемых модулей.</p>
<p>Модули.</p>
<p>Модуль не требует никакого особого оформления. Если модуль содержит одноименный пакет, то обычно его начинают с команды package.</p>
<p>Код: (perl)<br />
# файл Example1.pm<br />
package Example1;</p>
<p>Загружают модуль командами use и require. Команда use загружает модуль на этапе компиляции, когда Perl находит ее в процессе синтаксического разбора. Команда require загружает модуль на этапе исполнения, когда логика выполнения доходит до этой команды.<br />
Форматы команд:</p>
<p>Код: (perl)<br />
# Загружает модуль Module.pm<br />
use Module;</p>
<p># загружает модуль Dir1/Dir2/Module.pm<br />
use Dir1::Dir2::Module;</p>
<p># Загружает модуль и импортирует из него в текущее пространство имен имена name1, name2 и name3<br />
# Требуется наличие в модуле одноименного пакета и метода import<br />
use Module qw(name1 name2 name3);</p>
<p># Загружает файл, заданный выражением<br />
use EXPR;</p>
<p>Команда require имеет точно такой же формат.<br />
Загружаемые файлы ищутся в директориях, указанных в массиве @INC. Имена успешно загруженных модулей помещаются в хеш %INC (имя используются в качестве ключа, а значение содержит полный путь к файлу).</p>
<p>Если есть неуверенность в том, что модуль существует, и нужно обработать ошибку, то можно применить блок eval.</p>
<p>Код: (perl)<br />
eval { require Module; };<br />
if ($@)<br />
{<br />
# error&#8230;<br />
}</p>
<p>Также можно обратить внимание на команду do в форме со строковым выражением.</p>
<p>Пакеты и классы.</p>
<p>Как я уже написал выше, пакет - это пространство имен. В одном файле можно последовательно объявлять несколько пакетов, а также можно объявлять несколько раз один и тот же пакет. Команда package влияет на интерпретацию имен глобальных переменных, у которых не указано имя пакета (не квалифицированные имена), в том числе на переменные, объявленные с ключевым словом local, и действует до конца блока, в котором она определена, либо до следующего переназначения пакета. На ранее объявленные переменные с ключевым словом our команда не влияет.<br />
Пакетом по умолчанию является main. Встроенные команды находятся в пакете Core.<br />
Код: (perl)<br />
package Class1;<br />
$x = 1; # $Class1::x</p>
<p>package Class2;<br />
$x = 2; # $Class2::x</p>
<p>package Class1;<br />
print $x; # $Class1::x<br />
print $Class2::x;</p>
<p>Объекты.</p>
<p>Объект создается методом &#8220;освящения&#8221; ссылки на встроенный тип данных именем класса с помощью команды bless. Функция ref() возвращает для такой ссылки имя класса.<br />
Методы класса являются простыми функциями пакета и отличаются тем, что в качестве первого параметра в метод передается ссылка на объект или имя класса, если метод вызван как статический.<br />
Статические члены класса определяются как глобальные переменные пакета.<br />
Данные объекта полностью динамичны и зависят от используемого типа ссылки. Чаще всего применяют хеш - это позволяет использовать именованные данные.<br />
В Perl для конструктора нет зарезервированного имени, как в C++. Любая функция может быть конструктором. Конструктора может вообще не быть - связать ссылку с классом можно в любом месте программы. Для деструктора в Perl принято имя DESTROY. Деструктор вызывают во время уничтожения объекта при сборке мусора. То есть, если нужно высвободить какие-либо ресурсы типа файлов или подключений к БД, то лучше сделать отдельный метод и принудительно его вызывать.</p>
<p>Код: (perl)<br />
package Class1;</p>
<p># самый примитивный конструктор<br />
sub simple<br />
{<br />
return bless {};<br />
}</p>
<p># классический пример конструктора, поддерживающего наследование<br />
sub new<br />
{<br />
my $invocant = shift; # первый параметр - ссылка на объект или имя класса<br />
my $class = ref($invocant) || $invocant; # получение имени класса<br />
my $self = { @_ }; # ссылка на анонимный хеш - это и будет нашим новым объектом, инициализация объекта</p>
<p>bless($self, $class); # освящаем ссылку в объект</p>
<p>return $self; # возвращаем объект<br />
}</p>
<p># пример деструктора<br />
sub DESTROY<br />
{<br />
my $self = shift;</p>
<p># тут можно выполнить какие-либо действия<br />
}</p>
<p># варианты использования конструктора для создания объекта<br />
my $object1 = new Class1;<br />
my $object2 = Class1-&gt;new(&#8217;param1&#8242;, 1, &#8216;param2&#8242;, &#8216;abc&#8217;, param3 =&gt; 333);<br />
my $object3 = $object1-&gt;new();</p>
<p>В вышеприведенном примере конструктора применены некоторые ухищрения.</p>
<p>Код: (perl)<br />
my $class = ref($invocant) || $invocant;</p>
<p>Получение имени класса.<br />
Если дочерний класс использует в качестве конструктора метод родительского класса, то он автоматом получит в качестве первого параметра имя дочернего класса. Если же передать ссылку на объект, то будет создан новый объект того же типа.</p>
<p>Код: (perl)<br />
my $self = { @_ };</p>
<p>Инициализация объекта.<br />
Этого можно не делать или предварительно разобрать и проверить параметры. Просто это удобная форма инициализации.</p>
<p>Метод можно вызывать как статический (используя имя класса) или как метод объекта (используя ссылку на объект). Кроме того, есть две синтаксические формы записи.</p>
<p>Код: (perl)<br />
# классическая синтаксическая форма - взята из C++<br />
$object-&gt;method($arg1, $arg2, $arg3); # метод объекта<br />
Class1-&gt;method($arg1, $arg2, $arg3); # метод класса</p>
<p># вторая синтаксическая форма<br />
method $object $arg1, $arg2, $arg3; # метод объекта<br />
method Class1 $arg1, $arg2, $arg3; # метод класса</p>
<p>Заметьте, что во второй форме аргументы после объекта отделяются символами пробелов, а не запятой.<br />
Классическая форма предпочтительнее, т.к. более однозначна с точки зрения синтаксиса. Совсем однозначно будет, если после имени класса поставить &#8220;::&#8221;.</p>
<p>Код: (perl)<br />
method Class1:: $arg1, $arg2, $arg3;<br />
Class1::-&gt;method($arg1, $arg2, $arg3);</p>
<p>Не стоит путать вызов метода с вызовом функции. Ведь в этом случае первым параметром не передается имя класса - параметров на один меньше.</p>
<p>Код: (perl)<br />
Class1::method($arg1, $arg2, $arg3); # вызов функции</p>
<p>Напутствие.</p>
<p>Если этого маленького ликбеза вам недостаточно - посмотрите мануалы, идущие с Perl. В непонятных случаях задавайте вопросы на наш форум. Одна только просьба: конкретизируйте, пожалуйста, ваши вопросы.<br />
Источник: club.shelek.ru</p>
]]></content:encoded>
			<wfw:commentRss>http://effectiveperl.com/?feed=rss2&amp;p=76</wfw:commentRss>
		</item>
		<item>
		<title>PERL - использование языка программирования PERL</title>
		<link>http://effectiveperl.com/?p=99</link>
		<comments>http://effectiveperl.com/?p=99#comments</comments>
		<pubDate>Sun, 01 Nov 2009 10:20:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Статьи]]></category>

		<guid isPermaLink="false">http://effectiveperl.com/?p=99</guid>
		<description><![CDATA[Что такое Perl?
Perl - интерпретируемый язык, приспособленный для обработки произвольных текстовых файлов, извлечения из них необходимой информации и выдачи отчетов. Регулярные выражения Perl - мощнейший инструмент обработки текстовой информации. Perl также удобен для написания различных системных программ. Архив CPAN (cpan.org) содержит огромное количество модулей, реализующих практически все задачи, которые могут возникнуть в процессе работы. Хотя [...]]]></description>
			<content:encoded><![CDATA[<p>Что такое Perl?</p>
<p>Perl - интерпретируемый язык, приспособленный для обработки произвольных текстовых файлов, извлечения из них необходимой информации и выдачи отчетов. Регулярные выражения Perl - мощнейший инструмент обработки текстовой информации. Perl также удобен для написания различных системных программ. Архив CPAN (cpan.org) содержит огромное количество модулей, реализующих практически все задачи, которые могут возникнуть в процессе работы. <span id="more-99"></span>Хотя Perl приспособлен для сканирования текстовых файлов, он может обрабатывать так же двоичные данные и создавать .dbm файлы, подобные ассоциативным массивам. Perl позволяет использовать регулярные выражения, создавать объекты, вставлять в программу на С или C++ куски кода на Perl-е, а также позволяет осуществлять доступ к базам данных.<br />
Как правильно создать Perl файл</p>
<p>При создании файла содержащего perl скрипт необходимо помнить:</p>
<p>1. Файл должен быть в формате UNIX<br />
2. При записи файла на сервер должен быть включен текстовый режим<br />
3. Расширение файла должно быть .cgi или .pl<br />
4. Файлу должны быть определенны атрибуты 755<br />
5. Файл должен начинаться с записи #!/usr/bin/perl<br />
6. Если Perl скрипт производит вывод, прежде чем его начинать, нужно указать строку print &#8220;Content-type: text/html\n\n&#8221;</p>
<p>Путь к интерпретатору perl</p>
<p>!/usr/bin/perl<br />
Путь к SENDMAIL</p>
<p>!/usr/bin/sendmail<br />
Источник: freehost.com.ua</p>
]]></content:encoded>
			<wfw:commentRss>http://effectiveperl.com/?feed=rss2&amp;p=99</wfw:commentRss>
		</item>
		<item>
		<title>Как &#8220;оживить&#8221; Perl/CGI скрипт</title>
		<link>http://effectiveperl.com/?p=82</link>
		<comments>http://effectiveperl.com/?p=82#comments</comments>
		<pubDate>Sun, 01 Nov 2009 09:56:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Изучаем Perl]]></category>

		<guid isPermaLink="false">http://effectiveperl.com/?p=82</guid>
		<description><![CDATA[Данная статья призвана помочь взять &#8220;быстрый старт&#8221; тем, кто решил строить Web-приложения &#8220;своими руками&#8221; и выбрал в качестве средства для их создания язык программирования Perl (Practical Electric Rubbish Lister). Здесь вы найдете сведения о том где &#8220;взять&#8221; Perl-интерпретатор и как его установить, какие существуют способы отладки Perl-программы, а в завершении ознакомитесь с самой простейшей Perl-программкой.
Начнем [...]]]></description>
			<content:encoded><![CDATA[<p>Данная статья призвана помочь взять &#8220;быстрый старт&#8221; тем, кто решил строить Web-приложения &#8220;своими руками&#8221; и выбрал в качестве средства для их создания язык программирования Perl (Practical Electric Rubbish Lister). Здесь вы найдете сведения о том где &#8220;взять&#8221; Perl-интерпретатор и как его установить, какие существуют способы отладки Perl-программы, а в завершении ознакомитесь с самой простейшей Perl-программкой.</p>
<p>Начнем с того, что Perl - это язык для создания серверных скриптов (литературный эквивалент - сценарий), т.е. Perl-программа выполняется на Web-сервере, а не на компьютере пользователя, как, например JavaScript-сценарии или Java-апплеты.<span id="more-82"></span>Поэтому для проверки ваших творений одного броузера будет мало, необходимо иметь доступ к Web-серверу. Самый простой способ разрешения данной проблемы - использовать для отладки Perl-программы сервер в Internet, на котором разрешено выполнение сценариев. Но в этом случае, первое - вы тратите свои кровно заработанные денежки, второе - наслаждаетесь &#8220;быстротой соединения с Internet&#8221; -). Я же хочу предложить вам несколько альтернативных методов отладки Perl-программ, которые, надеюсь, избавят вас от вышеописанных неудобств.</p>
<p>Итак,</p>
<p>* Метод1. Установить на своем компьютере Web-сервер и работать с ним как с обычным Internet-сервером.<br />
* Метод2. Воспользоваться специальными программами-отладчиками.<br />
* Метод3. Перенаправлять результаты работы интерпретатора в файл (стандартная возможность любой ОС).</p>
<p>У каждого из этих способов есть свои достоинства и недостатки. Но прежде чем применить один из вышеописанных методов, нужно настроить Perl-интерпретатор. Первым делом следует загрузить интерпретатор из Internet. Для OC Windows 9x следует скачать файл по следующему URL-адресу: http://www.activeware.com/ download/ ActivePerl/ Windows/ 5.6/ ActivePerl-5.6.0.613.msi . Если вы же используете другую ОС, загрузите страницу по адресу http://www.activeware.com/download , на ней выберите соответствующую ссылку, после чего &#8220;скачивайте&#8221; предложенный для этой цели файл.</p>
<p>После окончания процесса загрузки, запустите файл ActivePerl-5.6.0.613.msi или соответствующий файл для вашей ОС. Начнется процедура установки, в процессе которой вам предстоит ответить на ряд вопросов. В частности, о том, в какую директория нужно установить интерпретатор (устанавливать Perl желательно по следующему пути: диск:\usr).</p>
<p>Web-сервер (например, Apache) &#8220;узнает&#8221; о том, какую программу необходимо запускать для интерпретации скрипта из первой строчки программного кода скрипта. Например, строка #!/usr/bin/perl означает, что интерпретатор находится в директории /usr/bin и имеет имя perl.</p>
<p>Далее подробно рассматриваются все вышеперечисленные методы отладки Perl-программ.<br />
Метод 1.</p>
<p>Главное достоинство данного метода - это то, что работа с вашим сервером полностью аналогична работе с &#8220;реальным&#8221; Internet-сервером. Основной же недостаток заключается в том, что вы видите только окончательный результат выполнения скрипта, и не можете проследить его выполнение по шагам. Максимальная эффективность достигается при использовании данного метода в комплексе с методами 2 и 3, которые описываются ниже.</p>
<p>В качестве Web-сервера рекомендую использовать Apache (это один из самых распространенных, надежных серверов, а главное, что он бесплатный). Для корректной работы Apache под Windows 95 необходимо установить Winsock 2 (для Windows 98 и Windows NT 4.0 эта процедура не потребуется). Загрузите с сайта фирмы Microsoft файл W95ws2setup.exe (http://www.microsoft.com/ windows/ downloads/ bin/ W95ws2setup.exe) и запустите его. Произойдет установка Winsock 2. Теперь скачиваем файл apache_1_3_12_win32.exe для установки Apache под Windows (http://www.apache.org/ dist/ binaries/ win32/ apache_1_3_12_win32.exe). После установки сервера, его необходимо сконфигурировать. Для этого в любом текстовом редакторе открываем файл httpd.conf , который находится в подпапке Conf папки, в которую был установлен Apache. Далее выполните следующие действия по конфигурации сервера:</p>
<p>1. Находим строку DocumentRoot и прописываем физический путь к корневому каталогу (сайту). У меня, например, этот путь следующий &#8220;C:/FrontPage Webs/Content/mudconnector/&#8221; (заметьте, что при указании пути используется Unix разделитель, даже в среде Windows). Корневой каталог является для сервера стартовой точкой при поиске документов. Обращение к корневому каталогу осуществляется по URL-адресу, в котором указано только имя сервера (имя папки или страницы не указывается). Обычно при употреблении термина каталог опускают слово &#8220;виртуальный&#8221;. Виртуальные каталоги представляют собой директории (папки), доступ к которым через Web осуществляется по логическому имени (псевдониму). Физически эти папки могут находиться в любом месте на вашем жестком диске или на другом компьютере. При создании виртуальному каталогу присваивается псевдоним, который ставится в соответствии физическому пути к нему.</p>
<p>2. Чуть ниже находится строка со словом Directory и прописываем то же путь (&#8221;C:/FrontPage Webs/Content/mudconnector/&#8221;).</p>
<p>3. Строка со словами Options All говорит о том, что включены все возможности сервера, в том числе и поддержка cgi.</p>
<p>4. В строке со словами ScriptAlias /cgi-bin/ указываем путь к cgi-bin каталогу (в моем случае этот путь &#8220;C:/Apache/cgi-bin/&#8221;).</p>
<p>5. Чуть ниже в строке со словом Directory указываем тот же путь &#8220;C:/Apache/cgi-bin&#8221;</p>
<p>6. Добавляем строку AddHandler cgi-script .cgi .pl. Тем самым даем понять серверу, что все фалы с расширением .cgi, .pl - являются cgi исполняемыми, т.е. программами.</p>
<p>Итак, настройка сервера завершена. Если вы сделали все правильно, то после запуска файла apache.exe на экран будет выведено сообщение типа &#8220;Apache/1.3.12 (Win32) running&#8230;&#8221;. Теперь загрузите броузер и введите URL-адрес http://localhost. В броузер будет загружена домашняя страница корневого Web-узла - index.html (на моем компьютере физический путь к этой странице C:/FrontPage Webs/Content/mudconnector/index.html)</p>
<p>Теперь проверим, как выполняется Perl-программа на нашем сервере. Для этого создадим простенькую программку, текст которой приведен ниже:</p>
<p>#!/usr/bin/perl<br />
print &#8220;Content-type: text/html\n\n&#8221;;<br />
print &#8220;Ура работает!\n&#8221;;</p>
<p>текстовом редакторе создайте новый файл и введите вышеприведенный код программы. Сохраните данный файл, например, под именем test.pl в папке cgi-bin, которая находится в папке, в которую вы установили Apache. После этого перейдите в броузер и введите URL-адрес:</p>
<p>http://localhost/cgi-bin/test.pl.</p>
<p>В броузер загрузится страница, содержащее долгожданное сообщение Ура работает! Это означает, что вы победили! Теперь можно закричать &#8220;Ура!&#8221;<br />
Метод 2.</p>
<p>Отладчик, какое это сладкое слово для программиста. Конечно же, используя отладчик, вы на порядок быстрее доберетесь до этих подлых глюков, которые мешают сделать рабочую программу. Но давайте серьезно. Существует довольно много программ-отладчиков для Perl-программ. Все они имеют свои плюсы и минусы. Рассмотрим наиболее популярные из них:</p>
<p>Perl Builder (http://www.querybot.com/perlbuilderev.exe) - одна из самых мощных и удобных программ - отладчиков под W32. Из наиболее полезных особенностей данной программы можно выделить: мощный механизм отладки скриптов, возможность просмотра значений переменных, очень удобный интерфейс эмуляции Cgi-запросов, приятный (дружественный) пользовательский интерфейс. Единственный минус, как для нас, жителей СНГ, это то, что данная программа коммерческая</p>
<p>DzSoft Perl Editor (http://www.dzsoft.com/download/dzperl22.zip) - эта программа также коммерческая. Небольшая и очень удобная программа. Особенности: возможность upload-а скриптов на сервер, быстрая вставка (вставка определенного куска кода нажатием, одной клавиши), возможность редактирования переменных окружения, возможность работать в разных кодировках, что очень удобно для русскоязычного пользователя.</p>
<p>Perl Studio (http://www.perl-studio.com/pstudio.exe) - очень мощный инструмент для создания Perl скриптов, функции отладки реализованы слабее, чем у вышеупомянутых &#8220;собратьев&#8221;, но встроено очень много функций, полезных для создателя скриптов: автоматизация написания кода (например, SQL запросы, SSI - директивы), множество помощников и построителей, интуитивный интерфейс, хорошая документация. Опять же, программа коммерческая.<br />
Метод 3.</p>
<p>Самый простой метод работы с Perl-скриптами. Этот метод, не требует ни каких дополнительных программ кроме Perl - интерпретатора и броузера. Суть метода очень проста: после создания Perl скрипта мы запускаем интерпретатор и перенаправляем результаты работы в файл (например, для скрипта test.pl - perl test.pl &gt; test.htm). После этого в полученном файле удаляем строку Content-type: text/html\n\n. Просматривая данный файл броузере, вы получите результат работы скрипта.</p>
<p>Рекомендуется не &#8220;зацикливаться&#8221; на каком-либо одном из этих методов, а стараться использовать комбинированный подход.<br />
Источник: bobrdobr.ru</p>
]]></content:encoded>
			<wfw:commentRss>http://effectiveperl.com/?feed=rss2&amp;p=82</wfw:commentRss>
		</item>
		<item>
		<title>Языки веб-программирования: клиентские и серверные. В чем отличие?</title>
		<link>http://effectiveperl.com/?p=60</link>
		<comments>http://effectiveperl.com/?p=60#comments</comments>
		<pubDate>Sun, 01 Nov 2009 09:12:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Статьи]]></category>

		<guid isPermaLink="false">http://effectiveperl.com/?p=60</guid>
		<description><![CDATA[Языки веб-программирования, что это такое
Вы где-то там читали, что для того, чтобы сделать гостевую книгу или опрос, нужно знать какое-то там веб-программирование. Вы когда-то там слышали, что такое веб-программирование. Вот мы и встретились, ведь я когда-то тоже мучился этими вопросами, а ныне попытаюсь дать на них ответы.
Языки веб-программирования - это соответственно языки, которые в основном [...]]]></description>
			<content:encoded><![CDATA[<p>Языки веб-программирования, что это такое</p>
<p>Вы где-то там читали, что для того, чтобы сделать гостевую книгу или опрос, нужно знать какое-то там веб-программирование. Вы когда-то там слышали, что такое веб-программирование. Вот мы и встретились, ведь я когда-то тоже мучился этими вопросами, а ныне попытаюсь дать на них ответы.</p>
<p>Языки веб-программирования - это соответственно языки, которые в основном предназначены для работы с интернет-технологиями. А некоторые и создавались только для работы с каким-нибудь ресурсом, и лишь долгое время спустя к ним приходила известность и всеобщее признание (например, PHP). <span id="more-60"></span>Но я не буду углубляться в историю создания различных языков веб-программирования, поскольку не она является предметом этой статьи, а если читателю интересно, он может найти её на сайтах разработчиков.</p>
<p>Языки веб-программирования делятся на две группы: клиентские и серверные. Напомню, что такое сервер: это и тот компьютер, где хранится ваш сайт, и та программа, которая обрабатывает запросы браузера к какой-либо странице.</p>
<p>Клиентские языки</p>
<p>Как следует из названия, клиентские языки обрабатываются на стороне клиента пользователя, а если проще - программы на клиентском языке обрабатывает браузер. Отсюда следует и недостаток - это то, что обработка скрипта зависит от браузера пользователя, и пользователь имеет полномочия настроить свой браузер так, чтобы он вообще игнорировал написанные вами скрипты. При этом, если браузер старый, он может не поддерживать тот или иной язык или версию языка, на которую вы опираетесь. С современными браузерами таких проблем возникать не должно, к тому же языки программирования не так уж часто кардинально обновляются (раз в несколько лет) и лучшие из них давно известны. Также код клиентского скрипта может посмотреть каждый, выбрав в меню &#8220;Вид&#8221; своего браузера вкладку &#8220;Исходный код&#8221; (или что-то в этом роде).</p>
<p>Преимущество же клиентского языка заключается в том, что обработка скриптов на таком языке может выполняться без отправки документа на сервер. Это легче объяснить на примере: допустим, вам надо проверить правильно ли пользователь ввел e-mail (т.е., например, проверить в нем наличие &#8220;@&#8221;); чтобы это сделать пользователю, надо было бы отправить форму с заполненными данными, потом дождаться, пока она обработается, и лишь после этого получить сообщение об ошибке (если она, разумеется, присутствует). Процесс слишком долгий. С клиентским же языком программа сразу проверит правильное заполнение формы перед отправкой, и, если необходимо, выведет ошибку. Отсюда же вытекает и то ограничение, что с помощью клиентского языка программирования ничто не может быть записано на сервер, то есть, например, с его помощью нельзя сделать гостевую книгу, потому что тогда надо записывать сообщения в какой-либо файл на сервере.</p>
<p>Самым распространенным из клиентских языков является JavaScript, разработчиками которого является компания Netscape (www.netscape.com, думаю, вам известен их браузер Netscape Navigator) совместно с компанией SunMicrosystems (www.sun.com). Другой вариант клиентского языка это, например, VisualBasicScript (VBS). Чтобы начать учить клиентский язык веб-программирования, Вам понадобится поддерживающий этот язык браузер (Internet Explorer (www.microsoft.com), Opera (www.opera.com), Netscape Navigator (www.netscape.com), Mozilla (www.mozilla.org), будут подходящими вариантами (лично я пользуюсь последним)) и обучающий материал, который можно найти на сайте alepira.ural.ru</p>
<p>Серверные языки</p>
<p>Итак, теперь разберемся в том, как обрабатываются скрипты на серверном языке программирования. Для начала предоставлю следующую схему:</p>
<p>Когда пользователь дает запрос на какую-либо страницу (переходит на нее по ссылке, или вводит адрес в адресной строке своего браузера), то вызванная страница сначала обрабатывается на сервере, то есть выполняются все скрипты, связанные со страницой, и только потом возвращается к посетителю в виде простого HTML-документа (то есть посетитель уже никак не сможет увидеть код Вашего скрипта). Но работа ваших скриптов уже полностью зависима от сервера, на котором расположен ваш сайт, и от того, какая версия того или иного языка поддерживается хостингом.</p>
<p>Серверные языки программирования открывают перед программистом большие просторы в деятельности, однако, сколько бы не писали люди, продвигающие язык, что их язык очень легок для обучения, без предварительного груза знаний освоить довольно-таки тяжело.</p>
<p>Здесь же стоит упомянуть, что такое Система Управления Баз Данных, или СУБД. Это, по сути, тоже сервер, на котором в определенном пользователем порядке хранится разная необходимая информация, которая может быть вызвана в любой момент. Это библиотека, в которой все материалы аккуратно сложены по полочкам и в любой момент могут быть взяты. Обычно при покупке хостинга выделяется одна База данных (БД), в которой пользователь может создавать множество таблиц, а в них уже хранить разнообразную информацию. То есть если опять же вернуться к примеру с гостевой книгой, то в какой-либо созданной Вами таблице можно хранить сообщения, оставленные пользователями. Можно, конечно, хранить их и в текстовом файле, но это менее надежно, да и к тому же я привел лишь мелкий пример, а если, скажем Вам надо хранить пароли (а их надо хранить в зашифрованном виде), или связать несколько таблиц при обращении к каким-либо данным, тут без БД не обойтись.</p>
<p>В настоящее время стали известны и не напрасно СУБД, обращение к которым производится посредством Structured Query Language (SQL), или структуризированным языком запросов. Чтобы работать с этими базами данных (дополнять, обновлять, делать запросы и т. д.) вам необходимо знать этот самый SQL. Среди таких СУБД наиболее известна MySQL (www.mysql.com), я же для себя предпочел PostgreSQL (www.postgresql.org).</p>
<p>Пара слов напоследок</p>
<p>Если продолжать говорить о языках программирования, то сейчас существуют языки, которые встраиваются в сам документ, и те программы, на которых надо предварительно компилировать, то есть превращать, написанные вами исходные коды в готовую программу; недостаток вторых заключается в том, что если вам нужно обновить скрипт, то придется заново компилировать дополненные коды.</p>
<p>Среди серверных языков программирования выделяются PHP (PHP: Hypertext Preprocessor) (www.php.net), Perl (www.perl.com), SSI (Server Side Include). Для тестирования этих скриптов Вам понадобится уже побольше: сервер (www.apache.org), интерпретатор языка (можно взять на сайте производителя), ну и конечно при продуктивной работе еще и СУБД.<br />
Источник: www.postroika.ru</p>
]]></content:encoded>
			<wfw:commentRss>http://effectiveperl.com/?feed=rss2&amp;p=60</wfw:commentRss>
		</item>
		<item>
		<title>Perl: лучший язык программирования</title>
		<link>http://effectiveperl.com/?p=56</link>
		<comments>http://effectiveperl.com/?p=56#comments</comments>
		<pubDate>Sun, 01 Nov 2009 09:06:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[История языка Perl]]></category>

		<guid isPermaLink="false">http://effectiveperl.com/?p=56</guid>
		<description><![CDATA[Мощный, функционально полный язык с огромным количеством настроек. Бесплатные и компактные программы интерпретации для всех платформ. Устойчивая к ошибкам программиста система + удобный встроенный отладчик. Возможность контроля за синтаксисом. Средства манипуляции базами данных и OLE объектами. Программный доступ в Интернет и работа с электронной почтой.
Заранее извинюсь перед теми читателями, которые искали учебник или краткое руководство [...]]]></description>
			<content:encoded><![CDATA[<p>Мощный, функционально полный язык с огромным количеством настроек. Бесплатные и компактные программы интерпретации для всех платформ. Устойчивая к ошибкам программиста система + удобный встроенный отладчик. Возможность контроля за синтаксисом. Средства манипуляции базами данных и OLE объектами. Программный доступ в Интернет и работа с электронной почтой.</p>
<p>Заранее извинюсь перед теми читателями, которые искали учебник или краткое руководство по Перлу. Здесь я не буду рассказывать о синтаксисе языка и не приведу пример программы, печатающей знаменитую фразу &#8220;Hello, world!&#8221;. Предоставим это авторам издательства О&#8217;Райли и профессиональным technical writers. [1,2] <span id="more-56"></span></p>
<p>Эту статью первоначально намечалось написать в качестве оправдания перед самим собой - почему прикладной программист с десятилетним стажем работы на Си перешел на Перл для решения повседневных задач. Но перечитав внимательнее, я понял, что из &#8220;самооправдания&#8221; статья превратилась в эдакий манифест для широких масс. Вот так мой опус &#8220;вышел в люди&#8221;.</p>
<p>Итак, о чем собственно идет речь? Неужели в современной программистской среде нет лучшей альтернативы? (естественно, речь идет о программистах &#8220;широкого профиля&#8221; имеющих выбор в области языка программирования) Что дает мне Перл? В чем его недостатки?</p>
<p>Попробую ответить на все вопросы по порядку. Начнем с представления объекта обсуждения. Не вдаваясь в подробности, сообщу, что язык этот относительно молодой, но чрезвычайно мощный и интуитивно понятный для программирующего на любом языке. За короткое время Перл прочно обосновался в таких серьезных областях программистского ремесла как CGI, Unix scripting, Web-дизайн.</p>
<p>Позвольте, спросит удивленный читатель, а как насчет всеми (не)любимой, но бесспорно самой массовой платформы - Windows? А так, - используется, но в основном в серверных приложениях (ну там NT, Win2K и прочая), хотя Перл безо всяких проблем работает и на стандартных редакциях &#8220;окошек&#8221;.</p>
<p>[3] Ну почему, спросит еще более удивленный читатель, программисты всего мира дружными рядами не ринулись строчить Win-приложения на этом языке? А причина до смешного проста: Перл - скриптовый (интерпретируемый) язык, что очень удобно в WWW, но совсем не удобно для стандартного пользователя &#8220;окошек&#8221;, уровень способностей которого обычно колеблется между умением &#8220;поставить винды&#8221; и знанием &#8220;операционной системы эксель&#8221; ;-).</p>
<p>В результате Перл-программа будет работать только на компьютере, где установлен интерпретатор Перла. Поэтому пользователи многочисленных клонов Юниксов охотно пользуются Перлом в своих ежедневных задачах - ведь им не надо напрягаться с установкой интерпретатора - он подобно Квик Бейсику (извиняюсь за сравнение) автоматически включается в дистрибутив системы. Да-да, я не оговорился, обыкновенные &#8220;пользователи&#8221; используют Перл - ведь он объединяет в себе синтаксис и функциональность таких базовых команд Юникса как grep, sed, awk, tr, да и самого Юникс-шелла csh.</p>
<p>Тут программисты на Си/Си++ сразу скривятся - интерпретатор? Но ведь это дико неэффективно! Вынужден согласиться - да, не супер эффективно, когда речь идет о Бейсике.</p>
<p>Но Перл сочетает в себе преимущества компилируемых и интерпретируемых языков - программа переводится во внутренний код перед выполнением (как в Java) и в то же время остается возможность загрузки и выполнения фрагментов &#8220;на лету&#8221;.</p>
<p>Добавьте сюда поддержку объектов, возможность подключения подпрограмм написанных на других языках (си, ассемблер), наконец огромное количество прикладных библиотек (от доступа к базам данных и платформенно-независимой графики до работы с Web: разбор HTML, посылка/прием почты, загрузка/посылка по HTTP и FTP), плюс мощнейшие встроенные функции по обработке текста - вот вам вкратце весь Перл. [4,5]</p>
<p>К преимуществам Перла можно отнести и Си-подобный синтаксис (с множеством удобных расширений, хотя любители чистого Си/Си++ могут их не использовать). Несколько смущает &#8220;квикбейсиковый&#8221; способ объявления переменных (то есть - никакого!) и примерно такая же &#8220;явная&#8221; типизация объектов. Но при желании эта первая &#8220;фича&#8221; может быть выключена и тогда (ну совсем как в старом добром Си) каждая переменная должна быть описана явно. А явная типизация объектов вообще очень удобна (сравните стандарты на имена переменных, диктуемые Win-API: p - pointer, s - string, b - byte).</p>
<p>Чтобы проиллюстрировать простоту написания программ на Перле приведу пример из личного опыта: для собственных нужд (и из-за дремучести в области UNIX) мной был написан неплохой Download Manager (как позже выяснилось - со всеми функциями WGET). Написан быстро - по принципу &#8220;2 строки вокруг одной работавшей ранее&#8221;. При этом ничем выдающимся в области программирования я не блистаю, а Интернет и сетевые технологии для меня вообще &#8220;лес густой&#8221;. И ведь работает &#8220;как часы&#8221;, так как основную задачу - разбор HTML - на Перле можно решить в две-три строки.</p>
<p>Другой пример - за пару-тройку ночей сляпана довольно корявая (с художественной точки зрения) игрулька для ребенка. Игрулька (написанная на скриптовом! языке) содержит (тупейшую) анимацию, активные объекты, окошко настройки и прочая и прочая. Программа спокойно работает на любом (при наличии Tk не ниже 8.00) Юниксе и на любой Windows-системе (после компиляции в один большой экзешник). При этом (из-за моей серости в программировании) не потребовалось учить все эти дурацкие Win-API, классы окон и подобную философию). Кстати и программирование &#8220;специально для Юниксов&#8221; мне не знакомо - знай себе манипулируй абстрактными событиями и окошками. [6]</p>
<p>Добавлю, что любой эксперимент с графикой в Перле выглядит не сложнее программы &#8220;Hello, world!&#8221; - достаточно запустить поставляемую с перл-Tk программку ptksh и мы уже &#8220;в Хопре&#8221; со всеми функциями графики и даже &#8220;историей&#8221; команд. При этом можно спокойно переносить куски кода из понравившихся примеров без боязни что что-то &#8220;завалится&#8221; и придется перезагружаться так как программа &#8220;стрельнула&#8221; по системной памяти - ведь в Перле нет понятия &#8220;выход за границы массива&#8221; или &#8220;неверный указатель&#8221;. Это свойство Перла делает его незаменимым с точки зрения простоты отладки - все скаляры, будь то данные, указатели или даже объекты классов всегда являются символьными строками, а баг в программе никогда не приводит к порче реальной памяти. В результате можно отлаживать и &#8220;доводить до ума&#8221; даже явно &#8220;нерабочие&#8221; куски.</p>
<p>Не стоит забывать и о таком &#8220;необычном&#8221; для российского пользователя факторе как легальная бесплатность Перла. Да-да, все вышеописанные чудеса можно безвозмездно (то есть даром) загрузить из Всемирной Паутины и пользоваться ими с чистой совестью.</p>
<p>Итак, перейдя на Перл я получил:</p>
<p>* мощный, функционально полный язык с огромным количеством надстроек, вплоть до &#8220;перегрузки операций&#8221;<br />
* бесплатные и компактные программы интерпретации для всех платформ<br />
* устойчивую к ошибкам программиста систему + удобный встроенный отладчик<br />
* возможность строгого контроля за синтаксисом<br />
* средства манипуляции базами данных и OLE объектами (последнее - только в Win)<br />
* программный доступ в Интернет и работу с электронной почтой<br />
* автоматизированную сборку-разборку HTML<br />
* поддержку сокетов (для связки клиент-сервер)<br />
* несложную и легко переносимую (Юниксы,Win,Mac) библиотеку графики - Tk</p>
<p>Ну ладно, скажет нетерпеливый читатель, а где же обещанные недостатки? Помимо интерпретируемости, Перл имеет еще один естественный недостаток - программа на нем всегда ОТКРЫТА. Если Вы захотите написать программу-викторину вроде &#8220;Поля Чудес&#8221; или &#8220;Миллионера&#8221;, то такую игру &#8220;взломает&#8221; любой малограмотный пользователь.</p>
<p>Этого можно избежать откомпилировав скрипт под Windows, но лицензия Перла требует открытости исходного кода и в этом случае. Какой-нибудь Вася Пупкин это проигнорирует, но для серьезных продуктов такое ограничение может стать непреодолимым препятствием.</p>
<p>Кстати, сам Win-компилятор является отдельным продуктом (и небесплатным!), к которому (хакеры не дремлют) уже придуман декомпилятор. [7]</p>
<p>Вопросы переносимости также не решены в Перле на 100% (как почти в любом другом языке). Например, программисту в Юниксе гораздо естественнее вызвать какой-нибудь любимый grep или gfind обратившись прямо в шелл, чем искать аналогичную библиотечную (а значит - переносимую) функцию на CPAN (стандартной библиотеке Перл-модулей). В результате один такой вызов приведет к &#8220;падению&#8221; всей программы под Windows или Mac. И наоборот, стоит Win-программисту &#8220;по старой привычке&#8221; использовать функции работы с реестром, OLE-объектами и т.п., как программа становится &#8220;невыполнимой&#8221; в Юниксе.</p>
<p>Несомненным недостатком, вытекающим из ранее указанного достоинства, является &#8220;мягкое&#8221; отношение к ошибкам программиста. Если не включить модуль строгого контроля (а кому понравится ситуация когда компилятор то и дело требует описать переменную или &#8220;ругается&#8221; на &#8220;подозрительные&#8221; вольности с указателями), то обращение к строке как к указателю может привести к неожиданной порче соответствующей переменной. А чего стоят &#8220;отрицательные&#8221; индексы массива, адресующие массив &#8220;с конца&#8221;? Если это сделано не умышленно то программа не &#8220;завалится&#8221;, но и не пожалуется на такую вольность.</p>
<p>Если от прочтения последних абзацев у читателя появилось отвращение к этому языку советую перечитать начало статьи (во всем плохом есть немного хорошего и наоборот). Кстати, философия Перла не так примитивна как может показаться - стоит начать изучать этот язык и программировать на нем и у вас тут же возникнет ощущение, что &#8220;кто-то тут все хорошо продумал&#8221;. Но, впрочем, это тема для другой статьи.<br />
Источник:webfocus.ru</p>
]]></content:encoded>
			<wfw:commentRss>http://effectiveperl.com/?feed=rss2&amp;p=56</wfw:commentRss>
		</item>
		<item>
		<title>Perl для системного администрирования</title>
		<link>http://effectiveperl.com/?p=107</link>
		<comments>http://effectiveperl.com/?p=107#comments</comments>
		<pubDate>Sat, 31 Oct 2009 10:32:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Изучаем Perl]]></category>

		<guid isPermaLink="false">http://effectiveperl.com/?p=107</guid>
		<description><![CDATA[Автор: Дэвид Н. Бланк-Эдельман
Год: 2001
Формат: PDF
Издат.:Символ Плюс
Страниц: 496
Размер: 6 Mb
Язык: Русский
Perl для системного администрирования
Эта книга будет полезна администраторам с различным уровнем опыта - от обычных пользователей Linux до администраторов крупных систем. Автор рассматривает основные платформы, включая Unix, Windows NT/2000 и MacOS. При наличии некоторого опыта программирования на Perl вы узнаете, как при помощи этого языка [...]]]></description>
			<content:encoded><![CDATA[<p>Автор: Дэвид Н. Бланк-Эдельман<br />
Год: 2001<br />
Формат: PDF<br />
Издат.:Символ Плюс<br />
Страниц: 496<br />
Размер: 6 Mb<br />
Язык: Русский<br />
Perl для системного администрирования</p>
<p>Эта книга будет полезна администраторам с различным уровнем опыта - от обычных пользователей Linux до администраторов крупных систем.<span id="more-107"></span> Автор рассматривает основные платформы, включая Unix, Windows NT/2000 и MacOS. При наличии некоторого опыта программирования на Perl вы узнаете, как при помощи этого языка повысить производительность во многих областях, включая: управление учетными записями пользователей; наблюдение за файловой системой и отслеживание процессов; работу с сетевыми службами имен NIS и DNS; администрирование баз данных при помощи DBI и ODBC; работу со службами каталогов LDAP и ADSI; обработку и анализ файлов журналов регистрации; поддержку защищенной сети; наблюдение за удаленными устройствами средствами SNMP. Автор - опытный системный администратор, работающий в многоплатформенном окружении, что предоставляет вам хорошую возможность поучиться на чужом опыте. Вы узнаете о возможных ловушках и способах их обойти при помощи Perl. Включенные в книгу примеры и сценарии можно использовать для решения рутинных повседневных задач.</p>
<p>Оглавление:<br />
1. Введение<br />
2. Файловые системы<br />
3. Учетные записи пользователей<br />
4. Действия пользователей<br />
5. Службы имен TCP/IP<br />
6. Службы каталогов<br />
7. Администрирование баз данных SQL<br />
8. Электронная почта<br />
9. Журналы<br />
10. Безопасность и наблюдение за сетью<br />
Источник: progbook.net</p>
]]></content:encoded>
			<wfw:commentRss>http://effectiveperl.com/?feed=rss2&amp;p=107</wfw:commentRss>
		</item>
	</channel>
</rss>
