<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>LXF100-101:Программирование на Perl - История изменений</title>
		<link>http://wiki2.linuxformat.ru/index.php?title=LXF100-101:%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_Perl&amp;action=history</link>
		<description>История изменений этой страницы в вики</description>
		<language>ru</language>
		<generator>MediaWiki 1.11.1</generator>
		<lastBuildDate>Wed, 13 May 2026 20:11:00 GMT</lastBuildDate>
		<item>
			<title>2sash-kan: /* Продолжаем работать */</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF100-101:%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_Perl&amp;diff=9865&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Продолжаем работать&lt;/span&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 14:16, 14 марта 2010&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 348:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 348:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;этом: отправьте свой код по адресу letters@linuxformat.ru, и воз-&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;этом: отправьте свой код по адресу letters@linuxformat.ru, и воз-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;можно, мы поместим его на LXFDVD. Если не удается заставить&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;можно, мы поместим его на LXFDVD. Если не удается заставить&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;бота работать, загляните на наши форумы http://&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;www.linuxforum.ru&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;бота работать, загляните на наши форумы http://&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;unixforum&lt;/ins&gt;.&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;org&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Ширина=200px}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Ширина=200px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Это очень гибкое решение: если кажется, что с компьютером что-то случилось, можно запустить бота на web-сервере и допросить его;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Это очень гибкое решение: если кажется, что с компьютером что-то случилось, можно запустить бота на web-сервере и допросить его;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Sun, 14 Mar 2010 14:16:06 GMT</pubDate>			<dc:creator>2sash-kan</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF100-101:%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_Perl</comments>		</item>
		<item>
			<title>Yaleks в 09:48, 21 марта 2009</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF100-101:%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_Perl&amp;diff=7380&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 09:48, 21 марта 2009&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 13:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 13:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;с пониманием у вас не возникнет.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;с пониманием у вас не возникнет.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Заголовок=Стоп… а что такое IRC?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Содержание=IRC (Internet Relay Chat - ретранслируемый интернет-чат) - это система обмена сообщениями в режиме реального времени, предшественница всемирной паутины (World Wide Web),&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;изобретенная в 1988 году. IRC - открытый текстовый протокол, и написать клиента для&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;него может каждый. IRC-обсуждения проходят в нескольких сетях; одни ориентированы&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;на свободное ПО (irc://irc.freenode.net), а другие - на игры.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Каждая IRC-сеть состоит из нескольких серверов, связанных друг с другом - можно&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;выбрать как ближайший к вам географически, так и любой другой случайным образом. В&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;любом случае вы будете частью одной и той же сети. Например, чтобы начать общаться в&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;сети Freenode, найдите IRC-клиент (например, X-Chat), запустите его и введите:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; /server irc.freenode.net&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;(команды IRC начинаются со слэша). После этого зарегистрируйте имя пользователя и&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;пароль с помощью следующих команд:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; /nick &amp;lt;mynickname&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; /msg nickserv register &amp;lt;mypassword&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Потом можно зайти в «канал» (отдельная комната чата) с помощью команды:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; /join #linuxformat&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;(Название канала начинается с символа решетки.) Теперь можете писать сообщения в&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;общий чат или приватные сообщения отдельным пользователям (например, в X-Chat для&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;этого кликните правой кнопкой на имени пользователя и выберите в меню «Открыть диа-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;лог»).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Ширина=400px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Начнем с IRC-бота, написанного на Perl. Если вы интернетчик со&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Начнем с IRC-бота, написанного на Perl. Если вы интернетчик со&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;стажем, то наверняка пользовались IRC; если нет – прочтите врезку&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;стажем, то наверняка пользовались IRC; если нет – прочтите врезку&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;«Стоп… а что такое IRC?» &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;на следующей странице&lt;/del&gt;, там объясняются&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;«Стоп… а что такое IRC?», там объясняются&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;базовые понятия. Коротко говоря, IRC – это чат в реальном времени,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;базовые понятия. Коротко говоря, IRC – это чат в реальном времени,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;часто используемый разработчиками открытого ПО для взаимодействия друг с другом. Он очень быстр, в нем легко разобраться, и –&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;часто используемый разработчиками открытого ПО для взаимодействия друг с другом. Он очень быстр, в нем легко разобраться, и –&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 26:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 49:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;работы системы и ее загрузке.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;работы системы и ее загрузке.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Заголовок=Linux Format 97&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Содержание=При выборе IRC-клиента глаза&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;разбежались? Пользователи Linux&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;избалованы выбором!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Не страшно! В журнале под [[LXF97:Сравнение|номером 97 мы&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;испытывали восемь лучших]]: KVIrc,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Konversation, Kopete, XChat, Pidgin, Chatzilla,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Opera и Irssi прошлись перед нами строем&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;ради определения победителя.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Ширина=200px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Программ для мониторинга системы немеряно, но они страдают&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Программ для мониторинга системы немеряно, но они страдают&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;повышенной дотошностью и забивают ваш почтовый ящик письмами&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;повышенной дотошностью и забивают ваш почтовый ящик письмами&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 89:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 124:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== Установка ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== Установка ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Заголовок=Скорая помощь&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Содержание=Масса&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;возможностей&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;модуля Net::IRC&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;осталась&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;за рамками этого&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;обзора -&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;просмотрите&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;файлы .pm&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;в архиве, чтобы&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;узнать о них&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;больше. Также&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;рассмотрите другой&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;пример реализации&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;бота, скрипт&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;в файле irctest.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Ширина=200px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Воспользуемся специальным модулем расширения языка Perl Net::IRC,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Воспользуемся специальным модулем расширения языка Perl Net::IRC,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;предоставляющим интерфейс для протокола IRC – тогда нам не придется писать тонны кода для работы с сокетами и соединениями. Вместо&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;предоставляющим интерфейс для протокола IRC – тогда нам не придется писать тонны кода для работы с сокетами и соединениями. Вместо&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 290:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 343:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;помощью можно получить о компьютере массу информации.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;помощью можно получить о компьютере массу информации.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Заголовок=А вы что нараБОТали?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Содержание=Написали своего бота с помощью этой статьи? Расскажите нам об&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;этом: отправьте свой код по адресу letters@linuxformat.ru, и воз-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;можно, мы поместим его на LXFDVD. Если не удается заставить&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;бота работать, загляните на наши форумы http://www.linuxforum.ru.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Ширина=200px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Это очень гибкое решение: если кажется, что с компьютером что-то случилось, можно запустить бота на web-сервере и допросить его;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Это очень гибкое решение: если кажется, что с компьютером что-то случилось, можно запустить бота на web-сервере и допросить его;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;или – запустить бота на домашнем компьютере и прямо с работы&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;или – запустить бота на домашнем компьютере и прямо с работы&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;запускать и останавливать с его помощью определенные процессы.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;запускать и останавливать с его помощью определенные процессы.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Возможности безграничны – а всего-то нужен доступ к IRC!&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Возможности безграничны – а всего-то нужен доступ к IRC!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Sat, 21 Mar 2009 09:48:04 GMT</pubDate>			<dc:creator>Yaleks</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF100-101:%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_Perl</comments>		</item>
		<item>
			<title>Yaleks: Новая: {{Цикл/Программирование}} == Программирование: личный IRC-бот == : ''ЧАСТЬ 1: Любите покодировать, но нет све...</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF100-101:%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_Perl&amp;diff=7379&amp;oldid=prev</link>
			<description>&lt;p&gt;Новая: {{Цикл/Программирование}} == Программирование: личный IRC-бот == : ''ЧАСТЬ 1: Любите покодировать, но нет све...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Цикл/Программирование}}&lt;br /&gt;
== Программирование: личный IRC-бот ==&lt;br /&gt;
: ''ЧАСТЬ 1: Любите покодировать, но нет свежих идей? Майк Сондерс затевает серию публикаций о полезных мини-программах. Начнем с персонального IRC-бота…''&lt;br /&gt;
&lt;br /&gt;
Добро пожаловать в новую серию публикаций о программировании. В трех статьях этого цикла мы покажем, как писать&lt;br /&gt;
полезные программы, а затем расширять и улучшать их по&lt;br /&gt;
мере роста вашего умения. Ключевое слово здесь – «программа»:&lt;br /&gt;
мы не будем копаться ни в теории, ни в сугубо техническом мусоре;&lt;br /&gt;
вместо этого рассмотрим классные штуки, которые можно вытворять&lt;br /&gt;
в различных языках программирования. Ведь гораздо интереснее&lt;br /&gt;
писать настоящую программу, чем тратить время на изучение нудных&lt;br /&gt;
конструкций циклов! А если вы уже пробовали кодировать, проблем&lt;br /&gt;
с пониманием у вас не возникнет.&lt;br /&gt;
&lt;br /&gt;
Начнем с IRC-бота, написанного на Perl. Если вы интернетчик со&lt;br /&gt;
стажем, то наверняка пользовались IRC; если нет – прочтите врезку&lt;br /&gt;
«Стоп… а что такое IRC?» на следующей странице, там объясняются&lt;br /&gt;
базовые понятия. Коротко говоря, IRC – это чат в реальном времени,&lt;br /&gt;
часто используемый разработчиками открытого ПО для взаимодействия друг с другом. Он очень быстр, в нем легко разобраться, и –&lt;br /&gt;
главное – можно создавать виртуальных участников чата.&lt;br /&gt;
&lt;br /&gt;
Этим мы и займемся – напишем «робота», который присоединяется к чату и рассказывает о компьютере. Скажем, вы на работе или&lt;br /&gt;
в отпуске далеко от дома и хотите наблюдать за домашней системой&lt;br /&gt;
(или за сервером на площадке провайдера). Наш IRC-бот будет сидеть&lt;br /&gt;
себе в чате и ждать, когда появитесь вы и спросите его о времени&lt;br /&gt;
работы системы и ее загрузке.&lt;br /&gt;
&lt;br /&gt;
Программ для мониторинга системы немеряно, но они страдают&lt;br /&gt;
повышенной дотошностью и забивают ваш почтовый ящик письмами&lt;br /&gt;
с лишними подробностями о работе компьютера. С нашим ботом все&lt;br /&gt;
намного проще: если вы хотите узнать, сколько осталось свободного места на диске, или посмотреть, хватает ли оперативной памяти,&lt;br /&gt;
просто заскочите в IRC и спросите у него (через приватные сообщения). А самое важное – мы ограничим доступ так, чтобы эти данные&lt;br /&gt;
могли получить только вы!&lt;br /&gt;
&lt;br /&gt;
=== Букварь на Perl ===&lt;br /&gt;
Для начала пройдемся по основам Perl. Вы, небось, подумали: «А&lt;br /&gt;
с какой стати писать этого бота на Perl?» Хороший вопрос. Ведь&lt;br /&gt;
Perl – это язык скриптов, изначально задуманный для обработки текста.&lt;br /&gt;
Однако он также снабжен массой модулей расширения, один из которых существенно упрощает взаимодействие с серверами IRC.&lt;br /&gt;
&lt;br /&gt;
Perl сейчас предустановлен почти в каждом дистрибутиве; если&lt;br /&gt;
в вашей системе его не оказалось, он почти наверняка найдется в&lt;br /&gt;
менеджере пакетов. Это интерпретируемый язык, поддерживающий&lt;br /&gt;
объектно-ориентированный подход и динамическую типизацию (то&lt;br /&gt;
есть не нужно ни заранее объявлять переменные, ни задавать их тип).&lt;br /&gt;
Последующие фрагменты кода набирать не надо: просто уясните, как&lt;br /&gt;
они работают. Вывод строки элементарен:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;print “Привет!”;&amp;lt;/source&amp;gt;&lt;br /&gt;
Все выражения завершаются точкой с запятой (;), в стиле языка C.&lt;br /&gt;
Имена переменных начинаются со знака доллара:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;$num = 25;&lt;br /&gt;
$string = “гамбургеров”;&lt;br /&gt;
print “Я съел $num $string\n”;&amp;lt;/source&amp;gt;&lt;br /&gt;
Как видите, Perl не задумывается о типах переменных – он определяет их на лету. Аналогично C, символ \n означат перевод строки.&lt;br /&gt;
Массивы объявляются с символом @:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;@distros = (“Ubuntu”, “Fedora”, “SUSE”);&lt;br /&gt;
print $distros[0];&amp;lt;/source&amp;gt;&lt;br /&gt;
Этот код выводит на экран слово “Ubuntu”. По принципу многих&lt;br /&gt;
других языков программирования, первый элемент массива получает&lt;br /&gt;
номер 0. Для массивов полезна команда shift – она удаляет первый&lt;br /&gt;
элемент массива и помещает его в переменную:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;@distros = (“Ubuntu”, “Fedora”, “SUSE”);&lt;br /&gt;
$foo = shift(@distros);&lt;br /&gt;
print “$foo\n”;&lt;br /&gt;
$foo = shift(@distros);&lt;br /&gt;
print “$foo\n”;&amp;lt;/source&amp;gt;&lt;br /&gt;
Мы создали массив из трех строк, затем сдвинули (shift) его первый элемент в переменную $foo, вывели ее и сдвинули массив еще&lt;br /&gt;
раз. Итак, сначала выводится строка “Ubuntu”, за ней – “Fedora”, и в&lt;br /&gt;
итоге в массиве остался единственный элемент, “SUSE”. Расширенная&lt;br /&gt;
версия массива – это «словарь» (или «хэш»), объявление которого&lt;br /&gt;
начинается со знака процента (%):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;%weight = (“Mike” =&amp;gt; 8, “Paul” =&amp;gt; 12, “Nick” =&amp;gt; 25);&amp;lt;/source&amp;gt;&lt;br /&gt;
Здесь список слов связывается со значениями. Например, вы&lt;br /&gt;
хотите вывести вес (weight) записи Nick:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;print $weight{“Nick”};&amp;lt;/source&amp;gt;&lt;br /&gt;
Выведется 25. if устроен точно так же, как в большинстве других&lt;br /&gt;
языков:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;$x = 64;&lt;br /&gt;
if ($x == 64) {&lt;br /&gt;
print “Yep, x is 64!\n”;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
И, наконец, подпрограммы (функции) объявляются просто командой sub:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sub saystuff {&lt;br /&gt;
print “This is saystuff!\n”;&lt;br /&gt;
}&lt;br /&gt;
saystuff();&amp;lt;/source&amp;gt;&lt;br /&gt;
Таковы «колесики и винтики» программирования на Perl – все, что&lt;br /&gt;
нам нужно, чтобы начать писать IRC-бота!&lt;br /&gt;
&lt;br /&gt;
=== Установка ===&lt;br /&gt;
Воспользуемся специальным модулем расширения языка Perl Net::IRC,&lt;br /&gt;
предоставляющим интерфейс для протокола IRC – тогда нам не придется писать тонны кода для работы с сокетами и соединениями. Вместо&lt;br /&gt;
этого мы попросим Net::IRC позаботиться о сетевых взаимодействиях, а&lt;br /&gt;
сами будем дрессировать бота: пусть делает то, что нам нужно.&lt;br /&gt;
&lt;br /&gt;
Вы можете найти Net::IRC с помощью своего менеджера пакетов&lt;br /&gt;
(он называется perl-irc или net.pm или как-то вроде этого). А не найдете, не беда: собрать его из исходных текстов проще простого [даже&lt;br /&gt;
термин «собрать» здесь избыточен: Net::IRC написан на Perl, так что&lt;br /&gt;
речь идет просто о копировании его в нужный каталог, – прим.ред.].&lt;br /&gt;
Зайдите на сайт http://search.cpan.org/dist/Net-IRC/ или откройте раздел Development/Net-IRC нашего DVD (первая сторона) и скопируйте&lt;br /&gt;
файл Net-IRC-0.75.tar.gz.&lt;br /&gt;
&lt;br /&gt;
Распакуйте архив, зайдите в образовавшийся каталог и введите&lt;br /&gt;
команды:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;perl Makefile.PL&lt;br /&gt;
make&lt;br /&gt;
make install&amp;lt;/source&amp;gt;&lt;br /&gt;
Последнюю из них нужно выполнять с правами администратора.&lt;br /&gt;
Она установит модуль Net::IRC, и программа, которую мы напишем,&lt;br /&gt;
сможет его применить!&lt;br /&gt;
&lt;br /&gt;
Далее создадим две учетных записи для IRC: первая – для вас,&lt;br /&gt;
вторая – для бота (если вы завсегдатай IRC, то первая у вас уже есть).&lt;br /&gt;
Это важный этап, поскольку из-за борьбы со спамом на многих IRC-серверах пользователь должен зарегистрироваться, чтобы иметь возможность отправлять приватные сообщения другим участникам чата.&lt;br /&gt;
&lt;br /&gt;
Зайдите в IRC и переключитесь в вашего обычного пользователя.&lt;br /&gt;
Если вы еще не зарегистрированы, введите такую команду:&lt;br /&gt;
 /msg nickserv register &amp;lt;password&amp;gt;&lt;br /&gt;
(&amp;lt;password&amp;gt; замените на подходящий пароль). Примеры команд приведены для серверов Freenode, в других сетях они могут отличаться.&lt;br /&gt;
Теперь ваш пользователь зарегистрирован на сервере IRC – то есть&lt;br /&gt;
никто другой это имя не отберет. Сказать IRC-серверу, кто вы такой,&lt;br /&gt;
можно с помощью команды:&lt;br /&gt;
 /msg nickserv identify &amp;lt;password&amp;gt;&lt;br /&gt;
Нужно также зарегистрировать как пользователя нашего, пока&lt;br /&gt;
нерожденного, бота. Переключитесь в другого пользователя и задайте ему пароль таким образом:&lt;br /&gt;
 /nick UltraCoolLXFBot&lt;br /&gt;
 /msg nickserv register thisismypassword&lt;br /&gt;
Конечно, можно взять другое имя пользователя и пароль, но&lt;br /&gt;
запомните их, ведь они понадобятся коду нашего бота! Итак, мы завели две зарегистрированные учетные записи, себе и боту.&lt;br /&gt;
&lt;br /&gt;
=== Покажи мне код ===&lt;br /&gt;
Мы готовы к запуску бота. Вот его код. Его не придется набирать вручную: он приведен на нашем DVD в разделе Magazine/Perl (файл bot1.pl). Но прежде чем запускать бота, не мешает просмотреть код и его&lt;br /&gt;
описание...&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;use Net::IRC;&lt;br /&gt;
$server = ‘irc.freenode.net’;&lt;br /&gt;
$channel = ‘#blergh’;&lt;br /&gt;
$botnick = ‘MegaMikeBot’;&lt;br /&gt;
$password = ‘foobar’;&lt;br /&gt;
$botadmin = ‘M-Saunders’;&lt;br /&gt;
$irc = new Net::IRC;&lt;br /&gt;
$conn = $irc-&amp;gt;newconn(Nick =&amp;gt; $botnick, Server =&amp;gt; $server, Port =&amp;gt; 6667);&lt;br /&gt;
$conn-&amp;gt;add_global_handler(‘376’, \&amp;amp;on_connect);&lt;br /&gt;
$conn-&amp;gt;add_global_handler(‘disconnect’, \&amp;amp;on_disconnect);&lt;br /&gt;
$conn-&amp;gt;add_global_handler(‘kick’, \&amp;amp;on_kick);&lt;br /&gt;
$conn-&amp;gt;add_global_handler(‘msg’, \&amp;amp;on_msg);&lt;br /&gt;
$irc-&amp;gt;start;&lt;br /&gt;
sub on_connect {&lt;br /&gt;
$self = shift;&lt;br /&gt;
$self-&amp;gt;privmsg(‘nickserv’, “identify $password”);&lt;br /&gt;
$self-&amp;gt;join($channel);&lt;br /&gt;
$self-&amp;gt;privmsg($channel, “Lo! I’m just a silent bot.”);&lt;br /&gt;
}&lt;br /&gt;
sub on_disconnect {&lt;br /&gt;
$self = shift;&lt;br /&gt;
$self-&amp;gt;connect();&lt;br /&gt;
}&lt;br /&gt;
sub on_kick {&lt;br /&gt;
$self = shift;&lt;br /&gt;
$self-&amp;gt;join($channel);&lt;br /&gt;
$self-&amp;gt;privmsg($channel, “Please don’t kick me!”);&lt;br /&gt;
}&lt;br /&gt;
sub on_msg {&lt;br /&gt;
$self = shift;&lt;br /&gt;
$self-&amp;gt;privmsg($botadmin, `uptime`);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
Давайте пройдемся по коду. Первая строка просто сообщает&lt;br /&gt;
интерпретатору Perl, что мы хотим использовать ранее установленную библиотеку Net::IRC. На пяти следующих строках объявляются&lt;br /&gt;
параметры конфигурации – перед запуском скрипта их потребуется&lt;br /&gt;
изменить. Мы определяем адрес IRC-сервера, с которым соединится&lt;br /&gt;
наш бот, и канал, в который он войдет; затем задаем имя пользователя (ник) и пароль, с помощью которых бот авторизуется на IRC-сервере. Наконец, задается имя пользователя, с которым бот будет&lt;br /&gt;
говорить – ваша обычная учетная запись IRC.&lt;br /&gt;
&lt;br /&gt;
После этого в строке $irc = new Net::IRC; создается объект IRC-бота, с творчески выбранным именем $irc. Затем мы формируем&lt;br /&gt;
объект $conn, который создает соединение с IRC-сервером на основе&lt;br /&gt;
предоставленной ранее информации. Итак, на данном этапе у бота&lt;br /&gt;
есть все необходимое для подключения к IRC-серверу.&lt;br /&gt;
&lt;br /&gt;
Но сперва нужно сделать еще одну вещь: связать с сообщениями,&lt;br /&gt;
которые бот получает от IRC-сервера, некоторые действия. Наш бот&lt;br /&gt;
ведь не глухонемой, и он должен знать, на какие сообщения давать&lt;br /&gt;
ответ. Четыре вызова add_global_handler об этом позаботятся – они&lt;br /&gt;
говорят боту: «Получив сообщение А, перейди к подпрограмме B».&lt;br /&gt;
&lt;br /&gt;
Например, первая строка этого куска кода говорит: «Если получим сообщение 376, вызываем функцию on_connect». Сообщение&lt;br /&gt;
376 – специальный код, возвращаемый IRC-сервером на стадии установки соединения: сервер доставил информацию, что связь успешно&lt;br /&gt;
установлена, и готов к приему команд. Если вы любитель посидеть в&lt;br /&gt;
IRC, то знаете, что во время установки соединения на экране появляется множество сообщений о статусе сервера, сообщений данного&lt;br /&gt;
сообщества и т.д. Код 376 означает конец приветствий.&lt;br /&gt;
&lt;br /&gt;
Далее следуют обработчики еще для трех событий: разрыв соединения, удаление из чата и приватное сообщение. Обработчики говорят&lt;br /&gt;
боту, какие функции вызвать в тех случаях, когда связь прекращается,&lt;br /&gt;
бота гонят из чата или он получает приватное сообщение соответственно. IRC-боты могут реагировать и на всякие другие сообщения,&lt;br /&gt;
но для нашего случая этого достаточно.&lt;br /&gt;
&lt;br /&gt;
Команда $irc-&amp;gt;start; приводит бота в действие. Бот обучен, какой&lt;br /&gt;
сервер и канал использовать и какие подпрограммы вызывать при&lt;br /&gt;
получении определенных сообщений; он соединяется с сервером и&lt;br /&gt;
через несколько секунд получает сообщение 376, о котором мы говорили ранее. Оно активирует функцию on_connect.&lt;br /&gt;
&lt;br /&gt;
В этой функции вы увидите команду shift, которая была описана в&lt;br /&gt;
разделе с примером на Perl. Можете не вникать в суть кода, вкратце&lt;br /&gt;
скажем, что он делает: аргументы передаются функции в массиве, и&lt;br /&gt;
первый из них – вызывающий объект. Значение первого аргумента,&lt;br /&gt;
вызывающий объект, присваивается переменной $self, тогда можно&lt;br /&gt;
будет вызывать его функции. Есть и другие варианты, но наш обеспечивает модульность кода.&lt;br /&gt;
&lt;br /&gt;
После соединения бота с сервером мы отправляем приватное&lt;br /&gt;
сообщение (privmsg) nickserv – это обработчик имени пользователя&lt;br /&gt;
на большинстве серверов IRC. Мы предоставляем пароль бота для&lt;br /&gt;
аутентификации его на сервере. Затем мы заходим в заданный канал&lt;br /&gt;
и отправляем небольшое сообщение, означающее, что мы будем вести себя тихо, не засоряя канал всяким хламом!&lt;br /&gt;
&lt;br /&gt;
Теперь бот будет смирно сидеть в канале, пока его оттуда не пнут&lt;br /&gt;
или не прервется соединение. В этих случаях он вызовет соответствующие функции и кротко попросит: «Пожалуйста, не удаляйте меня»&lt;br /&gt;
(“Please don’t kick me!”) или повторно создаст соединение. Самая&lt;br /&gt;
важная функция здесь – это on_msg. Она вызывается, когда бот получает приватное сообщение – то есть сообщение в отдельном диалоге&lt;br /&gt;
вне основного канала. В ответ на любое сообщение бот отправляет&lt;br /&gt;
вывод команды `uptime` пользователю $botadmin, т.е. вашему обычному пользователю.&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на обратные одиночные кавычки (`) вокруг&lt;br /&gt;
команды `uptime`. Они велят Perl выполнить указанную команду [в&lt;br /&gt;
оболочке, – прим.ред.] и вернуть результат в виде строки. Таким&lt;br /&gt;
образом, строка с privmsg отправляет нашему пользователю приватное сообщение, содержащее вывод команды uptime. На большинстве&lt;br /&gt;
клавиатур клавиша одиночной обратной кавычки находится под клавишей Escape.&lt;br /&gt;
&lt;br /&gt;
=== Продолжаем работать ===&lt;br /&gt;
Пора запустить бота. Откройте файл bot1.pl и измените пять конфигурационных переменных сверху в соответствии с вашими настройками – а именно, впишите имя пользователя и пароль для бота, вами&lt;br /&gt;
зарегистрированные, а свое имя пользователя присвойте переменной&lt;br /&gt;
$botadmin. Запустите IRC-клиента, авторизуйтесь на сервере и зайдите&lt;br /&gt;
в канал, который вы указали для бота. Затем запустите бота:&lt;br /&gt;
 perl bot1.pl&lt;br /&gt;
Через пару секунд бот установит соединение, авторизуется на&lt;br /&gt;
сервере и зайдет в указанный канал. Вы узнаете о его появлении по&lt;br /&gt;
небольшому приветствию! Командой privmsg начните приватный диалог с ботом и скажите ему все, что угодно – бот пришлет результат&lt;br /&gt;
выполнения команды uptime. Отлично! Теперь можно запустить бота&lt;br /&gt;
на любом компьютере и отслеживать время работы системы (и уровни загрузки), просто общаясь с ботом в IRC-чате.&lt;br /&gt;
&lt;br /&gt;
Хотя нарекания остаются. Кто бы ни заговорил с ботом в приватном канале, результат выполнения команды uptime отправится вам.&lt;br /&gt;
Бот также умеет выполнять только команду uptime – может, вам этого&lt;br /&gt;
и достаточно, но он способен на гораздо большее.&lt;br /&gt;
&lt;br /&gt;
Если все работает нормально, можно добавить в последнюю&lt;br /&gt;
функцию (on_msg) новые возможности, например, таким образом&lt;br /&gt;
(полный код бота – в файле bot2.pl на DVD):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;sub on_msg {&lt;br /&gt;
$self = shift;&lt;br /&gt;
$event = shift;&lt;br /&gt;
if ($event-&amp;gt;nick eq $botadmin) {&lt;br /&gt;
 foreach $arg ($event-&amp;gt;args) {&lt;br /&gt;
  if ($arg =~ m/uptime/) {&lt;br /&gt;
   @output = 'uptime';&lt;br /&gt;
   foreach $line (@output) {&lt;br /&gt;
    $self-&amp;gt;privmsg($botadmin, $line);&lt;br /&gt;
   }&lt;br /&gt;
    }&lt;br /&gt;
   if ($arg =~ m/df/) {&lt;br /&gt;
    @output = 'df';&lt;br /&gt;
    foreach $line (@output) {&lt;br /&gt;
    $self-&amp;gt;privmsg($botadmin, $line);&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
На этот раз мы проверяем (if), кто отправляет боту приватное&lt;br /&gt;
сообщение (третья строка), и продолжим только если это $botadmin,&lt;br /&gt;
то есть вы! Посмотрим на текст, отправленный боту. Он содержится&lt;br /&gt;
в массиве $event-&amp;gt;args.&lt;br /&gt;
&lt;br /&gt;
Пройдемся по тексту и выясним, есть ли там команда, подлежащая выполнению. Этим занимается строка if ($arg =~ m/uptime/): она&lt;br /&gt;
означает «Если одна из строк текста, отправленного боту, содержит&lt;br /&gt;
строку uptime, сделай следующее...» Фрагмент m/uptime/ – регулярное выражение, проверяющее, есть ли в тексте строка uptime.&lt;br /&gt;
&lt;br /&gt;
Если она есть, запустим команду uptime и запишем результат ее&lt;br /&gt;
выполнения в массив @output. Потом в цикле выведем каждую строку текста, содержащегося в массиве.&lt;br /&gt;
&lt;br /&gt;
Uptime возвращает только одну строку текста – может, не стоит&lt;br /&gt;
связываться с циклом? Но в следующем фрагменте кода проверяется, отправили ли мы команду df – а df возвращает несколько строк.&lt;br /&gt;
Получив команду df, бот копит ее результат и отсылает его нам, строка за строкой.&lt;br /&gt;
&lt;br /&gt;
Добавляйте новые команды, сколько душа просит. Для этого&lt;br /&gt;
копируйте и вставляйте блок кода с if, а в нем меняйте текст, который там проверяется, и выполняемую команду. Например, можно&lt;br /&gt;
добавить блок if ($arg =~ m/ps/), который получает список процессов&lt;br /&gt;
с помощью команды @output = `ps`;. Можно вставить любую команду – бот все слопает!&lt;br /&gt;
&lt;br /&gt;
Теперь у нас есть расширяемый IRC-бот, который отвечает на&lt;br /&gt;
ваши команды и только вам. Он ни о чем не проболтается случайному&lt;br /&gt;
посетителю (если только тот не зайдет под вашим именем и паролем).&lt;br /&gt;
Вряд ли вы захотите разрешить боту выключать компьютер, но с его&lt;br /&gt;
помощью можно получить о компьютере массу информации.&lt;br /&gt;
&lt;br /&gt;
Это очень гибкое решение: если кажется, что с компьютером что-то случилось, можно запустить бота на web-сервере и допросить его;&lt;br /&gt;
или – запустить бота на домашнем компьютере и прямо с работы&lt;br /&gt;
запускать и останавливать с его помощью определенные процессы.&lt;br /&gt;
Возможности безграничны – а всего-то нужен доступ к IRC!&lt;/div&gt;</description>
			<pubDate>Sat, 21 Mar 2009 09:17:56 GMT</pubDate>			<dc:creator>Yaleks</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF100-101:%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_Perl</comments>		</item>
	</channel>
</rss>