суббота, 11 июля 2015 г.

Про Perl

Я тут взялся писать маленький скрипт, который казался простым, ну, чтобы можно было пропарсить уже готовый лог IRC и построить на его основе картинку с диаграммой, на которой будет нарисован социальный граф. Есть штуковина, написанная на Java, которая делает аналогичное, но это отдельный бот, и это, пожалуй, неудобно. Поэтому захотелось что-то свое, что просто будет читать и парсить лог и будет написана на чем-то, что чаще встречается на VPS.
Выбрал Perl, потому что когда-то на нем писал чуть более сложные, чем HelloWorld приложения. Попытался написать, и вот уже часов 12 убил в сумме, а все никак не выходит каменный цветок. А все потому что изначально сделал ряд ошибок. Все-таки, любая достаточно сложная задача все-таки требует плана решения, как это ни странно, и если попытаться сразу написать код, это не всегда получается сделать быстро. Так что я уже раза три написал и стер основную часть кода, так как не сразу понял, к чему на самом деле сводилась часть задачи, которую решает скрипт. А еще я совсем забыл, как пишутся программы без объектно-ориентированного подхода. Слишком привык за те несколько лет, когда писал только на Java (ну, все-таки иногда я писал и на Perl тоже, но обычно на это уходила пара рабочих дней и это было редко). Так что лучше бы я сначала написал какой-то понятный план со структурами данных, которые нужны для этого скрипта, может быть, и быстрее получилось бы.
Теперь уже, чтобы ускорить возню с ним, приходится пользоваться исходниками PieSpy, но уже в части рисования готовой картинки. Но я так полагаю, что получив конечный результат, придется еще некоторое время поковыряться, собственно, в парсинге и составлении социального графа.
Есть ряд сложностей, которые, наверное, у PieSpy вообще не возникают. Например, бот сразу имеет список ников на IRC канале. Чтобы из лога его узнать, нужно его распарсить полностью, чтобы потом можно было искать упоминания этих ников в текстах сообщений (для чего его нужно распарсить уже второй раз). Следующей проблемой становится то, что ники могут меняться. Причем, хорошо еще, если они просто меняются на какой-то новый ник постоянно, можно просто сохранить историю и использовать список. Проблема появилась на этапе складывания информации о нике из списка его "псевдонимов", когда такая очевидная вещь, что меняться ник может и на какой-то из старых (зацикливая цепочку), от меня ускользнула.
Ну и еще одной неприятностью стало то, что на вспоминание ньюансов вроде хешей, ссылок на хеши и работу с ними ушло почти два или три подхода к кодингу. Зато теперь, вроде-бы, я и правда понимаю, что пишу. Но все-таки Perl в плане удобства программирования уступает даже Java, прежде всего отсутствием IDE для разработки, необходимостью постоянно вставлять разнообразные специальные последовательности символов, которые иногда визуально путаются ('}' и ')', например), кавычки, стрелочки, в общем, слишком много возни с клавиатурой выходит.
В процессе нашел забавный модуль, из которого даже сделали маленький ресурс - http://perlcritic.com/. Правда, я ожидал более жесткой матерной реакции на уровень "brutal". Еще бесит, что везде ссылаются на книжку Perl Best Practices, которую, в общем-то, нормальным людям положено купить, что некрасиво делать. Ну и где-то четверть придирок, по моему мнению, бывают неадекватны. Например, он будет постоянно требовать как можно скорее закрывать файлы, даже если между open и close оказывается только цикл для построчного чтения из него с достаточно длинным телом в 10-15 строк.
В общем, раньше я любил Perl для длинных скриптов, теперь стал любить меньше. Хотя лет 5 назад писал сугубо проприетарный набор скриптов для удобной работы с LDAP, вроде создания пользователей, групп и перемещения их туда и обратно по разным OU, и это довольно большой объем кода, строк эдак под 10К. Еще ради смеха писал блогодвижок на перле. В общем, опыт был. Только все это быстро забывается, и теперь уже, спустя годы, имея опыт работы с чем-то еще, смотришь на это уже не так, как раньше. Так что, наверное, полезно бывает и уйти от любимого инструмента на время и посмотреть на что-то другое. Отрезвляет.

Комментариев нет:

Отправить комментарий