<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1597283371559776165</id><updated>2011-09-08T18:26:56.968+03:00</updated><category term='много файлов'/><category term='apache'/><category term='firefox'/><category term='change cpan mirror'/><category term='table'/><category term='postgresql'/><category term='gem'/><category term='pg'/><category term='округление углов c помошью таблицы'/><category term='закруглени углов'/><category term='rails'/><category term='cpan'/><category term='IE'/><category term='catalyst'/><category term='many filex'/><category term='переименовать много файлов'/><category term='rename'/><category term='Perl'/><category term='ubuntu'/><category term='XML::Twig'/><category term='переименовать'/><category term='mod_perl'/><title type='text'>Заметки</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://orlenkostas.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1597283371559776165/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://orlenkostas.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Stanley Orlenko</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_yWXkx0iuPpA/TKmdfxH5VhI/AAAAAAAAAHY/ZV5nvu0sLM0/S220/ava_150.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1597283371559776165.post-7698363119593293177</id><published>2010-10-04T12:28:00.006+03:00</published><updated>2010-12-29T16:28:07.131+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='pg'/><category scheme='http://www.blogger.com/atom/ns#' term='gem'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>Rails pg gem</title><content type='html'>Ошибка вида:&lt;div&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div&gt;/usr/bin/ruby1.8 extconf.rb &lt;/div&gt;&lt;div&gt;checking for pg_config... no&lt;/div&gt;&lt;div&gt;checking for libpq-fe.h... no&lt;/div&gt;&lt;div&gt;Can't find the 'libpq-fe.h header&lt;blockquote&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Решается с помощью установки следующих пакетов.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;В &lt;b&gt;ubuntu&lt;/b&gt;:&lt;/div&gt;&lt;div&gt;apt-get install postgresql-server-dev-8.4&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;В &lt;b&gt;Gentoo&lt;/b&gt;:&lt;/div&gt;&lt;div&gt;emerge postgresql-server&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1597283371559776165-7698363119593293177?l=orlenkostas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://orlenkostas.blogspot.com/feeds/7698363119593293177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1597283371559776165&amp;postID=7698363119593293177' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1597283371559776165/posts/default/7698363119593293177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1597283371559776165/posts/default/7698363119593293177'/><link rel='alternate' type='text/html' href='http://orlenkostas.blogspot.com/2010/10/rails-pg-gem-ubuntu.html' title='Rails pg gem'/><author><name>Stanley Orlenko</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_yWXkx0iuPpA/TKmdfxH5VhI/AAAAAAAAAHY/ZV5nvu0sLM0/S220/ava_150.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1597283371559776165.post-7820676669442669827</id><published>2009-11-29T14:34:00.005+02:00</published><updated>2009-11-29T19:44:03.677+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='catalyst'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='mod_perl'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Catalyst mod_perl Deployment</title><content type='html'>Недавно пришлось мне разворачивать catalyst-овское приложение под Apache. Посмотрел я документацию &lt;a href="http://search.cpan.org/dist/Catalyst-Manual/lib/Catalyst/Manual/Cookbook.pod#mod_perl_Deployment"&gt;Catalyst::Manual::Cookbook&lt;/a&gt; В частности есть там пример конфигурации апача, а именно:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;    PerlSwitches -I/var/www/MyApp/lib&lt;br /&gt;    PerlModule MyApp&lt;br /&gt;&lt;br /&gt;    &amp;lt;Location /&gt;&lt;br /&gt;        &amp;nbsp;&amp;nbsp;SetHandler          modperl&lt;br /&gt;        &amp;nbsp;&amp;nbsp;PerlResponseHandler MyApp&lt;br /&gt;    &amp;lt;/Location&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Сей конфиг работать у меня отказался. Пошел читать про modperl, в результате нашел слудующий пример &lt;a href="http://perl.apache.org/docs/2.0/user/config/config.html#Modifying_C__INC__on_a_Per_VirtualHost"&gt;тут&lt;/a&gt;:&lt;br /&gt;&lt;pre class="pre-section"&gt;&lt;virtualhost&gt;&amp;lt;VirtualHost ...&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;ServerName dev1&lt;br /&gt;&amp;nbsp;&amp;nbsp;PerlOptions +Parent&lt;br /&gt;&amp;nbsp;&amp;nbsp;PerlSwitches -I/home/dev1/lib/perl&lt;br /&gt;&lt;/virtualhost&gt;&amp;lt;/VirtualHost&gt;&lt;br /&gt;&lt;/pre&gt;В конечном счете добавление опции&lt;br /&gt;&lt;code&gt;&lt;br /&gt;PerlOptions +Parent&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;решает проблему&lt;br /&gt;&lt;br /&gt;Странно как-то... в мануалах писать нерабочие конфиги, посмотрел &lt;a href="http://rt.cpan.org/Public/Dist/Display.html?Name=Catalyst-Manual"&gt;баг репорт по этому мануалу&lt;/a&gt;. Оказывает что есть &lt;a href="http://rt.cpan.org/Public/Bug/Display.html?id=31164"&gt;#31164: Catalyst::Manual::Cookbook mod_perl configuration incorrect?&lt;/a&gt; (обратите внимание что баг за Mon Dec 03 07:20:12 2007) Тут человек пишет о такой же проблеме, но предлагает другое решение. Но мануал по сей день не исправлен.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1597283371559776165-7820676669442669827?l=orlenkostas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://orlenkostas.blogspot.com/feeds/7820676669442669827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1597283371559776165&amp;postID=7820676669442669827' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1597283371559776165/posts/default/7820676669442669827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1597283371559776165/posts/default/7820676669442669827'/><link rel='alternate' type='text/html' href='http://orlenkostas.blogspot.com/2009/11/catalyst-modperl-deployment.html' title='Catalyst mod_perl Deployment'/><author><name>Stanley Orlenko</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_yWXkx0iuPpA/TKmdfxH5VhI/AAAAAAAAAHY/ZV5nvu0sLM0/S220/ava_150.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1597283371559776165.post-2027425918408766325</id><published>2009-11-16T18:27:00.011+02:00</published><updated>2009-11-16T20:24:58.541+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='IE'/><category scheme='http://www.blogger.com/atom/ns#' term='закруглени углов'/><category scheme='http://www.blogger.com/atom/ns#' term='округление углов c помошью таблицы'/><category scheme='http://www.blogger.com/atom/ns#' term='table'/><title type='text'>Закругление углов с помощью таблицы (проверено в IE7 и Firefox 3.0.15)</title><content type='html'>По моему мнение самый универсальный способ закругления углов в IE это через таблицу. Сразу покажу что мы получим в результате:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_yWXkx0iuPpA/SwGARWYXk-I/AAAAAAAAAEo/HoCTuOsU-BE/s1600/rounded_corners.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 160px; height: 43px;" src="http://4.bp.blogspot.com/_yWXkx0iuPpA/SwGARWYXk-I/AAAAAAAAAEo/HoCTuOsU-BE/s320/rounded_corners.gif" alt="" id="BLOGGER_PHOTO_ID_5404742063375225826" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Для этого нам понадобятся четыре угла, которые нужно нарисовать, я использовал GIMP:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_yWXkx0iuPpA/SwGPLcvlHgI/AAAAAAAAAFI/nG_x_-N7X9Q/s1600/corner_top_right.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 6px; height: 6px;" src="http://2.bp.blogspot.com/_yWXkx0iuPpA/SwGPLcvlHgI/AAAAAAAAAFI/nG_x_-N7X9Q/s320/corner_top_right.gif" alt="" id="BLOGGER_PHOTO_ID_5404758454678396418" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_yWXkx0iuPpA/SwGPLBoDmyI/AAAAAAAAAFA/U81rzK3AoXo/s1600/corner_top_left.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 6px; height: 6px;" src="http://3.bp.blogspot.com/_yWXkx0iuPpA/SwGPLBoDmyI/AAAAAAAAAFA/U81rzK3AoXo/s320/corner_top_left.gif" alt="" id="BLOGGER_PHOTO_ID_5404758447399082786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_yWXkx0iuPpA/SwGPKzvJZlI/AAAAAAAAAE4/eEzV6HpGF4s/s1600/corner_bottom_right.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 6px; height: 6px;" src="http://4.bp.blogspot.com/_yWXkx0iuPpA/SwGPKzvJZlI/AAAAAAAAAE4/eEzV6HpGF4s/s320/corner_bottom_right.gif" alt="" id="BLOGGER_PHOTO_ID_5404758443670726226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_yWXkx0iuPpA/SwGPKn6WweI/AAAAAAAAAEw/2aVtTHxnjeU/s1600/corner_bottom_left.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 6px; height: 6px;" src="http://4.bp.blogspot.com/_yWXkx0iuPpA/SwGPKn6WweI/AAAAAAAAAEw/2aVtTHxnjeU/s320/corner_bottom_left.gif" alt="" id="BLOGGER_PHOTO_ID_5404758440496513506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;уголки маленкие, 6х6 пикселей, в моем случае нужны были именно такие. И четыре картинки для бордеров (картинки есть, они просто очень мелкие, бордер всего 1px):&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_yWXkx0iuPpA/SwGS06A5A7I/AAAAAAAAAFo/KqEyi1jPM-8/s1600/border_top.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 1px; height: 6px;" src="http://4.bp.blogspot.com/_yWXkx0iuPpA/SwGS06A5A7I/AAAAAAAAAFo/KqEyi1jPM-8/s400/border_top.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5404762465445151666" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_yWXkx0iuPpA/SwGS00TkU1I/AAAAAAAAAFg/N4xU_6M8hik/s1600/border_right.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 6px; height: 1px;" src="http://3.bp.blogspot.com/_yWXkx0iuPpA/SwGS00TkU1I/AAAAAAAAAFg/N4xU_6M8hik/s400/border_right.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5404762463912874834" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_yWXkx0iuPpA/SwGS0gBUg4I/AAAAAAAAAFY/W42K_jGlyZ0/s1600/border_left.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 6px; height: 1px;" src="http://2.bp.blogspot.com/_yWXkx0iuPpA/SwGS0gBUg4I/AAAAAAAAAFY/W42K_jGlyZ0/s400/border_left.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5404762458467632002" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_yWXkx0iuPpA/SwGS0v5TvcI/AAAAAAAAAFQ/Tescqe7DUME/s1600/border_bottom.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 1px; height: 6px;" src="http://1.bp.blogspot.com/_yWXkx0iuPpA/SwGS0v5TvcI/AAAAAAAAAFQ/Tescqe7DUME/s400/border_bottom.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5404762462728994242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Вот по поводу использования бордеров в этом случае терзают сомнения, я думаю должен быть какой-нибудь способ более простой, если кто-то знает и поделится - буду очень благодарен.&lt;br /&gt;&lt;br /&gt;Сам HTML код:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;table style="background-color: white;" width="15%" cellpadding="0" cellspacing="0" border="0"&gt;&lt;br /&gt;&amp;nbsp;&amp;lt;tr&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;td&gt;&amp;lt;img src="corner_top_left.gif" width="6" height="6"/&gt;&amp;lt;/td&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;td height="6px" style="background-image: url('border_top.gif'); background-repeat: repeat-x; height: 6px;"&gt;&amp;lt;/td&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;td&gt;&amp;lt;img src="corner_top_right.gif" width="6" height="6"/&gt;&amp;lt;/td&gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/tr&gt;&lt;br /&gt;&amp;nbsp;&amp;lt;tr&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;td height="6px" style="background-image: url('border_left.gif'); height: 6px;"&gt;&amp;lt;/td&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;td width="100%"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-style:italic;"&gt;Содержимое округлого блока тут&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/td&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;td height="6px" style="background-image: url('border_right.gif'); height: 6px;"&gt;&amp;lt;/td&gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/tr&gt;&lt;br /&gt;&amp;nbsp;&amp;lt;tr&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;td&gt;&amp;lt;img src="corner_bottom_left.gif" width="6" height="6"/&gt;&amp;lt;/td&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;td height="6px" style="background-image: url('border_bottom.gif'); background-repeat: repeat-x; height: 6px;"&gt;&amp;lt;/td&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;td&gt;&amp;lt;img src="corner_bottom_right.gif" width="6" height="6"/&gt;&amp;lt;/td&gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/tr&gt;&lt;br /&gt;&amp;lt;/table&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Внимание!&lt;/span&gt; Для IE7 имеет разница форматирование HTML. Что это означает? Означает следующее, что записи:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;tr&gt;&lt;br /&gt;   &amp;lt;td&gt;Bla bla bla bla&amp;lt;/td&gt;&lt;br /&gt;&amp;lt;/tr&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;и&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;tr&gt;&amp;lt;td&gt;Bla bla bla bla&amp;lt;/td&gt;&amp;lt;/tr&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;IE трактует &lt;span style="font-weight: bold;"&gt;по разному&lt;/span&gt;, и соответственно результат который вы будете видеть в браузере тоже будет разным. В первом случае как я понял он пытается вставить пустую линию и получается что попало, так что обратите на это внимание.&lt;br /&gt;&lt;br /&gt;PS: Ненавижу IE !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1597283371559776165-2027425918408766325?l=orlenkostas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://orlenkostas.blogspot.com/feeds/2027425918408766325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1597283371559776165&amp;postID=2027425918408766325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1597283371559776165/posts/default/2027425918408766325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1597283371559776165/posts/default/2027425918408766325'/><link rel='alternate' type='text/html' href='http://orlenkostas.blogspot.com/2009/11/ie7-firefox-3015.html' title='Закругление углов с помощью таблицы (проверено в IE7 и Firefox 3.0.15)'/><author><name>Stanley Orlenko</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_yWXkx0iuPpA/TKmdfxH5VhI/AAAAAAAAAHY/ZV5nvu0sLM0/S220/ava_150.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_yWXkx0iuPpA/SwGARWYXk-I/AAAAAAAAAEo/HoCTuOsU-BE/s72-c/rounded_corners.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1597283371559776165.post-5741944352384694690</id><published>2009-11-14T19:59:00.009+02:00</published><updated>2009-11-14T21:23:45.568+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='change cpan mirror'/><title type='text'>Изменение cpan-овских зеркал</title><content type='html'>Ставлю модуль с cpan и судя по всему сейчас с http на perl.org какие-то проблемы, по ftp все скачивается нормально. Не очень хочется сидеть и ждать пока пройдет тайм аут и модуль таки скачается, особенно если надо много чего поставить. Наблюдается вот такая вот картина:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;Fetching with LWP:&lt;br /&gt;http://www.perl.org/CPAN/authors/id/F/FL/FLORA/namespace-clean-0.11.tar.gz&lt;br /&gt;&lt;br /&gt;&lt;дилетельное ожидание&gt;&lt;br /&gt;&lt;br /&gt;LWP failed with code[500] message[read timeout]&lt;br /&gt;Fetching with LWP:&lt;br /&gt;ftp://ftp.perl.org/pub/CPAN/authors/id/F/FL/FLORA/namespace-clean-0.11.tar.gz&lt;br /&gt;Checksum for /root/.cpan/sources/authors/id/F/FL/FLORA/namespace-clean-0.11.tar.gz ok&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Для решения проблемы идем на &lt;a href="http://www.cpan.org/SITES.html"&gt;http://www.cpan.org/SITES.html&lt;/a&gt; и выбираем там себе подходящий сайт, мой выбор пал на http://cpan.makeperl.org/. Далее запускаем cpan-овскую консоль (не забываем про sudo кому надо):&lt;br /&gt;&lt;code&gt;&lt;br /&gt;perl -MCPAN -e shell&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;и пишем там&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cpan[37]&gt; o conf urllist http://cpan.makeperl.org/&lt;br /&gt;Please use 'o conf commit' to make the config permanent!&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Как и указано если хотите чтобы изменения остались на постоянной основе нужно выполнить&lt;br /&gt;&lt;br /&gt;&lt;code&gt;o conf commit&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Для добавление урлов в список:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;o conf urllist push http://cpan.makeperl.org/&lt;br /&gt;o conf urllist unshift http://cpan.makeperl.org/&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;для удаления:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;o conf urllist shift&lt;br /&gt;o conf urllist pop&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Список зеркал можно посмотреть следующим образом:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;o conf urllist&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1597283371559776165-5741944352384694690?l=orlenkostas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://orlenkostas.blogspot.com/feeds/5741944352384694690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1597283371559776165&amp;postID=5741944352384694690' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1597283371559776165/posts/default/5741944352384694690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1597283371559776165/posts/default/5741944352384694690'/><link rel='alternate' type='text/html' href='http://orlenkostas.blogspot.com/2009/11/cpan.html' title='Изменение cpan-овских зеркал'/><author><name>Stanley Orlenko</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_yWXkx0iuPpA/TKmdfxH5VhI/AAAAAAAAAHY/ZV5nvu0sLM0/S220/ava_150.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1597283371559776165.post-8930548882395238766</id><published>2008-11-07T17:00:00.003+02:00</published><updated>2008-11-07T17:12:49.371+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='переименовать много файлов'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='переименовать'/><category scheme='http://www.blogger.com/atom/ns#' term='rename'/><category scheme='http://www.blogger.com/atom/ns#' term='много файлов'/><category scheme='http://www.blogger.com/atom/ns#' term='many filex'/><title type='text'>Переименовать большое количество файлов сразу</title><content type='html'>&lt;div style="text-align: justify;"&gt;Появилась у меня потребность переименовать кучу файлов, после непродолжительного ресерча наткнулся на на замечательную консольную утилиту Лари Уолла под названием rename с поддержкой, как не трудно догадаться, perlexpr. Несколько примеров использования.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Удалить расширение у файла:&lt;br /&gt;rename 's/\.bak$//' *.bak&lt;br /&gt;&lt;br /&gt;Перевести символы в малый регистр:&lt;br /&gt;rename 'y/A-Z/a-z/' *&lt;br /&gt;&lt;br /&gt;и т д&lt;br /&gt;&lt;br /&gt;Более подробную информацию можно найти в man rename&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1597283371559776165-8930548882395238766?l=orlenkostas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://orlenkostas.blogspot.com/feeds/8930548882395238766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1597283371559776165&amp;postID=8930548882395238766' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1597283371559776165/posts/default/8930548882395238766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1597283371559776165/posts/default/8930548882395238766'/><link rel='alternate' type='text/html' href='http://orlenkostas.blogspot.com/2008/11/blog-post.html' title='Переименовать большое количество файлов сразу'/><author><name>Stanley Orlenko</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_yWXkx0iuPpA/TKmdfxH5VhI/AAAAAAAAAHY/ZV5nvu0sLM0/S220/ava_150.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1597283371559776165.post-4432672915955186596</id><published>2008-06-30T13:53:00.015+03:00</published><updated>2008-07-11T16:54:32.649+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='XML::Twig'/><title type='text'>XML::Twig</title><content type='html'>&lt;style type="text/css"&gt;  &lt;!--   @page { size: 8.5in 11in; margin: 0.79in }   P { margin-bottom: 0.08in }  --&gt;  &lt;/style&gt;  &lt;p style="margin-bottom: 0in;"&gt;Приветствую.&lt;/p&gt;   &lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;Решил заделиться имеющимися знаниями и навыками работы с перловым модулем для работы с XML документами под названием XML::Twig. В этом документе я постараюсь осветить самые основные моменты использования данного модуля. Заранее хочу сказать что я не претендую на "последнюю инстанцию" и для полной точности нужно обращаться к &lt;a href="http://search.cpan.org/%7Emirod/XML-Twig-3.32/Twig.pm"&gt;официальной документации&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;Начнемс. Для примера возьмем xml файл следующего содержания:&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;document pubdate="2008-06-06"&amp;gt;&lt;br /&gt;      &amp;lt;chapter&amp;gt;&lt;br /&gt;              &amp;lt;section userlevel="1"&amp;gt;&amp;lt;title&amp;gt;Атрибуты подпрограммы:&amp;lt;/title&amp;gt;&lt;br /&gt;                      &amp;lt;list&amp;gt;&lt;br /&gt;                              &amp;lt;item&amp;gt;locked&amp;lt;/item&amp;gt;&lt;br /&gt;                              &amp;lt;item&amp;gt;method&amp;lt;/item&amp;gt;&lt;br /&gt;                              &amp;lt;item&amp;gt;lvalue&amp;lt;/item&amp;gt;&lt;br /&gt;                      &amp;lt;/list&amp;gt;&lt;br /&gt;              &amp;lt;/section&amp;gt;&lt;br /&gt;              &amp;lt;section userlevel="2"&amp;gt;&lt;br /&gt;                      &amp;lt;para&amp;gt;Разыменовывающие префиксы:&amp;lt;/para&amp;gt;&lt;br /&gt;                      &amp;lt;list type="bullet"&amp;gt;&lt;br /&gt;                              &amp;lt;item&amp;gt;&amp;lt;bold&amp;gt;Скаляр&amp;lt;/bold&amp;gt; $ &amp;lt;/item&amp;gt;&lt;br /&gt;                              &amp;lt;item&amp;gt;&amp;lt;bold&amp;gt;Массив&amp;lt;/bold&amp;gt; @ &amp;lt;/item&amp;gt;&lt;br /&gt;                              &amp;lt;item&amp;gt;&amp;lt;bold&amp;gt;Хеш&amp;lt;/bold&amp;gt; % &amp;lt;/item&amp;gt;&lt;br /&gt;                      &amp;lt;/list&amp;gt;&lt;br /&gt;              &amp;lt;/section&amp;gt;&lt;br /&gt;              &amp;lt;para&amp;gt;"Выполнять линейный просмотр в ассоциативном массиве —&lt;br /&gt;все равно что пытаться забить кого-нибудь до смерти заряженным Узи" Ларри Уолл&amp;lt;/para&amp;gt;&lt;br /&gt;      &amp;lt;/chapter&amp;gt;&lt;br /&gt;&amp;lt;/document&amp;gt;&lt;/pre&gt;&lt;span style=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;назовем его example.xml.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;          &lt;style type="text/css"&gt;  &lt;!--   @page { size: 8.5in 11in; margin: 0.79in }   P { margin-bottom: 0.08in }  --&gt;  &lt;/style&gt;    &lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;Хочу сразу напомнить что в начало скрипта нужно поместить директиву: use XML::Twig, дабы подключить сам модуль. Создадим обьект XML::Twig и откроем вышеуказаный файл:&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;my $twig = XML::Twig-&gt;new();&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;$twig-&gt;parsefile("example.xml");&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;возьмем корневой элемент:&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;my $root = $twig-&gt;root;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;для радующего глаз вывода воспользуемся методом set_pretty_print со стилем indented:&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;$root-&gt;set_pretty_print('indented');&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;в данном случае элемент $root сейчас содержит весь контент содержимого файла example.xml. Чтобы посмотреть содержимое переменной $root и вообще любого обьекта XML::Twig нужно воспользоваться методом print(), т. е. $root-&gt;print. Вызывать print можно только после парсинга, т е в нашем случае после $twig-&gt;parsefile("example.xml"), ибо как не трудно догадаться выводить ему будет просто нечего.&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;b&gt;Замена тега&lt;/b&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;Чтобы изменить тег &lt;/span&gt;&lt;span style=""&gt;&amp;lt;&lt;/span&gt;&lt;span style=""&gt;chapter&lt;/span&gt;&lt;span style=""&gt;&amp;gt;&lt;/span&gt;&lt;span style=""&gt; на &lt;/span&gt;&lt;span style=""&gt;&amp;lt;&lt;/span&gt;&lt;span style=""&gt;part&lt;/span&gt;&lt;span style=""&gt;&amp;gt;&lt;/span&gt;&lt;span style=""&gt; нужно:&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;my $chapter = $root-&gt;first_child('chapter');&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;$chapter-&gt;set_tag('part');&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;Метод first_child возвращает первого "ребенка" элемента $root с названием part. После используем метод set_tag чтобы задать тегу part новое название — chapter. После этих манипуляций документ примет вид:&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;document pubdate="2008-06-06"&amp;gt;&lt;br /&gt;&amp;lt;part&amp;gt;&lt;br /&gt;....................................................&lt;br /&gt;&amp;lt;/part&amp;gt;&lt;br /&gt;&amp;lt;/document&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p style="margin-bottom: 0in;"&gt;          &lt;style type="text/css"&gt;  &lt;!--   @page { size: 8.5in 11in; margin: 0.79in }   P { margin-bottom: 0.08in }  --&gt;  &lt;/style&gt;  &lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;b&gt;Обработка потомков&lt;br /&gt;&lt;/b&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;К примеру есть задача найти все теги &lt;span style=""&gt;&amp;lt;&lt;/span&gt;section&lt;span style=""&gt;&amp;gt;&lt;/span&gt; в теге &lt;span style=""&gt;&amp;lt;&lt;/span&gt;part&lt;span style=""&gt;&amp;gt;&lt;/span&gt; и удалить их, оставив при этом их содержание. Воспользуемся методом children:&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;foreach my $section ( $part-&gt;children('section') ) {&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt; $section-&gt;erase;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;}&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;метод children возвращает список детей элемнта, в данном случае детей под названием section. Если в скобках ничего не указывать, т е $part-&gt;children(), то метод вернет список всех детей, т е (section, section, para). Метод erase более подробно описывается ниже.&lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;после этого  документ примет вид:&lt;/p&gt;  &lt;pre&gt;&lt;br /&gt;&amp;lt;document pubdate="2008-06-06"&amp;gt;&lt;br /&gt;&amp;lt;chapter&amp;gt;&lt;br /&gt;  &amp;lt;title&amp;gt;Атрибуты подпрограммы:&amp;lt;/title&amp;gt;&lt;br /&gt;  &amp;lt;list&amp;gt;&lt;br /&gt;    &amp;lt;item&amp;gt;locked&amp;lt;/item&amp;gt;&lt;br /&gt;    &amp;lt;item&amp;gt;method&amp;lt;/item&amp;gt;&lt;br /&gt;    &amp;lt;item&amp;gt;lvalue&amp;lt;/item&amp;gt;&lt;br /&gt;  &amp;lt;/list&amp;gt;&lt;br /&gt;  &amp;lt;para&amp;gt;Разыменовывающие префиксы:&amp;lt;/para&amp;gt;&lt;br /&gt;  &amp;lt;list type="bullet"&amp;gt;&lt;br /&gt;    &amp;lt;item&amp;gt;&amp;lt;bold&amp;gt;Скаляр&amp;lt;/bold&amp;gt; $ &amp;lt;/item&amp;gt;&lt;br /&gt;    &amp;lt;item&amp;gt;&amp;lt;bold&amp;gt;Массив&amp;lt;/bold&amp;gt; @ &amp;lt;/item&amp;gt;&lt;br /&gt;    &amp;lt;item&amp;gt;&amp;lt;bold&amp;gt;Хеш&amp;lt;/bold&amp;gt; % &amp;lt;/item&amp;gt;&lt;br /&gt;  &amp;lt;/list&amp;gt;&lt;br /&gt;  &amp;lt;para&amp;gt;"Выполнять линейный просмотр в ассоциативном массиве — все равно что пытаться забить кого-нибудь до смерти заряженным Узи" Ларри Уолл&amp;lt;/para&amp;gt;&lt;br /&gt;&amp;lt;/chapter&amp;gt;&lt;br /&gt;&amp;lt;/document&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p style="margin-bottom: 0in;"&gt;          &lt;style type="text/css"&gt;  &lt;!--   @page { size: 8.5in 11in; margin: 0.79in }   P { margin-bottom: 0.08in }  --&gt;  &lt;/style&gt;  &lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;b&gt;Работа с атрибутами&lt;/b&gt;&lt;/p&gt;          &lt;style type="text/css"&gt;  &lt;!--   @page { size: 8.5in 11in; margin: 0.79in }   P { margin-bottom: 0.08in }  --&gt;  &lt;/style&gt;  &lt;p style="margin-bottom: 0in;"&gt;Удаление атрибутов&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Предположим что нужно удалить атрибуты у root'ового документа, для этого воспользуемся методом del_atts, т е $root-&gt;del_atts, после чего тег  &amp;lt;document pubdate="2008-06-06"&amp;gt; станет просто &amp;lt;document&amp;gt;.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Добавление атрибутов&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Добавим к тегу &lt;para&gt; атрибут attention с значением 1:&lt;/para&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;my $para &lt;span style="font-family:Times New Roman,serif;"&gt;=&lt;/span&gt; $chapter-&gt;first_child('para');&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;$para-&gt;set_att('attention' =&gt; '1');&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;Результат:&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;document pubdate="2008-06-06"&amp;gt;&lt;br /&gt;&amp;lt;chapter&amp;gt;&lt;br /&gt;................................&lt;br /&gt;&amp;lt;para attention="1"&amp;gt;"Выполнять линейный просмотр в ассоциативном массиве — все равно что пытаться забить кого-нибудь до смерти заряженным Узи" Ларри Уолл&amp;lt;/para&amp;gt;&lt;br /&gt;&amp;lt;/chapter&amp;gt;&lt;br /&gt;&amp;lt;/document&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;b&gt;Извлечение содержимого тега&lt;/b&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Для извлечения содержимого тега  &amp;lt;title&amp;gt; нужно воспользоваться методом text:&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;my $title = $section-&gt;first_child('title');&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;$title_content = $title-&gt;text;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;print $title_content,"\n";&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;Результатом будет строка: "Атрибуты подпрограммы:"&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Метод text возвращает содержимое тега исключая любые другие теги. Т е если к примеру document_title будет:&lt;/p&gt; &lt;pre&gt;&lt;br /&gt;&amp;lt;document_title&amp;gt;&lt;br /&gt;  &amp;lt;title1&amp;gt;Title 1&amp;lt;/title1&amp;gt;&lt;br /&gt;  &amp;lt;title2&amp;gt;Title 2&amp;lt;/title2&amp;gt;&lt;br /&gt;&amp;lt;/document_title&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p style="margin-bottom: 0in;"&gt;          &lt;style type="text/css"&gt;  &lt;!--   @page { size: 8.5in 11in; margin: 0.79in }   P { margin-bottom: 0.08in }  --&gt;  &lt;/style&gt;  &lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;и выполнить $document_title-&gt;text вывод будет: Title 1Title 2&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;          &lt;style type="text/css"&gt;  &lt;!--   @page { size: 8.5in 11in; margin: 0.79in }   P { margin-bottom: 0.08in }  --&gt;  &lt;/style&gt;  &lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;b&gt;Удаление тега&lt;/b&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;Для удаления тегов есть два метода, erase и delete. Erase удаляет сам тег, оставляя все содержимое. Delete также удаляет сам тег, но в отличие от erase также удаляет все его содержимое. К примеру:&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;my $section = $para-&gt;first_child('section');&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;$section-&gt;erase;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;Результат будет:&lt;/span&gt;&lt;/p&gt; &lt;pre&gt;&lt;br /&gt;&amp;lt;document pubdate="2008-06-06"&amp;gt;&lt;br /&gt;&amp;lt;document_title&amp;gt;Some title&amp;lt;/document_title&amp;gt;&lt;br /&gt;&amp;lt;part&amp;gt;&lt;br /&gt;  &amp;lt;title&amp;gt;Атрибуты подпрограммы:&amp;lt;/title&amp;gt;&lt;br /&gt;  &amp;lt;list&amp;gt;&lt;br /&gt;    &amp;lt;item&amp;gt;locked&amp;lt;/item&amp;gt;&lt;br /&gt;    &amp;lt;item&amp;gt;method&amp;lt;/item&amp;gt;&lt;br /&gt;    &amp;lt;item&amp;gt;lvalue&amp;lt;/item&amp;gt;&lt;br /&gt;  &amp;lt;/list&amp;gt;&lt;br /&gt;  &amp;lt;section userlevel="2"&amp;gt;&lt;br /&gt;..............................................................&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p style="margin-bottom: 0in;"&gt;          &lt;style type="text/css"&gt;  &lt;!--   @page { size: 8.5in 11in; margin: 0.79in }   P { margin-bottom: 0.08in }  --&gt;  &lt;/style&gt;  &lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;Если использовать delete, т е:&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;$section-&gt;delete;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;Результат будет:&lt;/span&gt;&lt;/p&gt; &lt;pre&gt;&lt;br /&gt;&amp;lt;document pubdate="2008-06-06"&amp;gt;&lt;br /&gt;&amp;lt;document_title&amp;gt;Some title&amp;lt;/document_title&amp;gt;&lt;br /&gt;&amp;lt;part&amp;gt;&lt;br /&gt;  &amp;lt;section userlevel="2"&amp;gt;&lt;br /&gt;    &amp;lt;para&amp;gt;Разыменовывающие префиксы:&amp;lt;/para&amp;gt;&lt;br /&gt;    &amp;lt;list type="bullet"&amp;gt;&lt;br /&gt;      &amp;lt;item&amp;gt;&amp;lt;bold&amp;gt;Скаляр&amp;lt;/bold&amp;gt; $ &amp;lt;/item&amp;gt;&lt;br /&gt;      &amp;lt;item&amp;gt;&amp;lt;bold&amp;gt;Массив&amp;lt;/bold&amp;gt; @ &amp;lt;/item&amp;gt;&lt;br /&gt;      &amp;lt;item&amp;gt;&amp;lt;bold&amp;gt;Хеш&amp;lt;/bold&amp;gt; % &amp;lt;/item&amp;gt;&lt;br /&gt;    &amp;lt;/list&amp;gt;&lt;br /&gt;  &amp;lt;/section&amp;gt;&lt;br /&gt;  &amp;lt;para&amp;gt;"Выполнять линейный просмотр в ассоциативном массиве — все равно что пытаться забить кого-нибудь до смерти заряженным Узи" Ларри Уолл&amp;lt;/para&amp;gt;&lt;br /&gt;&amp;lt;/part&amp;gt;&lt;br /&gt;&amp;lt;/document&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p style="margin-bottom: 0in;"&gt;          &lt;style type="text/css"&gt;  &lt;!--   @page { size: 8.5in 11in; margin: 0.79in }   P { margin-bottom: 0.08in }  --&gt;  &lt;/style&gt;  &lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;span style=""&gt;Как видно от первой секции ничего не осталось.&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;b&gt;Сохранение в файл&lt;/b&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Для сохранения в файл в XML::Twig есть метод с незамысловатым названием print_to_file. Пример использования:&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;my $twig = XML::Twig-&gt;new();&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;$twig-&gt;parsefile("example.xml");&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;my $root = $twig-&gt;root;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;$root-&gt;set_pretty_print('indented');&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;my $part = $root-&gt;first_child('part');&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;my $section = $part-&gt;first_child('section');&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;$section-&gt;delete;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;$twig-&gt;print_to_file("result.xml");&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Измененный контент example.xml будет сохранен в файл result.xml.&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;b&gt;Метод get_xpath&lt;/b&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;К примеру есть необходимость заменить все теги &amp;lt;item&amp;gt; на &amp;lt;listitem&amp;gt;. Для этой цели можно использоваться методом get_xpath. Сей замечательный метод возвращает список всех тегов которые удовлетворяют значению в скобках, '//' используется для того чтобы получить всех потомков.&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;my @item_collector = $root-&gt;get_xpath("//item");&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;foreach (@item_collector) {&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt; &lt;/p&gt;&lt;pre&gt;        $_-&gt;set_tag('listitem');&lt;/pre&gt;&lt;p&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;}&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;После последней манипуляции документ будет выглядить так:&lt;/p&gt; &lt;pre&gt;&lt;br /&gt;&amp;lt;document pubdate="2008-06-06"&amp;gt;&lt;br /&gt;&amp;lt;document_title&amp;gt;Some title&amp;lt;/document_title&amp;gt;&lt;br /&gt;&amp;lt;part&amp;gt;&lt;br /&gt;  &amp;lt;section userlevel="1"&amp;gt;&lt;br /&gt;    &amp;lt;title&amp;gt;Атрибуты подпрограммы:&amp;lt;/title&amp;gt;&lt;br /&gt;    &amp;lt;list&amp;gt;&lt;br /&gt;      &amp;lt;listitem&amp;gt;locked&amp;lt;/listitem&amp;gt;&lt;br /&gt;      &amp;lt;listitem&amp;gt;method&amp;lt;/listitem&amp;gt;&lt;br /&gt;      &amp;lt;listitem&amp;gt;lvalue&amp;lt;/listitem&amp;gt;&lt;br /&gt;    &amp;lt;/list&amp;gt;&lt;br /&gt;  &amp;lt;/section&amp;gt;&lt;br /&gt;  &amp;lt;section userlevel="2"&amp;gt;&lt;br /&gt;    &amp;lt;para&amp;gt;Разыменовывающие префиксы:&amp;lt;/para&amp;gt;&lt;br /&gt;    &amp;lt;list type="bullet"&amp;gt;&lt;br /&gt;      &amp;lt;listitem&amp;gt;&amp;lt;bold&amp;gt;Скаляр&amp;lt;/bold&amp;gt; $ &amp;lt;/listitem&amp;gt;&lt;br /&gt;      &amp;lt;listitem&amp;gt;&amp;lt;bold&amp;gt;Массив&amp;lt;/bold&amp;gt; @ &amp;lt;/listitem&amp;gt;&lt;br /&gt;      &amp;lt;listitem&amp;gt;&amp;lt;bold&amp;gt;Хеш&amp;lt;/bold&amp;gt; % &amp;lt;/listitem&amp;gt;&lt;br /&gt;    &amp;lt;/list&amp;gt;&lt;br /&gt;  &amp;lt;/section&amp;gt;&lt;br /&gt;  &amp;lt;para&amp;gt;"Выполнять линейный просмотр в ассоциативном массиве —&lt;br /&gt;все равно что пытаться забить кого-нибудь до смерти заряженным Узи" Ларри Уолл&amp;lt;/para&amp;gt;&lt;br /&gt;&amp;lt;/part&amp;gt;&lt;br /&gt;&amp;lt;/document&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p style="margin-bottom: 0in;"&gt;          &lt;style type="text/css"&gt;  &lt;!--   @page { size: 8.5in 11in; margin: 0.79in }   P { margin-bottom: 0.08in }  --&gt;  &lt;/style&gt;  &lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;Все теги &amp;lt;item&amp;gt; содержащиеся в элементе $root были изменены на  &amp;lt;listitem&amp;gt;.&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;span style="font-weight: bold;"&gt;Дополнительные&lt;/span&gt; &lt;b&gt;примеры:&lt;/b&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;1) Нужно поменять все теги list в зависимости от атрибута, если list без атрибутов, то изменить его на orderlist, а если с атрибутом type и последний равен bullet, то изменить его  на bulletlist при этом удалив атрибуты. Воспользуемся вышеупомятым методом get_xpath:&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;my @list_collector = ($root-&gt;get_xpath("//list"));&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;foreach my $list (@list_collector) {&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;        if ($list-&gt;has_no_atts) {&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;                $list-&gt;set_tag('orderlist');&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;        }&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;        if ($list-&gt;has_atts &amp;amp;&amp;amp; $list-&gt;att('type') eq 'bullet') {&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;                $list-&gt;set_tag('bulletlist');&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;                $list-&gt;del_atts;&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;}&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;para&gt; &lt;/para&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="left"&gt;}&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="left"&gt;Результат:&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="left"&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;document pubdate="2008-06-06"&amp;gt;&lt;br /&gt;  &amp;lt;chapter&amp;gt;&lt;br /&gt;    &amp;lt;section userlevel="1"&amp;gt;&lt;br /&gt;      &amp;lt;title&amp;gt;Атрибуты подпрограммы:&amp;lt;/title&amp;gt;&lt;br /&gt;      &amp;lt;orderlist&amp;gt;&lt;br /&gt;        &amp;lt;item&amp;gt;locked&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item&amp;gt;method&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item&amp;gt;lvalue&amp;lt;/item&amp;gt;&lt;br /&gt;      &amp;lt;/orderlist&amp;gt;&lt;br /&gt;    &amp;lt;/section&amp;gt;&lt;br /&gt;    &amp;lt;section userlevel="2"&amp;gt;&lt;br /&gt;      &amp;lt;para&amp;gt;Разыменовывающие префиксы:&amp;lt;/para&amp;gt;&lt;br /&gt;      &amp;lt;bulletlist&amp;gt;&lt;br /&gt;        &amp;lt;item&amp;gt;&amp;lt;bold&amp;gt;Скаляр&amp;lt;/bold&amp;gt; $ &amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item&amp;gt;&amp;lt;bold&amp;gt;Массив&amp;lt;/bold&amp;gt; @ &amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item&amp;gt;&amp;lt;bold&amp;gt;Хеш&amp;lt;/bold&amp;gt; % &amp;lt;/item&amp;gt;&lt;br /&gt;      &amp;lt;/bulletlist&amp;gt;&lt;br /&gt;    &amp;lt;/section&amp;gt;&lt;br /&gt;    &amp;lt;para&amp;gt;"Выполнять линейный просмотр в ассоциативном массиве —&lt;br /&gt;все равно что пытаться забить кого-нибудь до смерти заряженным Узи" Ларри Уолл&amp;lt;/para&amp;gt;&lt;br /&gt;  &amp;lt;/chapter&amp;gt;&lt;br /&gt;&amp;lt;/document&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;para&gt;  &lt;/para&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;2)Скопировать все теги section с содержимым в отдельный файл, предварительно заключив в тег document. В этом примере воспользуемся модулем &lt;a href="http://search.cpan.org/%7Etty/kurila-1.11_0/lib/FileHandle.pm"&gt;FileHandle&lt;/a&gt;, как результат в начале нужно прописать use FileHandle. Если сей модуль не установлен, в Linux' е его можно поставить командой: cpan install FileHandle&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;my @section_collector = $root-&gt;get_xpath("//section");&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;my $counter = 0;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;foreach my $section (@section_collector) {&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt; #Создаем новый пустой тег document&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt; my $document = XML::Twig::Elt-&gt;new( document =&gt; '' );&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt; $document-&gt;set_att( 'docref', "document$counter" );&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt; #вставляем элемент $section с содержимым  в тег document&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt; $section-&gt;move( first_child =&gt; $document );&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt; #сохраняем элемент document в файл&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt; my $fh = FileHandle-&gt;new();&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt; $fh-&gt;open("&gt;result$counter.xml");&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt; $document-&gt;print($fh,"indented");&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt; $fh-&gt;close;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt; $counter++;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;}&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;в результате в текущем каталоге появятся два файла: result0.xml и result1.xml&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;PS: Если вы нашли ошибки/неточности, сообщите пожалуйста. Обоснованная критика принимается :)&lt;/p&gt;&lt;para&gt;&lt;br /&gt;&lt;/para&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1597283371559776165-4432672915955186596?l=orlenkostas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://orlenkostas.blogspot.com/feeds/4432672915955186596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1597283371559776165&amp;postID=4432672915955186596' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1597283371559776165/posts/default/4432672915955186596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1597283371559776165/posts/default/4432672915955186596'/><link rel='alternate' type='text/html' href='http://orlenkostas.blogspot.com/2008/06/xmltwig.html' title='XML::Twig'/><author><name>Stanley Orlenko</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_yWXkx0iuPpA/TKmdfxH5VhI/AAAAAAAAAHY/ZV5nvu0sLM0/S220/ava_150.jpg'/></author><thr:total>9</thr:total></entry></feed>
