<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Perlover&#039;s Blog &#187; Perl</title>
	<atom:link href="http://blog.perlover.com/category/programming/perl/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.perlover.com</link>
	<description>Blog about Unix, Perl, Firefox, JavaScript and other internet technologies</description>
	<lastBuildDate>Thu, 12 Aug 2010 11:56:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Perl &#8211; надо ли делать свой дистрибутив проекта?</title>
		<link>http://blog.perlover.com/2010/06/23/why-need-perl-makefile-pl-make/</link>
		<comments>http://blog.perlover.com/2010/06/23/why-need-perl-makefile-pl-make/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 07:32:38 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[make]]></category>
		<category><![CDATA[Makefile]]></category>
		<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=843</guid>
		<description><![CDATA[Если вы программер на perl, и читаете эту статью, то вы навярняка задавались вопросом &#8211; как устанавливать ваши скрипты, надо ли вообще делать дистрибутив, даже если вы не распространяете проект? Я несколько лет использовал свои скрипты, устанавливая их обычным копированием в отдельную папку и прописывая до нее путь, например через строки кода use lib qw(/path1 [...]]]></description>
			<content:encoded><![CDATA[<p>Если вы программер на perl, и читаете эту статью, то вы навярняка задавались вопросом &#8211; как устанавливать ваши скрипты, <strong>надо ли вообще делать дистрибутив, даже если вы не распространяете проект?</strong> Я несколько лет использовал свои скрипты, устанавливая их обычным копированием в отдельную папку и прописывая до нее путь, например через строки кода <code>use lib qw(/path1 /path2)</code> и т.п.. Такие скрипты работали, проблем не возникало, и я вообще не думал о дистрибутивах. Затем, понадобилось устанавливать несколько своих скриптов на несколько серваков, вот тогда я и сделал свой первый дистрибутив. Но до недавнего времени, я придерживался взгляда, что дистрибутив нужен только для публичного распространения, или когда вам надо использовать свои разработки на нескольких серваках. Но так ли это на практике?</p>
<p><span id="more-843"></span>Мое последняя точка зрения &#8211; если надо запускать проект, пусть и на одном сервере, надо все таки стремится сразу создавать дистрибутив. Ниже я рассмотрю несколько плюсов и минусов в сравнении с вариантом, когда вы используете простое копирование.</p>
<p>Но пока, <strong>давайте, определимся с термином &laquo;дистрибутив&raquo; для perl</strong>. Этим термином я буду называть упакованный пакет файлов (например <em>tar.gz</em> формата), который в своем составе имеет <em>Makefile.PL</em> &#8211; стартовый perl скрипт для формирования <em>Makefile</em> файла утилиты make. Также, &laquo;правильный&raquo; дистрибутив, помимо использования make, должен иметь две раздельные фазы работы. Первая &#8211; подготовка файлов, для их дальнейшей установки, внутри своей рабочей директории (исполняется не от &#8216;<em>root</em>&#8216;, команда &#8216;<em>make all</em>&#8216;, например). Вторая &#8211; установочная: подготовленные файлы копируются в нужные установочные директории (&#8216;<em>make install</em>&#8216;). Эта фаза либо исполняется от &#8216;root&#8217;, либо от какого либо пользователя, в его внутреннюю home директорию. Хочется заметить, что в отличии от компиляционных языков, типа C/C++, perl &#8211; язык интерпретатора, поэтому в большинстве случаев в компиляции не нуждается (кроме &#8216;XS&#8217; модулей), а значит make мало что сможет сделать для нас, с первого взгляда. По этой причине, часто встает вопрос &#8211; а нужен ли дистрибутив?</p>
<p>Теперь давайте рассмотрим плюсы и минусы дистрибутива в сравнении с обычным копированием perl файлов.</p>
<h1>+)</h1>
<p><strong>Дистрибутив</strong> &#8211; это прежде всего <strong>порядок в вашей голове</strong> по поводу файлов проектов &#8211; какие файлы рабочие, где библиотеки, где директории, созданные в процессе инсталлирования. Создавая дистрибутив, вы вынуждены наводить этот порядок. Но это окупится в дальнейшем.</p>
<h1>-)</h1>
<p>На <strong>перевод готового проекта в дистрибутив требуется больше времени</strong> и изучение принципов построения дистрибутива (этот этап однократный). Но если начинать проект сразу с формирования дистрибута, этот минус уже не играет роли.</p>
<h1>-)</h1>
<p>Любые правки и их испытание на рабочем процессе &#8211; это всегда команда make install, заместо обычной правки PM или PL файла в месте, где он установлен руками. Но этот минус незначительный, так как make install обычно работает быстро &#8211; она отслеживает только те файлы, что вы изменили и инсталирует только их. Другими словами, <strong>после каждой правки исходников, для их тестирования, надо будет немного тратить больше времени.</strong></p>
<h1>+)</h1>
<p>Если вы используете <strong>написание XS модулей</strong> (вставок C кода) в проекте &#8211; то <strong>без дистрибутива вам не обойтись</strong> &#8211; такие файлы требуют компиляции, и команда make просто необходима.</p>
<h1>+)</h1>
<p>Самый большой плюс перехода на дистрибутив &#8211; это <strong>возможность использования программ контроля версий</strong>. Я остановился на git (пробовал SVN &#8211; не понравился). Дело в том, что многие программы контроля версий не учитывают точные права Unix файлов &#8211; например, git хранит в репозитарии только статус файлов: исполняемый (&#8216;x&#8217;) или нет &#8211; он не помнит user.group, в точности mode самого файла для (user, group, other) и даже не сохраняет дату модификации файла (то есть выставляет ее в &laquo;настоящее время&raquo;  между переключениями версий проекта, что на самом деле является плюсом, как нистранно &#8211; дата модификации служит ориентиром для make, что опять же плюс в использовании дистрибутива). То есть, если вы будете использовать git, вам надо будет иметь специальные свои программы, выставляющие права и/или копирующие файлы в другое месте после каждого переключения между версиями репозитария проекта (то есть без дистрибутива вы фактически создадите свой вариант дистрибутива без make, что будет являться &laquo;изобретением велосипеда&raquo;). А также надо учитывать то, что все программы контроля версий контролируют одну папку. А рабочие файлы проекта, как правило, живут не в одной папке, а раскиданы по нескольким. Поэтому программы контроля версий будут жить только с дистрибутивами.</p>
<h1>+)</h1>
<p>Написав грамотный make, можно улучшить порядок вашего проекта &#8211; <strong>make будет выставлять права, какие необходимы на рабочие директории</strong>, создавать их при необходимости и т.п.. Если вам придется запускать проект на другом нулёвом сервере &#8211; это будет минимум затрат по времени.</p>
<h1>+)</h1>
<p><strong>Использование таких команд, как <em>make distcheck</em></strong>, позволяет проверить, какие новые файлы вы добавили/создали, но не поместили их еще в MANIFEST (список файлов для дистрибутива, так сказать, список файлов &laquo;на экспорт&raquo;), поможет определиться, какие файлы надо убрать из дистрибутива (MANIFEST.SKIP). Все это &#8211; опять же порядок, который положительно скажется на вашем проекте (в MANIFEST не обязательно добавлять все файлы, некоторые можно иметь только в своей папке дистрибутива, а при подготовке &laquo;установочного&raquo; tar.gz архива они будут просто исключаться).</p>
<h1>+)</h1>
<p>Ваш проект, при создании дистрибутива, даст вам сразу такие преимущества: <strong>возможность легкого переноса вашего проекта на другие сервера без особых затрат</strong>, без проблем из него можно сделать open source проект и дать ему дальнейший импульс развития вне рамок вашей организации, или же сделать коммерческим проектом с легкой инсталяцией и т.п..</p>
<p>Вот вроде все плюсы и минусы, которые я обнаружил на основе своего опыта. Как видно, плюсов больше, чем минусов. Дополнительное время надо потратить только в самом начале проекта. Дальше &#8211; проще. В perl позаботились, чтобы облегчить жизнь разработчику &#8211; есть возможность отслеживать, какие новые файлы вы добавили в проект, но не добавили &laquo;на экспорт&raquo; в будущий дистрибут, или даже есть команды автоматического построения <em>MANIFEST</em> файла. Также, не надо руками создавать <em>Makefile</em> с длинным списком всех своих PL &amp; PM файлов &#8211; &laquo;<em>perl Makefile.PL</em>&raquo; за вас найдет в нужных папках такие файлы и автоматом включит их в <em>Makefile</em>.</p>
<p>В следующей статье я расскажу вам, как легко и быстро создавать perl дистрибутивы. Для начинающих это может показаться сложно, так как надо читать много документации, прежде чем понять это. Я попробую рассказать об этом, опуская все лишнее.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2010/06/23/why-need-perl-makefile-pl-make/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sed &#8211; некоторые тонкости regexp</title>
		<link>http://blog.perlover.com/2009/10/29/sed-regexp/</link>
		<comments>http://blog.perlover.com/2009/10/29/sed-regexp/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 06:08:41 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Regexp]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=115</guid>
		<description><![CDATA[До недавнего времени сколько бы я не делал попыток написать для sed хоть мало мальское регулярное выражение, оно у меня не работало ...]]></description>
			<content:encoded><![CDATA[<p>До недавнего времени сколько бы я не делал попыток написать для sed хоть мало мальское регулярное выражение, оно у меня не работало. Я не мог понять в чем дело, ведь там синтаксис должен быть практически такой же, как в perl. Но для меня Sed оставался странной лошадкой, которую хотелось бы обуздать, но не получалось.</p>
<p>И вот, наконец, сегодня я прочел <a href="http://www.gnu.org/software/sed/manual/sed.html">грамотную доку</a>, а также в другом месте нашел объяснение моим проблемам. Оказывается, в sed есть очень мелкие, но важные отличия, поняв которые, вы сможете писать sed команды легко.</p>
<p>Итак, оказывается, по историческим причинам, чтобы не нарушать работу старых sed команд, в sed группировка (&#8216;(&#8216;, &#8216;)&#8217;) и некоторые другие спец. символы (&#8216;+&#8217; , &#8216;?&#8217;) были заменены на символы со слешем. Вот эти отличия:</p>
<table border="0" cellspacing="2" cellpadding="2" width="100%">
<tbody>
<tr>
<th width="33%">В языке Perl</th>
<th width="33%">В sed редакторе</th>
<th width="33%">Пояснение</th>
</tr>
<tr>
<td width="33%">(&#8230;)</td>
<td width="33%">\(&#8230;\)</td>
<td width="33%">Группировка</td>
</tr>
<tr>
<td width="33%">{X,Y}</td>
<td width="33%">\{X,Y\}</td>
<td width="33%">Заданный множитель</td>
</tr>
<tr>
<td width="33%">+</td>
<td width="33%">\+</td>
<td width="33%">Повторитель &#8211; один и более раз</td>
</tr>
<tr>
<td width="33%">?</td>
<td width="33%">\?</td>
<td width="33%">Повторитель &#8211; один или ноль раз</td>
</tr>
<tr>
<td width="33%">\bfoo\b</td>
<td width="33%">\&lt;foo\&gt;</td>
<td width="33%">поиск &#8216;foo&#8217; с границами слова</td>
</tr>
<tr>
<td width="33%">$1, $2</td>
<td width="33%">\1, \2</td>
<td width="33%">Подмена на группу</td>
</tr>
</tbody>
</table>
<p>Самое главное, на чем я спотыкался всегда &#8211; я никак не мог додуматься, что &#8216;\&#8217; должен ставиться перед &#8216;(&#8216;, или перед &#8216;?&#8217; и &#8216;+&#8217; символами, например. Я видел иногда эти слеши в примерах, но я думал, что эти слеши относились к shell, но оказалось, что это тонкость sed-а.</p>
<p>P.S. Возникает вопрос, а как же тогда заменять сами символы: &laquo;?+{}()&raquo; в sed? А оказывается, их просто не надо ескейпить символом &#8216;\&#8217;. Получается как бы наоборот &#8211; эти символы сами по себе не ескейпяться, а когда нужно их специальное назначение, то перед ними ставим &#8216;\&#8217;. Типа все с ног на голову, если сравнивать с perl.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2009/10/29/sed-regexp/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
