Синхронизация текстовых файлов — простой скрипт на Perl

Случилось так, что мне стало очень нужно синхронизировать ограниченный набор файлов между флешкой и компьютером. При этом руками копировать туда-сюда, вспоминая, какой файл редактировал последним — утомительно, а «монстры» синхронизации излишни ввиду примитивности задачи, ведь рекурсивная синхронизация директорий и прочие навороты мне ни к чему.

Решил набросать простейший скрипт на Perl (поскольку перл есть у меня и дома, и на работе, в отличие от баша например), который бы проходил по указанным мной файлам и синхронизировал их опираясь на дату последнего изменения, иными словами — более свежие файлы будут заменять устаревшие.

(далее…)

Perl [Practical Extraction and Report Language]

Кратко о Perl

Perl — динамический язык программирования высокого уровня. Был задуман и начал создаваться как язык для удобной работы с текстовой информацией, отсюда вытекает основная особенность языка — строковой тип данных (строка представляет собой единый объект, а не массив отдельных символов, эту же особенность унаследовал от Perl язык PHP).

Язык знаменит своими мощными возможностями по обработке текстовых данных, что делает его весьма привлекательным для создания web-ориентированных cgi-скриптов и различных парсеров, использующих возможности регулярных выражений.

Интерпретатор Perl открытый, существуют сборки под многие популярные платформы. Также язык славится огромны количеством дополнительных модулей-библиотек, ускоряющих и упрощающих разработку приложений для решения типовых задач.

Не секрет, что perl часто используется на VPS-серверах и хостингах, в таком случае обслуживание серверов — достаточно востребованная работа. Если самостоятельно обслуживать сервер нет возможности — лучше использовать готовый сервер на хостинге, оставив решение задач по его обслуживанию техподдержке.

Интересные особенности Perl

Конструкция Switch/Case

Штатно возможность использовать конструкцию switch/case предусмотрена не была, однако это ограничение может быть обойдено достаточно простым и элегантным способом:

1
2
3
4
5
6
7
my %case = (
                  'action1' => \&action1,
                  'action2' => \&action2,
                  'actionN' => \&actionN,
                  );
my $action = 'action1';
$case{$action};

Помимо этого, можно использовать дополнительный модуль Switch, включив директиву use Switch;. В Perl6 конструкция switch/case встроена в интерпретатор.

Регулярные выражения в Perl

Мощная встроенная в язык поддержка регулярных выражений — это то, чем силён Perl. Основные операторы, используемые при работе с регулярными выражениями в Perl, это s///, m//, =~ и split (да, это тоже оператор).

Важной особенностью регулярных выражений, появившейся в последных версиях Perl, является поддержка исполнения встроенного Perl-кода и динамичности, что позволяет, например, описать и найти при помощи регулярного выражения конструкцию с любым количеством уровней вложенности без знания этого количества.

Тема регулярных выражений отлично раскрыта в имеющейся в разделе «Библиотека» книге Mastering Regular Expressions (Регулярные выражения), издание второе.

Примеры программ на Perl

Парсер тИЦ

Простейший парсер значений тИЦ, написанный на Perl, может выглядеть так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl
use warnings;
use strict;
use utf8;
use LWP::Simple;

my $base_url = 'http://bar-navig.yandex.ru/u?ver=2&show=32&url=';
my $target_url = 'http://dimio.org';
my $content = get($base_url.$target_url);
    die "Can't load tCY page!\n" if !$content;

if ( $content =~ m/^<tcy\srang="(\d{1,4})"\svalue="(\d{1,6})"\/>$/imsxo ) {
    print 'Yandex Rang = '.$1.', Yandex tCY = '.$2,"\n";
}
exit 0;

Более продвинутый парсер ТИЦ — с параллельной загрузкой значений ТИЦ для переданного в скрипт списка сайтов — можно найти в разделе Софт.

Скрипт для автоматической смены IP-адреса в TOR

Для сети TOR (бесплатные рабочие SOCKS-прокси) можно сделелать Perl скрипт для автоматической смены НИМа / получения новго IP-адреса с использованием модуля Expect или при помощи модуля Net::Telnet.

Автоматическое наполнение WordPress контентом

Как и обещал, выкладываю скрипт для создания контента под блог на wordpress (о том, как наполнять блоги на wordpress контентом я уже писал в заметке Автоматическое добавление контента в WordPress-блоги).
Выкладываю опять же «как есть» — работоспособность присутствует, а осталное не гарантируется 🙂
Кстати, именно на основе этого скрипта и родилась бесплатная программа для создания импортируемого в WordPress XML-файла — WordPress XML Creator.
(далее…)

Пополнение библиотеки — Perl Cookbook

Perl Сборник рецептов для профессионалов - скачать бесплатно

Сегдняшней книге, пополнившей «Библиотеку» сайта, решил посветить отдельную заметку — она этого заслуживает.

Книга носит название «Perl. Сборник рецептов для профессионалов (Perl cookbook)» (второе издание) и представляет собой собрание готовых решений на perl для огромного круга типичных задач, с которыми возможна встреча на практике.

Материал изложен доступно, структура продуманная, рецепты готовы к применению 🙂

Книгу должно иметь и глупо не пользоваться ей.

Pastebin из консоли. Просто и удобно.


Стал часто пользоваться сервисом pastebin и добавлять свои заметки через браузер руками быстро надоело.
Поискал и нашел в репозитории программку pastebinit — не устроила из-за ограничений по работе с pastebin-сервисами (чтобы добавили новый сервис — надо написать автору и ждать-ждать-ждать — не очень интересно), тем более, что я как раз на хостинге сделал свой сервис на стандартном движке pastebin, чтобы не иметь проблем с кодировкой (pastebin по умолчанию работает не в unicode), да и просто из интереса.
(далее…)

Новогоднее поздравление и небольшой подарок

К счастью, у меня нашлась минутка, чтобы поздравить своих читателей с Новым Годом!
Пусть неклонно растут показатели ваших проектов, а все ваши замыслы воплощаются легко и оставляют у вас только приятные ощущения!

Также я успел приготовить небольшой подарок для тех, кто пользуется блог-движком WordPress для создания сателлитов.
WordPressXMLCreator Online отныне не имеет ограничений (кроме ограничения на размер файла, с целью регулирования трафика)! Иными словами, онлайн версия генератора XML для импорта в WordPress теперь умеет:

  • генерировать любое число статей, публикуемых за одни сутки
  • назначать статьям случайных авторов из списка указанных
  • выставлять статус комментариев и пингбеков для статей (разрешены/запрещены)
  • использовать для генерации любое количество тегов и категорий для каждой статьи

И в придачу — имеет справку с примером исходного файла (подробности о возможностях скрипта есть на справочной странице)
Все замечания по работе и пожелания по доработке и расширению функционала принимаются через комментарии или по e-mail!

Ещё раз — всех с Новым Годом! 🙂

Задаётесь вопросом «Как заработать в интернет?». Блог СетевогоГибитобоя даст ответ!

Автоматическое определение кодировки терминала в perl-скрипте.

Надоело руками менять кодировки для нормального вывода русского текста в своих perl-скриптах в зависимости от кодировки терминала (запускаю скрипты под Linux (utf8), Windows (ActivePerl, cp866) и Windows (Cygwin, cp1251)). Немного погуглил, но никаких готовых рецептов не встретил, хороший запрос для поиска что-то в голову не пришёл.

Решил поступить следующим образом — определять операционную систему, в которой запущен скрипт, и в зависимости от этого выставлять кодировку выходного потока (STDOUT):

#!/usr/bin/perl;
use utf8;
require encoding;
import encoding  ('utf8', 'STDOUT' => &SetEncoding);

sub SetEncoding {
    if ($^O =~ /^MSWin\d{2}$/i) {
        return 'cp866';
    }
    elsif ($^O =~ /^cygwin$/i) {
        return 'cp1251';
    }
    elsif ( условие для следующей ОС (например - linux) ) {
        return 'utf8';
    }
         ... и так далее, исходя из личных потребностей ....
}

Замечания, исправления, дополнения и/или другие способы решения задачи по автоматической установке кодировки для perl-скрипта всегда приветствуются!

И на всякий случай, если вдруг мне не удастся найти время написать ещё что-то в блог до нового года — поздравляю всех своих читателей с наступающим новым годом, успехов вам и побольше приятных открытий! 🙂

PS: А для интересующихся фрилансом — новый, но достаточно любопытный ресурс ФрилансFM — портал о фрилансе.

Библиотека для WordPress. Как сделать своё файлохранилище

Решил переделать страницу с книгами на своём сайте, воспользовавшись доступом к MySQL, который всё равно используется в wordpress. Суть переделки довольно проста — создать функцию, которая, найдя в теле страницы определённый тег, заменяла бы его некоей информацией, полученной из базы данных wordpress. В базе, в свою очередь, может быть что угодно, в моём случае — описания и ссылки на файлы книг, представленных в «Библиотеке». Сложного в написании такой функции ничего нет, по таком принципу кстати работают многие плагины, например вставляющие видео или музыку на страницу.

(далее…)

Парсер-граббер nakolesah.ru

Был занят в свободное (от основной работы) время — делал халтуру, которая заключалась в просьбе написать парсер, чтобы сграбить структуру подбора колёс по автомобилю с сайта nakolesah.ru (естественно, на языке perl).
И вот сегодня он готов (начал в минувшее воскресенье) и проходит тестирование у заказчика. Приятно то, что это первый случай, когда моё хобби принесло небольшую денежку (которую я потрачу на другое хобби — охоту 🙂 ).
(далее…)

Пишем плагин для WordPress. Добавление в репозиторий WordPress.org (часть 7)

wordpress-plugin

Размещение своего плагина в репозитории на сайте WordPress.org

Настало время опубликовать седьмую (но видимо — не последнюю) часть руководства Как написать плагин для WordPress.

В ней я рассмотрю и пошагово изложу процесс добавления написанного плагина в репозиторий на сайте WordPress.org.

(далее…)