Клиент для livejournal com на perl


Содержание

Flexible & Powerful

Perl is a highly capable, feature-rich programming language with over 30 years of development.

Learning

With free online books, over 25,000 extension modules, and a large developer community, there are many ways to learn Perl.

Community

Perl has an active world wide community with over 300 local groups, mailing lists and support/discussion websites.

Core documentation, FAQs and translations.

Contribute

Perl is being actively developed. There are many ways to get involved

The Comprehensive Perl Archive Network (CPAN) has over 25,000 open source distributions available for download.

Events

Events, conferences, social and technical events around the world offer lots of networking and learning opportunities.

Raku (formerly known as Perl 6) is a sister language, part of the Perl family, not intended as a replacement for Perl, but as its own thing — libraries exist to allow you to call Perl code from Raku programs and vice versa.

The Perl Foundation

The Perl Foundation is dedicated to the advancement of the Perl programming language through open discussion, collaboration, design, and code.

Быстрый старт в Perl

Perl — высокоуровневый интерпретируемый динамический язык программирования общего назначения, созданный Ларри Уоллом, лингвистом по образованию [Wikipedia] . Появился в 1987 году.

Этот язык программирования богат возможностями по работе с текстом, что определяет основную область его применения — манипуляции с текстом, в частности парсинг.

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

Perl — это единственный язык, программы на котором выглядят одинаково до и после RSA-шифрования.

На момент написания этого материала актуальной версией интерпретатора является 5.22.0. Perl 6 готовится к релизу в 2015 году, но еще недостаточно документирован.

Язык программирования Perl крайне не рекомендуется брать в качестве языка для знакомства с программированием. Если вы абсолютный новичок — лучше начните с чего-нибудь менее губительного для вашего неокрепшего сознания. Серьезно, вот что говорил об этом языке Йон Риббенс:

PHP — это маленькое зло, созданное некомпетентными новичками, в то время как Perl — это большое и коварное зло, созданное умелыми, но извращёнными профессионалами.

К слову сказать, с PHP начинать тоже не стоит. А теперь ближе к делу.

Среда исполнения

На данный момент Perl официально поддерживается тремя ведущими платформами: Mac OS X, Unix и Windows. На первых двух из них среда исполнения Perl является предустановленной, и ее версию можно узнать через команду perl -v (свежую версию можно скачать здесь), а для операционных систем семейства Windows интерпретатор Perl доступен для скачивания на этой странице. Рекомендуется выбирать ActivePerl (дистрибутив от ActiveState) как самый распространенный.

Интегрированная среда разработки (IDE)

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

Padre, the Perl IDE

Мультиплатформенная легковесная среда разработки, созданная специально для Perl и удобная для новичков. Помимо традиционных подсветки синтаксиса и автодополнения, имеет также встроенные инструменты рефакторинга. Кстати, Padre сама написана на Perl 5.

Среда разработки, основанная на Eclipse. Подойдет для тех, кто собирается углубиться в Perl. Также поддерживается всеми основными платформами, однако обладает большим функционалом: в частности, поддерживает инспекцию переменных, навигацию по краткой документации и средства отладки (для последнего необходимо скачивать дополнительный модуль).

Инструкция по установке на официальном сайте. Перед установкой вам необходимо иметь на компьютере Eclipse (версии, не ниже 3.6), среду исполнения Java (JRE) и интерпретатор Perl (инструкции по его установке даны выше).

Об установке дополнительных плагинов для EPIC можно почитать здесь.

Текстовые редакторы

Как и в случае с любым языком программирования, конечно же, вам предоставляется огромное множество мультиплатформенных текстовых редакторов на выбор: от предустановленных блокнотов до более удобных средств редактирования исходного кода с подсветкой синтаксиса, автодополнением и т.п. В частности, обратите внимание на:

  • KomodoEdit — урезанная версия коммерческой среды разработки Komodo IDE, разрабатываемая ActiveState (той самой, которая поддерживает дистрибутив ActivePerl), располагает функциями автодополнения, подсветки синтаксиса, множественных курсоров и подсказок из документации;
  • Vim — текстовый редактор, интерфейс которого может оказаться непривычным для Windows-пользователя; поддерживает подсветку синтаксиса;
  • Sublime Text — один из самых инструментов редактирования исходного кода с подсветкой синтаксиса, автодополнением и т.п., функционал которого расширяется множеством существующих плагинов;
  • Notepad++ — легковесный текстовый редактор, отличающийся наиболее корректной, после KomodoEdit, подсветкой синтаксиса; функционал может быть расширен плагинами, однако специально для Perl их существует довольно мало.

CodeGround

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

Первый «Привет, мир!» на Perl

Традиционно предлагаем начать знакомство с новым языком со всем хорошо известной программы:

Сохраните эту строку в файле hello.pl и запустите только что созданную вами программу командой:

Однако прежде убедитесь, что исполняемые файлы Perl есть среди ваших переменных среды (переменных окружения), а также в том, что вы вызывается perl из папки с исходным файлом hello.pl . В случае успеха, вы увидите ожидаемое «Hello, world!»

Поздравляем, вы начали писать на Perl!

А дальше — в путь…

Отличное англоязычное руководство по языку программирования Perl для быстрого старта вы можете найти на сайте tutorialspoint.com. Помимо этого, существует официальный обучающий ресурс — learn.perl.org.

Среди русскоязычных руководств отметим перевод мультиязычного Учебника Perl. В нем переведены не все главы, однако в качестве основы ресурс вполне пригоден. Другое руководство по азам на русском вы можете найти здесь.

Если же вам не по душе изучение посредством чтения, вы можете посмотреть видео-уроки на YouTube в составе следующих плейлистов:

Если вам удастся найти хорошие видео-уроки по Perl на русском языке, обязательно напишите нам об этом в комментарии к этой статье или на почту chief@tproger.ru.

Естественно, вам не обойтись без официальной документации. Скачать оффлайн-версию в HTML и PDF формате можно на этой странице.

Среди книг для начала и продолжения обучения отметим:

  • «Изучаем Perl», Рэндал Л. Шварц, Том Феникс, Брайан Д Фой (июнь 2011);
  • «Modern Perl», chromatic (2014).

Список рекомендуемых к прочтению книг вы можете найти также здесь.

Спасибо за внимание и успехов в изучении Perl!

Perl’ы для веб-мастера

Чтобы решить основные задачи, стоящие перед вебмастером, без необходимости многомесячного изучения языков программирования, мы опустим длительное обучение теории и сразу перейдем к практике. Учиться будем в процессе создания скриптов, которые вы сможете опробовать на своем сайте.
Что необходимо знать о сервере
Прежде чем писать CGI-скрипты, необходимо узнать некоторую информацию о сервере, на котором эти скрипты будут работать. Всю эту информацию можно получить у провайдера, где находится сайт. Бесплатные службы, предоставляющие место под страницы, обычно размещают такую информацию в своих «хелпах», в разделах, посвященных CGI и т. п. Адреса серверов, которые разрешают выполнение CGI-скриптов, мы публиковали в прошлом номере МК.
Наиболее важный параметр из тех, что необходимо знать — путь к интерпретатору Perl на сервере, который следует указывать в первой строке каждой программы, написанной на Perl. Обычно она имеет вид:

Такую строку мы будем использовать в дальнейших примерах.
Еще обязательно знать полный путь к cgi-bin-директории вашего сайта и полный путь к его основной (корневой) директории. Это не адрес, начинающийся с http:// — это полный путь от корневой директории сервера, на котором находится ваш сайт, и имеющий вид:

Чтобы скрипт имел возможность отправлять письма, понадобится узнать путь к почтовой программе (sendmail). Он может выглядеть примерно так:

Инструменты
Для написания скриптов на Perl’е, не обязательно устанавливать какой-либо специальный софт — подойдет и любой текстовый редактор, тот же «Блокнот», входящий в состав Windows. Но все-таки упомяну пару инструментов, которые помогут упростить написание и отладку скриптов. Прежде всего, понадобится интерпретатор Perl для Windows, который можно загрузить со страницы http://www.activestate.com/ActivePerl/download.htm (либо выбрать другие варианты адресов с сервера http://www.perl.com/). А для программирования и отладки самый удобный, на мой взгляд, инструмент — это Perl Builder (http://www.solutionsoft.com/). Кроме пошаговой отладки с возможностью просмотра по ходу значений переменных, имеется функция автоматической генерации некоторых скриптов. А вообще, существует достаточно много различного программного обеспечения, которое помогает в создании и отладке программ на Perl — мы обязательно с ним ознакомимся в дальнейшем.
То, что я описал эти инструменты именно сейчас и буду время от времени упоминать о них в статье, не означает, что они обязательны. Вы спокойно можете набирать все примеры в Блокноте, просто тогда вы не сможете производить отладку скриптов в процессе их написания — это прийдется делать прямо на сервере.

Создаем счетчик посещений
Есть множество рейтингов, предоставляющих счетчики посешений, собирающих статистику. Взамен они требуют установить у вас на сайте свою кнопку. Но что делать, если вы не гонитесь за высоким положением в рейтинге и не желаете вставлять в свою страницу кнопку рейтинга? Вам просто нужно считать посетителей и собирать некоторую статистику. Или почему бы не проконтролировать правильность информации, собранной чужим счетчиком? А может, вы хотите создать собственный рейтинг? ОК, давайте сделаем сначала простейший счетчик, а затем превратим его в систему сбора статистики и удобного просмотра собранной информации. А заодно и научим генерировать картинку счетчика.
Начнем с простейшего текстового счетчика. Правда, чтобы он работал, необходима поддержка сервером инструкций SSI (Server Side Includes) — об этом также узнайте у хостинг-провайдера.
Создайте в текстовом редакторе два файла и сохраните их на своем диске с именами count.cgi и count.txt соответственно. Второй из них пусть будет пустым, а в первом наберите следующий текст:

Если вы набирали текст в Perl Builder, то, выбрав в меню Run/Debug > Check Syntax With -w Flag, сможете сразу проверить скрипт на наличие ошибок. Если ошибки присутствуют — то Perl Builder выдаст соответствующие сообщения с номером строки, в которой содержится ошибка.
Теперь с помощью FTP-клиента скопируйте оба файла в cgi-bin-директорию своего сервера. Отметим, что делать это надо в режиме ASCII. После этого установите права доступа (команда CHMOD) для count.cgi — 755, а для count.txt — 666. Осталось вставить вызов скрипта в HTML-страницу. В том месте страницы, где вы хотите увидеть счетчик посещений вставьте строку:

где /cgi-bin/count.cgi — полный путь к файлу скрипта от корневой директории вашего сайта. Т. е. если полный путь к скрипту выглядит как http://your-domen.com/cgi-bin/count.cgi, то в вызове скрипта пишем /cgi-bin/count.cgi.
Теперь можно загрузить страницу на сервер и открыть ее в браузере. Вы увидите цифры — показания счетчика, увеличивающиеся при каждом вызове страницы. Осталось разобраться, что же мы такое сделали.
Чтобы вы хоть немного могли понимать, о чем идет речь, предлагаю некоторые начальные сведения о том, «что есть что в Perl».
Имена скалярных переменных всегда начинаются со знака «$». Например: $ind. Скалярная переменная — это переменная, содержащая только одно значение. В отличие от массива (списка), в котором содержится множество значений. Имя массива всегда начинается со знака «@». Например: @ind.
Итак, о том, что первая строка скрипта указывает, где искать интерпретатор Perl, вы уже знаете.
Строка:

помещает в переменную $namefile имя файла count.txt;

открывает файл count.txt для чтения, связывая название файла с дескриптором COUNTFILE;

считывает из файла последнее значение счетчика. Так как в первый раз считывать нечего, то в переменной $count появится значение «0»;

если в конце считанной строки присутствует символ перевода строки (в Perl имеет вид » «) — он будет удален. В нашем случае такого символа нет. Но лучше перестраховаться, чем потом искать непонятные ошибки.

увеличиваем значение счетчика на единицу. Эту операцию можно также записать вот так:

но для наглядности будем использовать предыдущий вариант.

откроем файл count.cgi для записи, уничтожив (символ «>») его содержимое

запишем в файл новое значение счетчика

передаем новое значение счетчика в качестве результата работы скрипта, чтобы сервер включил это значение в состав HTML-страницы — в том месте, где находится строка

конец выполнения программы (без этого можно обойтись, но почему бы не следовать традициям).

Небольшие усовершенствования нашего счетчика
Итак, мы научились считать заходы на нашу страницу. Допустим, мы не хотим, чтобы файл count.txt со значениями счетчика лежал в директории cgi-bin. Давайте создадим на сайте отдельную директорию, назовем ее, например, mystat, куда и скопируем файл count.txt. Не забудьте назначить файлу права доступа 666.
Теперь надо в нашем скрипте указать новый путь к файлу count.txt. Помните строку:
$namefile=»count.txt»;
казалось бы, ненужную? Ведь в принципе имя файла можно было бы указать и непосредственно при его открытии. Зато теперь, когда нам понадобилось изменить путь к файлу, достаточно изменить только эту строку.
Добавим к названию файла полный путь к директории с файлами сервера и название директории, в которой этот файл у нас лежит. Например, если полный путь выглядит так:
/home2/your_domen/public_html/
добавим имя созданной нами директории и получим следующее:
$namefile=»/home2/your_domen/public_html/mystat/count.txt»;
Модернизируем. Что будет, если в браузере зайти на страницу со счетчиком и нажать «обновить»? Правильно — значение счетчика увеличится на единицу. Причем каждая новая загрузка страницы в браузер будет вызывать увеличение значения счетчика. Давайте научим наш счетчик отслеживать заходы подряд с одного IP-адреса и не засчитывать такие заходы. Для этого создадим файл с названием, например, ip.txt и положим его в ту же директорию mystat на сервере. Назначим ему права доступа 666. В этом файле мы будем хранить IP-адрес последнего посетителя, засчитанного счетчиком. Теперь осталось добавить соответствующую проверку в скрипт.
Прежде всего добавим переменную, содержащую путь к файлу:
$nameipfile=»/home2/your_domen/public_html/mystat/ip.txt»;
Теперь нам надо получить собственно IP-адрес посетителя. Содержится он в переменной $ENV<"REMOTE_ADDR">, значение которой передается скрипту браузером посетителя вместе с запросом. Присвоим это значение переменной $ip:
$ip=$ENV<"REMOTE_ADDR">;
Теперь считаем из файла ip.txt значение последнего IP-адреса, сравним его с полученным. Если они совпадают, тогда не засчитаем заход (завершив работу скрипта), если же не совпадают — увеличим значение счетчика и запишем новое значение IP-адреса в файл ip.txt:

Теперь точность показаний счетчика стала немного выше. Но как он поведет себя, если на нашу страницу зайдет одновременно два посетителя? Одновременно два процесса попытаются произвести запись в файл с показаниями счетчика, в результате чего все данные файла могут быть потеряны. Чтобы этого не допустить, необходимо запретить одновременный доступ к файлу нескольких процессов. Сделать это можно с помощью функции flock, которая позволяет заблокировать файл, связанный с дескриптором, от доступа из других скриптов. Немного изменим процесс работы с файлом count.txt:

Теперь поясненим наши действия.
1) Открываем файл для чтения и записи:
open (COUNTFILE, «+

Чего мне не хватает в Perl?


Пишу на языке давно и успешно, отношусь к нему сугубо положительно, но есть конечно моменты, которые, мягко говоря не устраивают.

Итак, претензии к Perl от человека, который его осилил и знает особенности языка не по наслышке:

1) Не хватает собственно скорости. Скорость исполнения кода, т.е. его непосредственной интерпретации — Ахиллесова пята не только Perl, но и Ruby, и Python, и PHP. Но если интерпретаторы PHP и Python становятся быстрее с каждым годом, то интерпретатор Perl застрял в своём развитии — и при этом язык не имеет LLVM-компиляторов, как тот же Crystal, реализующий очень быстрый диалект Ruby. Для Perl есть RPerl, который непонятно как работает и работает ли у кого-то, кроме самого Вина Бразвелла. Ну и да, RPerl — это всё-таки не вполне Perl, по сути это какой-то «perl’оподобный диалект языка Си»

2) Не хватает адекватной проверки входных параметров. Есть куча сторонних модулей для этого: MooseX::Method::Signatures, Params::Validate и ещё тысячи их, но все они добавляют дикий оверхед к и без того не быстрой работе интерпретатора

3) Отсутствует как класс нормальный параллелизм: без пула потоков работать с потоками невозможно (создание потока — крайне медленная операция), с пулом потоков в принципе удобно, но всё одно памяти они жрут как не в себя. На Perl в 100 раз всё лучше с процессами, в том числе есть неплохие модули для работы с shared memory (правда, Redis для того же самого намного удобнее).

4) CPAN конечно замечательный репозиторий пакетов, но выкладывать что-то туда — это лишняя трата времени, да и все эти инструкции по правильному выкладыванию немного бесят: мне что, заняться больше нечем? ИМХО подход того же Crystal’а с его shards’ами намного удобнее.

5) Отсутствие макрогенерации кода. Есть конечно eval, но это, мягко говоря, всё равно что бульдозером шпалы укладывать: неудобно, анахронично, работает в рантайме (что просто ппц на самом деле), чревато ошибками. Учитывая стоимость вызова процедур в Perl5 отсутствие макрогенерации негативно влияет на потенциальную производительность

Относительно удобства ООП претензий не имею — те, у кого они есть, просто пришли из других языков и пытаются применять к совершенно иначе устроенному Perl’у свои «обобщённые» знания.

Скока строк в проектах? Если бы ушел с него, то куда?

1) Скорости мне хватает почти всегда. Были случаи когда переключался на XS-версию модуля или выворачивал наизнанку код тяжелого модуля (писал оператор для постгреса на перле). С тем что развитие интерпретатора застряло согласен.

2) Есть такое. Впрочем даже существующие валидаторы не радуют, долгое время свой вариант развивал. Еще момент с типизацией, в питоне оптимально сделано, в перле часто не хватает строгости.

3) Хватает того что есть, но и задачи простые — обычно хватает пула процессов, внутри которых бегают воркеры.

4) Cpan помойка из мертвых модулей. Часть модулей без тестов и документации, с необоснованно тяжеленными зависимости (в виде Moose, например), русский и китайский в комментариях доставляют. Модули выкладываю, поддерживаю, с этим проблем нет, разве что перед деплоем гоняю тесты в TravisCI, чтобы cpan-testers не напрягать и для быстрого фидбека.

Илон Маск рекомендует:  Что такое код ldap_delete

5) Да, это беда. Тут и комментировать нечего.

6) Мало интроспекции (лукс лайк намбер, пацанчики), строгости типизации, нет средств разработки эквивалентных PyCharm.

7) Нет работы: вакансий, нормальных проектов, достойных зарплат и условий труда. Есть горы говнокода, написанного «пишу на языке давно и успешно».

не знаю чего не хватает в perl, но нужен простой язык типа go со встроенными всевдо тредами но без минусов go. может быть это будущий go

То, что нет работы — во-первых не совсем правда: перловиков уже нанятых очень и очень дохрена. Проблема в том, что они прочно сидят и никуда не уходят. Хотя вот буквально в этом году был на собеседовании в Рамблере — вполне себе контора, где для LiveJournal’а perl+go во все поля.

Но честно говоря новые веб-проекты я бы уже делал на Crystal: от Python’а у меня реально рвотный рефлекс, да и смысл-то менять тёплое на мягкое (интерпретатор и там, и там, так в Python ещё и треды липовые по сути из-за GIL), а вот Ruby мне нравится куда больше, и существование под него быстрого интерпретатора — огромный плюс. Вот только, гм, Crystal тоже что-то стагнирует.

Самый спокойный путь разработчика — это писать на Java и забыть, что существует нечто более другое. Но вот не нравится мне Java, что делать :)

перловиков уже нанятых очень и очень дохрена

Очень мало если сравнивать с питонами/похапе/джавами.

они прочно сидят и никуда не уходят

Есть такое. Но летом, один из крупнейших местных аутсорсеров закрыл долгоиграющий перловый проект. Ребята разбежались кто куда, но только не на перл, решили начать новую жизнь. Я вот тоже собирался на питон уходить, но перешел в перловый проект, не отпускает меня этот ЯП.

Не смог пройти мимо).

Из объективных минусов перл’а:

1. Скорость интерпретатора — проблема большенства скриптовых языков с динамической типизацией. Скорость исполнения будет +- одна и таже: и у Perl 5.26, и y Python3 и у Ruby и даже у Lua (хотя он чутка быстрее из за компактности и минималистичности самого себя), и у PHP.

2. Вытекает из первого пункта — динамическая типизация: «проверяй нахрен сам, интерпретер тебе ничего не обязан».

3. С тредами беда — это да. И воядли когда-то станет луше. Форки пока наше все.

4. Metacpan хорошая соц.сеть для разрабов, cpan — не плохая инфраструктура дистрибьюции модулей. Но, архаичная немного это да. Но про кучу заброшенных/давно не обновляемых модулей дело обстоит так. Популярные модули, те, что у всех на слуху — обновляются регулярно, качество кода и документации — нормальное.

Про Mose и всякие сраные потуги сделать ООП-сахарок — идут лесом, ибо нахрен не нужны. Cтандартные ОПП-средства просты и хороши. По крайней мере мне их хватает полностью.

5. Макросы и динамические языки — ну-ну. Прекращайте мечтать.

6. Про IDE для перла. А оно, как правило, и не надо. Хотя это больше из-за сложностей парсинга перлового кода:). Обычный текстовый редактор, который умеет «perl -c» и perlcritic + perltidy — все, что нужно разработчику. Emacs это умеет отлично. Пользуюсь давно, всем доволен, рекомендую.

7. Про вакансии — да не густо. Но они есть. В основном в крупных города и крупных компаниях, у которых много perl-наследия.

Новый проект на perl’e стоит начинать только когда готов заботиться об инфраструктуре (perl[tidy|critic], pod, всевозможные девопс-штуки, скрипты развертки, сцениарии для docker-контейнеров, и проч.) также маньиокально, как и о коде. Когда скорость выполнениия не критична, когда от твоего кода не зависят напрямую жизни людей :)). В противном случае код очень быстро превратиться в трудно поддерживаемое дерьмо. Так что небольшой микросервис — можно.

Развесистую, сложную систему — Perl не советую (расно как и люьой другой скриптовый язычок). Лучше построить ифнраструктуру с использованием ЯП со строгой типизацией (это позволит сэкономить лишние пулевые отверстия на ногах): Java/Scala/Kotlin (что там еще живет в JVM?), GO, Расты, Плюсы.

Это всё относится к Perl 5, но ведь Perl 6 уже есть.

Хотя мне Tcl норм. И там вроде этих недостатков нет.

Perl6 — мало того, что вообще другой язык, куда более похожий на TypeScript, чем на Perl, так он ещё и медленнее Perl5, а его пакетная база на фоне CPAN выглядит примерно как муравей на фоне слона. Ну т.е. что-то есть, но масштабы просто несопоставимые.

А ведь когда-то перл был самым быстрым из мейнстримных интерпретаторов, всего лишь в полтора раза медленнее С, до него даже джаваскрипт с трудом достреливал на одинаковых задачах. Что случилось с ним?

CPAN конечно замечательный репозиторий пакетов, но выкладывать что-то туда — это лишняя трата времени, да и все эти инструкции по правильному выкладыванию немного бесят

Зато другим людям пользоваться не страшно, так как есть какие-то базовые стандарты качества. Ну и см. darkpan

Отсутствие макрогенерации кода. Есть конечно eval

Еще фильтры есть

работает в рантайме (что просто ппц на самом деле)

в перле любой компайл-тайм работает в рантайме, все зависит от точки наблюдения

1. Для своих задач нормально. Это не си, но и писать сильно легче. Опыт показывает, что проще чем с другими скриптовыми языками. Perl легко и быстро позволяет писать и поддерживать код(да-да, сейчас прибегут толпы кричащих о нечитабельности, сразу предлагаю пройти им мимо, так они во-первых, не поддерживали в своей жизни ни одного проекта больше хелловорда, во-вторых не видели ни строчки кода на перле, кроме известного однострочника, выглядящего одинаково на всех ЯП).

В холиварах под пиво с товарищами я числодробилку с перебиранием кучи данных из файлов сделал быстрее, чем они на руби, питоне и яве. Как ни странно, по циферкам в тот раз победил нас всех пхп-программер в абсолютных числах(итоговое выполнение скрипта), но сделал он это за счёт алгоритма расчёта. Мой был тупее, файлы я перемалывал быстрее. Да, не показатель. Как и любое сравнение языков, имхо.

2. Не совсем понял проблемы. Прототипы меня вполне устраивают, когда это нужно. Сторонние модули не использовал.

3. Форки. Есть разной степени удобства модули для управления ими, хотя в простых ситуациях и самому написать можно за полчаса. Но, да. С тредами всё плохо. Правда, где в простых интерпретируемых языках с этим хорошо?

4. Ничего тут не скажу. Меня устраивает. Если нет, складываю в ./lib/, допиливаю и подключаю через FindBin. Патчи почти не отсылаю, потому как или работает, или проект заброшен, а я сам сейчас не готов взяться за поддержку. Возможно, потом что-то и возьму.

5. А где оно хорошо? В перле можно это заменить хешами и ссылками на функции в большинстве случаев. В крайнем случае nostrict refs подключить(хотя это я не люблю делать).

Встроенного ООП более чем хватает.

В коментах про IDE сказали. Я использую vim с парочкой плагинов и уже упомянутые perl. Хватает с головой.

Про вакансии. Меня из провинции позвали на сеньёра по перлу(правда особо важны были навыки администрирования linux/unix/bsd помимо программирования). Сам не искал в том момент работу.

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

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

Интерпретатор Perl5 обрастал функционалом как снежный ком: функционал довольно пустой, но вес снежного кома увеличивал, и весьма серьёзно. Самое плохое — это даже не сам вес, а то, что рефакторинг кода этого интерпретатора даже сами отцы-основатели Perl’а делать ни в коем случае не станут, потому что здесь именно тот самый случай, когда либо бросить всё и переписать с чистого листа, либо оставить как есть. Вот по сути Perl5 пришёл к последнему варианту: громоздкий и неповоротливый интерпретатор стагнирует, а разработчкики по сути умывают руки, призывая писать XS, если уж очень надо быстрее. Изредка кто-то лезет глубоко в потроха — и тогда на свет появляются шедевры вроде «вычислений, которые ускорились на 25%». Но в целом это всё из разряда припарок. При современных объёмах требовательность интерпретатора к памяти и не очень быстрая его работа (при действительно фантастическом функционале, с чем никто не спорит) всё это приводит к чудесам вроде «кластерной» системы мониторинга PandoraFMS: она написана на Perl с активным использованием ithreads’ов — и официальное ограничение количества узлов на одну ноду там что-то 2500 штук, больше никак.

3) Отсутствует как класс нормальный параллелизм: без пула потоков работать с потоками невозможно (создание потока — крайне медленная операция)

А Coro? С use threads не рекомендуют работать даже сами разработчики

4) CPAN конечно замечательный репозиторий пакетов, но выкладывать что-то туда — это лишняя трата времени, да и все эти инструкции по правильному выкладыванию немного бесят

Очень удобно создавать и выкладывать модули с помощью Minilla

там всего несколько комманд и готово =)

У perl5, кстати, есть надежда на лучшее в виде cperl: он действительно ощутимо быстрее дефолта, и сами идеи в него здравые заложены. Но вот CBOR::XS с ним что-то не заводится.

1) Зависит от задачи. Мне её и в С++ иногда не хватает. Для «нормального» веба или админства — вполне нормально.

2) Я так понимаю, речь о некоторых констрейнтах, чтобы они работали на уровне интерпретатора. Да, было бы полезно, но, в целом, не смертельно и без них. Попытка внести типизацию существующими средствами добавляет оверхед, бесспорно. Ошибки, связанные с несоответсвием типов, по статистике, не превышают 2% от числа возможных ошибок. Статистика команды разработчиков амазона. Вобщем, польза есть, но в безусловный профит она не превращается.

3) Тредов нет, есть процессы и кооперативные треды через коро. Было бы, конечно, лучше, если б они были, но выкручиваемся же как-то.

4) Выложить что-то на цпан нет проблемы вообще. Один раз написать мейкфайл, прописать версии, сделать дист и зааплоадить. Впоследстивии просто менять номера версий в мейкфайле и модуле и аплоадить. Всех дел меньше 1 минуты.

5) Да, макрогенерация была бы очень кстати. Ей, правда, в любом случае пришлось бы работать в рантайме. Пока что приходится обходиться фильтрами сорцов, когда что-то подобное необходимо и без него никак.

6) Интроспекции вполне хватает, надо сказать. Есть масса инструментов чтобы узнать что на стеке, что в переменной, что сколько места занимает и пр.

7) IDE для перла (из бесплатных) я знаю две: Eclipse+EPIC и IntelliJ IDEA (комьюнити эдишен) + Camelcade. Остальное больше просто «редакторы с подсветкой синтаксиса».

8) С вакансиями не просто, да. С одной стороны очень трудно найти хорошего перл-разработчика, с другой, очень трудно найти работу, где нужны перл-разработчики. Тут есть явная проблема коммуникации.

9) Если внимательно смотреть за перл-дельта и делать самостоятельные бенчмарки, то надо сказать, развитие в перл5 ещё не прекратилось. Глобальных прыжков нет, но локальные вполне чувствуются. На 5.27 (текущий дев) есть прямо заметное ускорение. Я написал свой бенчмарк https://gist.github.com/jef-sure/adcc2fbe9f498477d18d545eb8ffab7f — на основе быстродействия DBIC для разных версий перла я смотрю на комплексное изменение быстродействия различных подсистем перла разных версий.

Никакого ускорения от cperl я не заметил. Вообще. Вот потребление памяти не смотрел, но быстродействие у cperl в моём DBIC тесте просто никак не выглядело лучше, чем у обычного перла, кроме того, что более свежие перлы были быстрее.

рефакторинг кода этого интерпретатора даже сами отцы-основатели Perl’а делать ни в коем случае не станут,


Дело не в том, что все потерялись в кодовой базе и никто в ней ничего уже не понимает. Это не так, кто-то запустил этот миф удачно.

громоздкий и неповоротливый интерпретатор стагнирует

Незадолго то релиза очередной версии, как правило, на каких-либо YAPC проходят доклады какие новые возможности ждать в новой версии. Бывает интересно.

на Perl с активным использованием ithreads’ов

ОМГ, это никогда не было стабильным, а в 5.20 было объявлено deprecated, насколько я помню. Тут вопрос к разработчикам/архитекторам, как они умудрились так вляпаться.

Ошибки, связанные с несоответсвием типов, по статистике, не превышают 2% от числа возможных ошибок.

Я знаю об этом, и меня тоже удивляет, почему вся индустрия разработки так помешана на проверке типов, словно всё остальное работает просто идеально (особенно usability приложений, если они не дай Б-г должны как-либо общаться с пользователем).

Вопрос сугубо о том, что на вход приложения извне намеренно или чисто случайно могут прийти совсем не те данные, которые оно, приложение, может и должно обрабатывать. Условно: в рамках API в поле JSON’а вам прислали «Войну и мир» вместо булевой переменной. А вы пока осознали, что something went wrong — уже даже успели эту переменную пару раз скопировать, использовать как «флажок». Или вам прислали температуру по Цельсию даже ниже -273 градусов, и вы её честно попытались установить.

Проблема Perl’а в том, что все декларативные проверки для очистки taints-переменных (переменных, приезжающих извне и по умолчанию содержащих неведомый f*ng shit, пока не доказано обратное) — даются очень дорого. Хотелось бы для таких вещей хотя бы частично реализацию в коде самого интерпретатора или сторонних XS-модулей.

При этом заметьте, что если собственно забыть о taints’е, а все о нём и забывают как раз, то нет адекватных средств проверить на входе в функцию — а надо ли вообще чекать параметры или нет. А это приводит уже к полному кошмару, когда вызывается цепочка функций, в каждой из которых переменную так или иначе на что-нибудь тестируют. Или к ещё худшему кошмару, когда не тестируют нигде, и оно работает ровно до первой бажной системы на другой стороне обмена или до первого скриптикидиса (они нынче чаще не живые люди, кстати, а вполне себе AI).

Параноидальные проверки — приводят к тормозам, отсутствие проверок — приводит к непредсказуемым последствиям, когда ломается логика приложения, особенно неявная логика, построенная на оптимистичных предположениях о сущности переменных.

Perl5 предлагает слабую альтернативу в виде очистки переменных (можно хотя бы один раз их проверять, а не бесконечное количество раз). Но кто вообще об этом помнит и кто этим пользуется?

Да, макрогенерация была бы очень кстати. Ей, правда, в любом случае пришлось бы работать в рантайме.

Безусловно. Просто интерпретатор генерировал бы код для себя на основе макроопределений, а потом запускал сгенерированное.

В ruby тоже GIL. И для python есть pypy.

Но это надуманная проблема. Сетевой код в моде асинхронный код, да и есть удобные способы использовать процессы. Писать многопоточные числодробилки на истерпретируемом языке как-то странно. Модулям на си/cython на gil не проблема.

Так что это просто вкусовщина.

динамическая типизация: «проверяй нахрен сам

Есть аннотации типов, ide и всякие mypy могут проверять за тебя, если их укажешь.

А оно, как правило, и не надо
Интроспекции вполне хватает,

Какие числодробилки? Просто акцептить клиента на сокете и обслуживать его в отдельном потоке — это числа дробить?

Есть аннотации типов, ide и всякие mypy могут проверять за тебя, если их укажешь.

Ещё раз повторюсь: проблема с головотяпством разработчиков — это организационная проблема, которую пытаются решать техническими методами в силу того, что никаких иных не знают. А вот проблема работы с внешними данными — это действительно вполне себе проблема. Особенно на фоне всяких чудес типа docker, которые позволяют сколь угодно долго работать свеженькому приложению в давно протухшем с точки зрения безопасности окружении. Не проверил данные, засунул из в ssl-сокет — а там, внезапно, оказалось, что именно при таком payload’е в пару гигабайт переполняется буфер или некрасиво течёт память. Пустячок — а неприятно, однако.

Всё это на perl’е в большинстве случаев «решается» тысячей проверок одного и того же прогоном через регулярные выражения. Ну и как оно после этого должно работать?

В такой ситуации задача завязана на IO и GIL не проблема. Но делать по треду на клиента? Асинхронный код лучше, благо есть асинхронные же дрова для бд и даже orm. Эффективней и можно больше клиентов обслуживать. Например

Треды это про вычисления и пляски с локами.

У ruby есть Crystal. Больше мне ничего о Ruby знать не хочется, хотя мне и нравится этот язык (и даже книжку «Путь Ruby» читаю с удовольствием, тем паче, что там много весьма универсальных вещей объясняется).

Python — есть люди, несовместимые с ним. Я, например. Т.е. есть у него PyPy или нет — глубоко плевать, сам язык омерзителен, и связываться с ним после perl’а — вообще не в радость.

В частности про такие «вычисления» как замена обхода полностью большой структуры данных на дробление структуры на N частей и обход каждой части в отдельном потоке. Для этого не нужны никакие локи, накладные расходы абсолютно минимальны (лишние переключения контекста), но. это только если не копировать целиком весь perl в каждый поток.

А вообще идея, реализованная в инфраструктуре MCE (http://search.cpan.org/

marioroy/MCE-1.832/lib/MCE.pod) мне очень нравится, вот только по-хорошему это не должно на процессах-то работать!

Ну и да, MCE с AnyEvent’ом совсем не дружит, убеждался в этом неоднократно.

Немного офтопик, но есть у меня вопрос по IO-асинхронщине, который я пока не видел, чтобы кто-то задавал хотя по мне он прямо на поверхности лежит: а ничего, что данные, запрошенные у того или иного устройства, будут считаны приложением далеко не сразу, а тогда, когда дойдёт очередь до соотв. обработчика? Ну т.е., положим, в не вполне корректно написанном приложении один поток/обработчик взял данные с диска и начал этак неспеша их перемалывать, а тем временем где-то уже давным давно пришли данные от сетевого устройства, но обработать их некому. Не приводит ли это к тому, что на задержки самих IO-устройств как-то неожиданно накладываются задержки, связанные с выстраиванием в цепочку async-обработчиков? И если раньше мы видели в общем-то реальную IO-задержку, то сейчас это может быть запросто вообще всё, что угодно.

Я понимаю, что и в случае параллельной обработки тоже данные читаются тоже в порядке приоритета, но там хотя бы сама ОС передаёт процессу управление тогда, когда его можно разблокировать по вводу-выводу — и это в рамках вытесняющей многозадачности (ОС никого не ждёт, просто переключает при следующем «тике» прерывания таймера).

А вот тормозящий всех IO-поток в рамках конкурентной модели — никто не «пнёт».

Ну в питоне есть такое из коробки. Например:

Создаст пул из 5-и процессов, в которых выполнит вычисления и соберет результаты в список. Для общения между такими процессами есть высокоуровневые механизмы типа очередей и пайпов и просто расшаренные объекты. Типа

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

Условно: в рамках API в поле JSON’а вам прислали «Войну и мир» вместо булевой переменной.

У нас так: все, что пришло извне, не имеет типа в терминах принимающего приложения.Те, кто думает иначе, идут искать работу в другое место.

Можно как-то пояснить эту безусловно умную мысль? Например, как и куда вы бы засунули эту нетиповую переменную в случае компилируемого языка? Так бы и таскали в строке?

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

обрастал функционалом как снежный ком

Имхо, идея доращивания его до языка общего назначения и привела к губящему теперь ожирению. Останься он в нише обработки текста и, возможно, некоторой вебни — не удалось бы так разжиреть. Но блин когда пишешь на перле, всё хочется писать на перле, ибо получается прям простыми английскими словами говоришь, что делать — и делается. Отсюда и снежный ком: вот это надо, а за ним вот это подтянулось. И да, рефакторить там уже, видимо, сложнее чем новый язык, а новый опять получается перлшесть, красивая неповоротливая гусеничка.
Оффтоп: DRV, как тебе удаётся создавать темы про перл без единого удалённого, без тыщи кричателей «однострочнеграйтонлиололо»? Делись рецептом или выложи на CPAN)))

как и куда вы бы засунули эту нетиповую переменную

В буфер. И только после разбора буфера это становится переменной, имеющей смысл в приложении. Это первое, что делается с вводом — его преобразование в логику приложения. То есть, если вам присылают целое число, и в приложении оно становится целым числом, то это все равно разные типы.

Спасибо, Капитан, да Вы меня прямо спасли в трудной ситуации!

Вот к чему было это всё? И что вы делаете в треде про Perl.

Сейчас большинство людей, знающих perl — не пишут на нём. Но это люди, которым нравится perl, и они просто были вынуждены уйти на всякие питоны и прочее go.

Это намного лучше ситуации 2007-2009-го годов, когда из perl’овиков уходили люди, озлобленные на язык за то, что он «слишком язык»: т.е. как только нужно было отойти от простых руководств «как наваять cgi-скриптец» — оказывалось, что perl — это целая идеология с довольно сильным уклоном в компьютерную филологию. Тогда perl был языком для быстрых скриптеров, сейчас это язык для тех, кто просто любит perl, любит выразительные языки и любит свободу творчества и самовыражения.

Илон Маск рекомендует:  Подсветка синтаксиса

Поэтому не так просто найти чудаков которые свалили с перла на питон, поскольку питон выглядит и читается проще.

Основные претензии — уже у профессионалов и к отсутствию поддержки современных модных парадигм разработки. Но это в общем-то и самим perl-разработчикам мешает, так что спорить тут по сути просто не о чем.

Вот к чему было это всё? И что вы делаете в треде про Perl.

А к чему в треде про перл вы задаете вопросы про хранение байтов в компилируемых языках? Или какой ответ вы хотели услышать на свой заковыристый вопрос?

У вас вторым пуктом про разбор параметров. А дальше:

Условно: в рамках API в поле JSON’а вам прислали «Войну и мир» вместо булевой переменной. А вы пока осознали, что something went wrong — уже даже успели эту переменную пару раз скопировать, использовать как «флажок»

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

Надеюсь, вы хотя бы сами понимаете, что пишете.

Типы приложения через XS — это особенно сильно. Какие там типы у приложения на Perl?

И вообще не попробуете ли изъясняться чуть конкретнее дельфийского оракула?

Пришли вам данные в JSON-формате, вы их распарсили тем же JSON::XS и положили в переменную $x. Что дальше? :)

Или предлагаете парсер JSON’а писать заодно, свой на XS? Чтоб секурно было?

Я бы просто ограничил размер посылки, исходя из суммы максимально разрешённых размеров полей. Потом распарсил бы и проверил значения в полях на соответствие неким правилам — и вот на этом чудесном этапе как раз получил бы некую проблему: нужно либо самому писать все возможные варианты проверок и вводить сбоку «типы данных», либо пользоваться готовыми вариантами от сторонниъх разработчиков типа Params::Validate

Заметьте, в предыдущем параграфе я не пытался напустить тумана и призраков. Почему бы и вам не отвечать как-нибудь менее по-снобски что ли? Мы вроде не в Пиквикский клуб здесь играем.

Условно: в рамках API в поле JSON’а вам прислали «Войну и мир» вместо булевой переменной.

Вас пугает такая ситуация? Вы боитесь неизвестности и поэтому вам всегда приходят корректные данные? Не понимаю, что странного в том, что в JSON, который не подчиняется чудесным схемам, как это было в не к ночи будь помянутом XML (кстати, а положа руку на сердце — многие ли в действительности пользовались проверкой на соответствие схемам?) — так вот, в этом самом чудесном JSON на месте ожидаемой вами булевой переменной вам запросто может приехать «Война и мир»?

Что конкретно вас так сильно смущает?

Мне кажется, вам всё-таки было бы полезно взять у ребёнка учебник «Родная речь» и попробовать выполнить пару упражнений из него — глядись, научились бы связно и развёрнуто излагать свои мысли.

Русский Перл

Что пишут о Перле на русском языке

Суббота, 26 октября

Хабрахабр: Метки / perl: Собираем Perl прямиком из 1987 года

Прочитав новость «Код интерпретатора Perl официально перенесён на GitHub» на ресурсе LINUX.ORG.RU я решил взглянуть на репозиторий Perl 5, который теперь уже находится на GitHub’е.

Удивительно, как трепетно и качественно его перенесли, сохранив не только абсолютно всю 32-летнюю историю проекта, но и багрепорты (попали в Issues), патчи (попали в PRs), релизы и ветки. Надпись «32 years ago» рядом с файлами вызывает невольную улыбку.

Что ещё делать в этот унылейший пятничный вечер, когда на улице неприятно моросит дождь со снегом, а все уличные дорожки погрязли в осенней слякоти? Правильно, красноглазить! Так что я ради эксперимента и интереса решил взять и собрать древний Perl на современной x86_64-машинке с последней версией GCC 9.2.0 в качестве компилятора. Сможет ли такой старый код пройти проверку временем?


Демонстрация работы twm, одного из первых оконных менеджеров для X Window System, на современном дистрибутиве Arch Linux.

Чтобы было совсем уж аутентичненько и некромантненько, я развернул виртуальную машину с голыми иксами и оконным менеджером twm, который тоже родом из 1987 года. Кто знает, может быть Larry Wall писал свой Perl используя именно twm, так сказать bleeding edge technology того времени. Используемый дистрибутив — Arch Linux. Просто потому что в его репозитории есть некоторые полезные вещи, которые впоследствии мне пригодились. Итак, поехали!
Читать дальше →

Написал EXL в 20:23

Вторник, 15 октября

Мини-портал Perl на Opennet: Язык Perl 6 переименован в Raku

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

Хабрахабр: Метки / perl: Розеттский код: измеряем длину кода в огромном количестве языков программирования, изучаем близость языков между собой

Скачать файл с кодом и данные можно в оригинале поста в моем блоге

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

Этот ресурс предоставляет уникальную возможность сравнить коды программ на разных языках, этим мы и займемся в этой статье. Она является полной переработкой и доработкой статьи Джона Маклуна «Code Length Measured in 14 Languages».
Читать дальше →

Написал OsipovRoman в 16:07

Суббота, 12 октября

Мини-портал Perl на Opennet: Ларри Уолл одобрил переименование Perl 6 в Raku

Ларри Уолл, создатель языка Perl и «великодушный пожизненный диктатор» проекта, одобрил заявку на переименование Perl 6 в Raku, поставив точку в спорах о переименовании. Имя Raku выбрано как производное от Rakudo, названия компилятора Perl 6. Оно уже привычно разработчикам и не пересекается с другими проектами в поисковых системах.

Воскресенье, 6 октября

Мини-портал Perl на Opennet: Выпуск mod_perl 2.0.11

Спустя три года с момента прошлого обновления представлен новый выпуск Apache-модуля mod_perl 2.0.11. Mod_perl позволяет интегрировать интерпретатор Perl в http-сервер Apache и увеличить скорость выполнения динамического контента на Perl за счёт кэширования его байткода, а также обеспечить низкоуровневый доступ perl-скриптов ко внутренностям Apache, в том числе даёт возможность создавать модули на языке Perl, управлять конфигурацией, обрабатывать все стадии прохождения запроса.

Четверг, 19 сентября

grey_olli: stdin2news

Выложил в github в public проект stdin2news . Для unix way ftn с фидогейтом, ньюзсервером и прочими печеньками. :) в гугле: «grey-olli stdin2news github» , прямой линк: https://github.com/grey-olli/stdin2news

Среда, 11 сентября

Хабрахабр: Метки / perl: Нетипичный «ls» или как развлекаются линуксоиды

Однажды в телеграм чат питерского сообщества линуксоидов SPbLUG я кинул забавную задачку:

Выведите список файлов в домашней директории максимально возможным количеством способов, без использования ls или его алиасов(1 способ — 1 балл)

Написал Oxyd в 08:34

Суббота, 31 августа

Хабрахабр: Метки / perl: [Из песочницы] Стать Цукербергом или детство программиста

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

Написал Deasoft_news в 23:01

Пятница, 30 августа

Мини-портал Perl на Opennet: Разработчики Perl рассматривают возможность смены имени для языка Perl 6

Разработчики языка Perl обсуждают возможность развития языка Perl 6 под другим именем. Изначально Perl 6 предлагалось переименовать в «Camelia», но затем внимание сместилось на предложенное Ларри Уоллом имя «Raku», которое короче, ассоциируется с существующим perl6-компилятором «Rakudo» и не пересекается с другими проектами в поисковых системах. Имя Camelia предложено, так как это существующие название талисмана и логотипа Perl 6, торговая марка на который принадлежит Ларри Уоллу.

Четверг, 20 июня

Меркантильный гуру: Deprecation of my() in a false conditional

Открытие дня, цитирую:

To people wondering why this syntax persisted so long: the bug produced by this syntax was actually the only way to have state variables, before the keyword state was introduced. This is why the bug was not fixed. Some people actually used it as a short syntax to implement a state variable:

А мне то казалось, что так просто код выглядит читабельнее в ряде случаев.

Пятница, 31 мая

Laziness, Impatience and Hubris: HTML::Parser vs HTML::TreeBuilder vs HTML::Gumbo

Benchmark для http://perl.org/ страницы.
Извлекаем текс и ссылки.

Обнако обнаружил, что HTML::Gumbo with tree output format на некоторых HTML страничах течет.
https://rt.cpan.org/Public/Bug/Display.html? >
HTML::Gumbo строит DOM при помощи HTML::Elements со стороны XSUB.

Поэтому решил попробовал строить DOM при помощи HTML::Elements с стороны pure perl, а не XSUB.
Это вариант обозначен как «Gumbo pure» в таблице результата Benchmark.

Написал Unknown в 12:38

Четверг, 23 мая

Мини-портал Perl на Opennet: Релиз языка программирования Perl 5.30.0

После 11 месяцев разработки состоялся релиз новой стабильной ветки языка программирования Perl — 5.30. При подготовке нового выпуска было изменено около 620 тыс. строк кода, изменения затронули 1300 файлов, в разработке приняли участие 58 разработчиков.

Воскресенье, 5 мая

Сообщество ru_perl в LiveJournal: serverless (cloud functions) для perl

есть ли какие нибуть облачные провайдеры поддерживающие cloud function на perl ?

(запуск perl через nodejs не предлагать)

Написал zupernintendo в 10:51

Сообщество ru_perl в LiveJournal: perlito компилятор perl5 в java

fglock/Perlito

нашел тут «готовый» компилятор — вдруг сгодится чтоб не писать компилятор с php

— оно вообще рабочее? (судя по датам релизов около 9 лет уже пилят)

— насколько адекватный код получается — опять эмуляция perl рантайма или нормальный перевод на java типы и классы?

Написал zupernintendo в 10:37

Пятница, 5 апреля

Хабрахабр: Метки / perl: [Перевод] Хитрый Perl-квайн

Прим. пер.: Встретил сегодня в твиттере очень забавный, на первый взгляд, тред. А потом пригляделся и понял, что он не только забавный, но и занятный. А раз уж так сложилось, что сегодня пятница, то решил, что стоит поделиться обнаруженным и с товарищами:)

Сохраните следующую программу в /tmp/quine.pl

Запустите её командой

и она выведет свой собственный код.

«Квайны-обманки» довольно просто сочинять на многих языках программирования, где ошибка синтаксиса в исходнике провоцирует парсер на вывод ошибки, которая бы совпадала с исходным текстом программы. Я опубликовал несколько подобных «обманок» у себя в Twitter, включая следующую:

Но перловый квайн в начале этой заметки — это обманка совершенно другого рода — программа разбирается корректно. Читать дальше →

Написал 4umak в 20:05

Вторник, 2 апреля

Сообщество ru_perl в LiveJournal: какие есть средства для парсинга кода в perl?

надо распарсить код типизированного класса на PHP 7 и сконвертировать в java (или в идеале в С++)

тоесть на уровне ограниченного ООП синтаксиса (без учета существования классов и методов библиотек)

на входе синтаксически корректный файл с классом на PHP на выходе синтаксически корректный файл с классом на java

Написал zupernintendo в 09:21

Понедельник, 1 апреля

Мини-портал Perl на Opennet: Выпуск Rakudo Star 2020.03, дистрибутива Perl 6

Доступен релиз пакета Rakudo Star 2020.03, включающего компилятор Rakudo, виртуальную машину MoarVM, документацию, модули и инструменты, необходимые для разработки на языке Perl 6. Компилятор соответствует спецификации Perl v6.d, за исключением поддержки расширенных макросов, неблокирующего ввода/вывода и ряда мелких особенностей, которые планируется довести до рабочего состояния в будущих выпусках. В качестве виртуальной машины для исполнения байткода предлагается MoarVM, которая проходит все тесты (альтернативный бэкенд на базе JVM пока не обладает всей необходимой функциональностью).


Вторник, 5 марта

Хабрахабр: Метки / perl: Mattermost. Интеграция с внешними сервисами (часть 2)

Продолжим разбираться с mattermost в части интеграции с внешними сервисами.

Часть вторая. Интеграция с Zabbix

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

Написал svk28 в 09:44

Пятница, 1 февраля

XPoint.ru | Программирование::Perl::Разное: Вопрос специалистам PERL

Для примера три строки из кода.
Вопрос на 1000 руб. первому, кто даст ответ, который решит проблему со скоростью.
Итак, есть у Яндекс и Гугл сервисы, которые проверяют скорость загрузки скрипта, но не в этом суть.

Почему, когда я обрамляю $skl в ссылку, страница на 2сек дольше грузится после вывода print
А когда ссылки нет в $skl, то все отлично, без задержкек прогружается на 2 сек. быстрее.

Вопрос понятен? или требует дополнительных пояснений?

Написал Вячеслав Крюков в 00:11

Вторник, 15 января

Shoor/нал: Тестирование в моджо — только через прув

Из перлового веб-фреймворка Mojolicious начиная с вышедшей ровно четыре месяца назад версии 8.0 убрана команда test

Теперь вместо этой команды надо использовать prove.

Четверг, 3 января

Хабрахабр: Метки / perl: Катаемся на Xiaomi Vacuum Cleaner

Вот и пришли новогодние праздники, а с ними и куча свободного времени, да еще и умный пылесос угодил ко мне в руки. Как только я увидел в приложении MiHome ручное управление, я сразу понял, что хочу сделать: будем управлять пылесосом с помощью геймпада Dualshock v4!
Читать дальше →

Написал saveliy_zhuravlev в 20:25

Вторник, 25 декабря

XPoint.ru | Программирование::Perl::Разное: Sleep + $| == HTML-страница не подгружается постепенно

всё стояло на сервере лет 10 назад. всё замечательно работало.
это чат, страница которого должна подгружаться по мере записи строк в её файл.
сейчас поставил всё на другой сервер -> страница не грузится по мере. а остаётся пустой, пока либо время не выйдут, либо что то ещё. а потом всё является одним скопом.

сначала думал на «sleep» -> поставил use Time::HiRes;
вроде стало как то легче. но может это так кажется.

что делать? куда копать?
гуглил, что есть что то для отключения буфера — но не совсем понятно, как это прописать.

open(BODY,»$body») or print «ошибка 25684557»;
seek(BODY, -2000, 2) or print «ошибка 27345757»;
$num=0;
$refresh = 1;
$speed = 1;

Написал nestandart в 22:39

Понедельник, 3 декабря

Мини-портал Perl на Opennet: Уязвимости в интерпретаторе Perl, связанные с обработкой переменных окружения и regexp

Сформирован корректирующий выпуск интерпретатора языка программирования Perl 5.28.1, в котором устранена опасная.

Вторник, 27 ноября

Shoor/нал: Правильный тип для офисных файлов

Перловый микрофреймворк Mojolicious::Lite умеет сам выдавать существующие файлы, но при этом не все из них получают верный тип содержимого Content-type : некоторые файлы прикидываются обычными текстовыми ( text/plain ), другие же вообще не имеют никакого типа — браузер такие файлы может воспринимать как угодно. В состав фреймворка входит модуль Mojolicious::Types, в котором определены MIME-типы для наиболее популярных (most common) расширений файлов:

странно, но среди них нет ни одного, относящегося к офисным пакетам. На сайте Microsoft | Developer можно найти список типов — Office 2007 File Format MIME Types for HTTP Content Streaming. Чтобы не задумываться, какие же из этих типов брать, можно сохранить все — если есть какой-нибудь конфигурационный файл, он вполне подойдёт для хранения такого списка. В моём случае конфигурационные файлы обычно в формате YAML — это удобно.

Где-нибудь перед запуском приложения надо добавить типы (допустим, конфигурация приложения доступна через $config )

Правда, при выдаче файла тип его содержимого придётся всё-таки указать явно, иначе Mojolicious вернёт тип только для знакомых файлов, а для офисных будет undef

Теперь и офисные файлы возвращаются нормально.

Понедельник, 26 ноября

Хабрахабр: Метки / perl: Эльфы в памяти. Выполнение ELF в оперативной памяти Linux

Бесфайловое распространение вредоносного ПО набирает популярность. Что не удивительно, ведь работа таких программ практически не оставляет следов. В этой статье мы не будем касаться техник выполнения программ в памяти Windows. Сконцентрируемся на GNU/Linux. Linux по праву доминирует в серверном сегменте, обитает на миллионах встраиваемых устройств и обеспечивает работу подавляющего большинства веб-ресурсов. Далее мы сделаем небольшой обзор возможностей исполнения программ в памяти и продемонстрируем что это возможно даже в затруднительных условиях.

Написал cyberpunkyc в 16:10

Вторник, 13 ноября

Shoor/нал: Надо ругаться в боевом режиме

В состав перлового микрофреймворка Mojolicious::Lite входит класс Mojo::Log, который не просто пишет сообщения в лог, а ещё и учитывает важность сообщений — в отладочном режиме пишет много, а боевом — мало. Обнаружилось, что сообщения об ошибках имеют тот же класс debug , что и остальные сообщения

из-за чего при запуске в продакшне под реальной нагрузкой в лог не попадает почти ничего — например, там нет сообщения об ошибках 404 Not Found.

Возможно, где-нибудь во внутренностях Mojo можно исправить такую ситуацию, но мы пойдём другим путём — применим хук after_dispatch:

Результат — в логе появились сообщения об ошибках:

Мини-портал Perl на Opennet: Выпуск Rakudo Star 2020.10, дистрибутива Perl 6

Подготовлен релиз пакета Rakudo Star 2020.10, включающего компилятор Rakudo, виртуальную машину MoarVM, документацию, модули и инструменты, необходимые для разработки на языке Perl 6. Компилятор соответствует спецификации Perl v6.c, за исключением поддержки расширенных макросов, неблокирующего ввода/вывода и ряда мелких особенностей, которые планируется довести до рабочего состояния в будущих выпусках. В качестве виртуальной машины для исполнения байткода предлагается MoarVM, которая проходит все тесты (альтернативный бэкенд на базе JVM пока не обладает всей необходимой функциональностью).

Среда, 7 ноября

Хабрахабр: Метки / perl: Курс «Введение в Perl» от Mail.Ru Group

В ноябре на платформе Степик стартует курс «Введение в Perl» от разработчиков Mail.Ru Group, где слушатели будут иметь возможность изучить основы программирования на языке Perl и обозначить направления для дальнейшего развития.

В процессе обучения будут рассматриваться синтаксис языка, работа с модулями, ООП, регулярные выражения, однострочники, взаимодействие языка с операционной системой, основы ввода-вывода и параллелизм. Основной акцент сделан на базовых знаниях языка и системном программировании. Программа рассчитана на новичков: для освоения курса достаточно иметь представление об алгоритмах и знать базовые понятия (переменная, условный оператор и т.д.).
Читать дальше →

Написал tanna в 16:36

Вторник, 6 ноября

Shoor/нал: Вместо себя

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

Итак, нам нужен программист. Живьём на полный рабочий день (понедельник—пятница с 8:30 до 17). Требования и пожелания:

  • Высшее образование, желательно профильное (ЭВМ, прикладная математика, информатика, какие-нибудь информационные системы в чём-нибудь); практика показывает, что у нас можно работать, даже имея квалификацию «филолог» или «учёный-агроном», но оформление такого сотрудника — тот ещё квест, так что лучше, чтоб образование было соответствующим.
  • Знакомство с веб-технологиями: начиная с HTML, CSS (желательно с препроцессорами LESS и SASS) и до установки/настройки/обслуживания/допиливания CMS (желательно иметь опыт хотя бы с одной из тройки лидеров: WordPress, Joomla, Drupal).
  • Навыки веб-программирования — хорошее владение хотя бы одним из языков, применяемых на стороне сервера (бэкенд) — в первую очередь PHP и Perl. Ruby, Python — тоже неплохо, это лучше, чем ничего. Знание JavaScript (фронтенд). Адекватное применение фреймворков и библиотек. Способность соблюдать рекомендации по стилю кодирования (см. например, перловые perlstyle и Perl Best Practice, пхпшные PSR), а также писать документацию к своему коду.
  • Опыт работы в юниксоподобных ОС — хотя бы на минимальном уровне: взять терминал, прицепиться к серверу и ничего там не сломать. Если есть опыт конфигурирования Apache, nginx — будет плюсом. Способность не пугаться многомегабайтных логов, а спокойно извлекать из них нужную информацию штатными системными утилитами — тоже пригодится.
  • Опыт в программировании общего назначения, не обязательно связанного с вебом. Знание bash и хотя бы одного из популярных скриптовых языков (Perl, Python). Желание автоматизировать то, что не надо делать вручную.
  • Способность разобраться в чужом коде. Конечно, современный код у нас нормальный, но кое-где может встетиться суровое legacy.
  • Использование систем контроля версий (subversion, git) и багтрекеров (например, Redmine). Если есть код, опубликованный на github/bitbucket или ответы на stackoverflow — хорошо.
  • Способность грамотно излагать мысли в письменном виде по-русски и понимать написанное другими. То же самое, хотя бы на минимальном уровне — по-английски (кстати, сотрудники университета могут посещать бесплатные курсы английского и в перспективе дойти до сдачи IELTS или TOEFL).

Shoor/нал: Больше перловой документации!

Документация по языку Perl и его модулям теперь доступна и на perldoc.pl, только оно без прокси не работает, ибо заблокировано роскомпозором. Точнее, заблокирован IP-адрес (IPv4, конечно), на котором сидит этот сайт. И lilypond.org без прокси не откроется, и toggl.com, и oEmbed.com.

Среда, 24 октября

Shoor/нал: Инструменты разные — методы похожие

Попробовал решить одну из рабочих задач, применив нелюбимый язык PHP в комплекте с современными инструментами — получилось близко к тому, что делал сравнительно недавно на перле, с некоторыми отличиями:

  • Вместо перла — PHP,
  • Модули тоже лежат рядом со своим кодом, но управляются не картоном, а через composer,
  • Композер и тесты может запустить ( composer test ), и отладочный сервер ( composer start ). Но можно для однообразия для обоих языков сделать Makefile и выполнять нужные действия командой make. Например, у меня запуск тестов — всегда make test , чтобы не путаться.
  • Вместо Mojolicious::Lite — микрофреймворк Slim. Для быстрого старта — Slim-Skeleton.
  • В шаблонах вместо Embedded Perl — Twig.
  • Если сайт работает через PHP-FPM, то нет нужды пинать демона каждый раз, как обновится код — он сам обрабатывает подобную ситуацию. Развёртывание свежей версии простого веб-приложения сводится к трём действиям: обновление рабочей копии ( svn up либо git pull ), разрешение зависимостей ( composer install ) и на всякий случай запуск тестов.

Практика показала, что разобраться с подобным комбайном можно достаточно быстро. Код при этом получается чуть более многословным, чем в Mojo, но всё равно компактным и понятным.

Илон Маск рекомендует:  Строчно-блочные элементы

Суббота, 13 октября

Сообщество ru_perl в LiveJournal: есть ли pure perl http клиент с поддержкой https ?

http::tiny зависит от Net::SSLeay — который бинарный

пока использую консольную утилиту curl

Написал zupernintendo в 11:59

Воскресенье, 7 октября

Сообщество ru_perl в LiveJournal: как прочитать .env ?

формат файла .env обычный, например:

есть какойто модуль чтоб загрузить файл и переменные получить в скрипте perl в $ENV[‘DEPLOY_DB’] и т.д.


или это можно сделать средствами perl?

Написал zupernintendo в 10:27

Пятница, 5 октября

Хабрахабр: Метки / perl: Perl 5: как в макросах ошибки прятались

Для пополнения списка языков программирования с открытым исходным кодом, которые были проверены с помощью статического анализатора кода PVS-Studio, был выбран Perl 5. Эта статья о найденных ошибках и трудностях просмотра результатов анализа. Количество макросов в коде столь велико, что создаётся ощущение, что код написан не на языке Си, а на каком-то его странном диалекте. Несмотря на затруднения при просмотре кода, удалось насобирать интересные проблемы, о которых и будет рассказано в этой статье.

Введение

Perl — высокоуровневый интерпретируемый динамический язык программирования общего назначения (Perl is a family of two high-level, general-purpose, interpreted, dynamic programming languages). Разработка Perl 5 была начата в 1994 году. Спустя пару десятилетий, код на языке Си с многочисленными макросами вызывает нервозность у современных программистов.

Исходный код Perl 5 был взят из официального репозитория (ветка blead). Для проверки проекта использовался статический анализатор кода PVS-Studio. Анализ проводился на операционной системе Linux, но анализатор также доступен для Windows и macOS.

Просмотр результатов анализа был не простой задачей. Дело в том, что анализатор проверяет препроцессированные .i файлы, в которых уже раскрыты все директивы препроцессора, а выдаёт предупреждения на файлы с исходным кодом. Это правильное поведение анализатора, ничего менять не нужно, но много предупреждений выдаётся на макросы! А за макросами скрывается нечитабельный код.
Читать дальше →

Написал SvyatoslavMC в 10:40

Shoor/нал: Склоняем точнее

Мы стали более лучше одеваться ^W^W^W правильнее склонять имена с фамилиями. Вчера вышла свежая версия предназначенного для этого перлового модуля Lingua::RU::Inflect (он же есть и на гитхабе — чуть свеже́е, чем на CPAN).

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

Итак, в новой версии:

  • Закрыты все имевшиеся по состоянию на вчерашний день issues, в том числе
  • Исправлена проблема с экспортом всего возможного оператором use Lingua::RU::Inflect ‘:all’ — компилятор теперь не ругается на попытку экспортировать функции, убранные в другой модуль.
  • Имена с беглыми гласными (Лев, Павел) и некоторые фамилии на -ец (Песец, Писец и Отец) стали склоняться правильно — беглая гласная убегает, как ей и положено. Там, где убегать не положено (Швец, Жнец, Надудеигрец и полный крах, крушение всех надежд — шесть букв, вторая И, но не фиаско) — не убегает.
  • Женские фамилии, оканчивающиеся на -ов, -ёв, -ин, -ий, -ый — похожие на мужские, но всё-таки женские — перестали склоняться.
  • Мужские фамилии, оканчивающиеся на -их и -ых, могут всё-таки склоняться: например, Бултых, Жмых, Отдых, Дитрих, Рерих, Ульрих, Фрейндлих и Эрлих склоняются, а Синих, Серых, Карих, Чёрных — нет.
  • Точнее определяются имена, нехарактерные для русских и не подпадающие под обычное правило: женские оканчиваются на -а и -я, мужские — на согласную. В списки исключений добавлено несколько десятков имён. Определитель теперь знает тюркоязычные и исландские отчества.

В итоге количество ошибок на тестовом наборе данных сократилось в 2–3 раза, до одной ошибки на 200–300 человек — есть неочевидные случаи, потому и оценка приблизительна. Двойные имена и фамилии пока слоняются неправильно — исправлю как-нибудь потом.

Понедельник, 1 октября

Сообщество ru_perl в LiveJournal: аналог php composer — что есть?

есть ли? — чтоб ставил в локальную папку проекта и подключая некий autoloader-файл в скрипте я мог использовать модули без необходимости установки через cpan и т.п.?

т е деплой осуществляется просто копированием на систему с установленным perl определенной версии и стандартными модулями

Написал zupernintendo в 09:34

Сообщество ru_perl в LiveJournal: как проверить что модуль бинарный (чтото компилирует)

как проверить что модуль бинарный (чтото компилирует ) ?

например мне нужны модули реализованые на perl без требований к компиляции —

как проверить что модуль не годится?

Написал zupernintendo в 09:28

Пятница, 28 сентября

Shoor/нал: Почти что Перл с Апачем

Новости географии: в одном люксембургском углу находится никому не известная деревня Шенген, ближайшая к ней железнодорожная платформа, буквально на другом берегу реки — Perl (по-русски всё-таки Перль), это же имя носит и муниципалитет (в других переводах — коммуна), и крупнейший его населённый пункт. А рядом с ними — Apach, но по-русски это не Апач, а, если верить википедии, Апаш, хотя, думаю, немцы могут прочесть и как Апах. При этом все три эти деревни — в разных странах.

Пятница, 7 сентября

Shoor/нал: Дорогой язык

В отчёте есть график, показывающий зависимость программистских доходов от используемых языков:

Перла тут нет вообще, а из того, на чём доводилось писать, самый выгодный — Руби. Видимо, придётся вспоминать, что там, и прокачиваться с юниора хотя бы до мидл-разработчика.

Вторник, 4 сентября

Сообщество ru_perl в LiveJournal: Разработка коммерческого продукта на perl5 — как способ защиты от копирования

что вы думаете об этом?
к примеру пишем на го/php/java или другом простом понятном языке — все просто и понятно где надо взяли скопировали и поменяли код.
а если пишем на перл — разработчиков мало, язык сложный и архаичный. на тех поддержке и кастомизации зарабатывать можно неплохо наверное?

Написал zupernintendo в 09:16

Суббота, 25 августа

Сообщество ru_perl в LiveJournal: потоковый POST запрос

что есть готового чтоб сделать потоковый запрос

чтоб слать большой блок данных без загрузки в память полностью

т е вместо строки передавать обработчик который будет отдавать данные по частям или файловый handler

желательно не тащить либ с кучей звисимостей или бинарных модулей не стандартных

Написал zupernintendo в 18:34

Пятница, 24 августа

Сообщество ru_perl в LiveJournal: а кто Mouse знает?

Хочется тегов (или хеша) к аттрибутам.

package Foo;
use Mouse;

has a => is => ‘ro’, isa => ‘Str’, tags => [ ‘json’ ];

Ну и далее в методах сериализации (например) можно было бы попросить у meta список атрибутов и отбросить те которые не имеют заданного тега.

В данном примере на стадии has мы бы указали что сериализатору json можно сериализовывать этот атрибут.

я тут покопал как делаются расширения MouseX, но чет не вкуриваю откуда начинать вообще раскапывать сие.

есть у кого под рукой рабочий пример как добавить свою опцию в атрибут?

всех с пятницей!

Написал unera в 17:24

Четверг, 5 июля

Мини-портал Perl на Opennet: Релиз оптимизирующего компилятора Perl5-кода RPerl 4.0

После пяти лет существования проекта и спустя три года с момента первого выпуска традиционно ко Дню Независимости США подготовлен значительный релиз свободного оптимизирующего компилятора RPerl 4.0, позволяющего транслировать код на языке Perl 5 в представление на языке С++ с последующим преобразованием в машинный код при помощи С++-компилятора. Исходные тексты проекта распространяются под лицензиями Artistic и GPL, как и код интерпретатора Perl5.

Понедельник, 25 июня

Мини-портал Perl на Opennet: Релиз языка программирования Perl 5.28.0

После 13 месяцев разработки состоялся релиз новой стабильной ветки языка программирования Perl — 5.28. При подготовке нового выпуска было изменено около 730 тыс. строк кода, изменения затронули 2200 файлов, в разработке приняли участие 77 разработчиков.

Среда, 25 апреля

Хабрахабр: Метки / perl: Что нового в PostgreSQL 11: JSONB-трансформы

В предыдущих постах вы могли прочитать про INCLUDE-индексы и встроенный веб-поиск. Эти фичи появятся в PostgreSQL 11, релиз которого, напомню, планируется в октябре. Сегодня мне хотелось бы продолжить обзор новых фичей грядущего релиза, рассказав про JSONB-трансформы для языков PL/Python (3f44e3db) и PL/Perl (341e1661). Оба патча написаны Антоном Быковым.
Читать дальше →

Написал afiskon в 15:54

Среда, 4 апреля

Shoor/нал: Тестирование перловых mojolicious-приложений в Geany

Программировать, используя какую-нибудь могучую интегрированную среду разработки (IDE) — хорошо и зачастую удобно: там «из коробки» могут предоставляться различные удобные штуковины — компиляция, отладка, тестирование, работа с системами контроля версий. Однако некоторые системы при всём своём могуществе оказываются не совсем подходящими — например, могут много весить и сильно тормозить. Приходится выбирать что-нибудь полегче, например, Geany.

В Geany есть (в том числе и средствами дополнительных модулей) всякое:

  • подсветка синтаксиса,
  • организация файлов в проекты,
  • поиск текста как в текущем файле, так и в произвольном их наборе с обходом подкаталогов,
  • поиск парных скобок и тэгов HTML/XML, а также переход по ним,
  • составление оглавления используемых функций,
  • компиляция либо проверка синтаксиса с подсветкой ошибок и быстрым переходом к ним.

С отладчиком в Geany пока не удалось разобраться, а вот процесс тестирования кода можно сделать более удобным.

Итак, у нас есть:

  • IDE Geany,
  • Веб-приложение, написанное на языке Perl с использованием фреймворка Mojolicious и системы управления модулями carton,
  • Желание запускать тесты почаще и попроще, без лишних переключений из редактора в терминал.

Geany позволяет для каждого проекта задать список действий: как общих для всего проекта, так и специфичных для конкретного типа файлов — найти настроки можно в меню Project → Properties → вкладка Build либо Build → Set Build Commands.

По умолчанию для перловых скриптов есть только одно действие — компиляция, а по факту — проверка синтаксиса. Можно исправить эту команду, научив её работать с картоном.

Пойдём дальше — научим Geany прогонять тесты из текущего файла. В Mojolicious тесты представляют собой перловые файлы, имеющие расширение .t и лежащие в каталоге t/ . Для того, чтоб, видя в редакторе открытый файл с тестами, прогнать тесты, в настройках придётся добавить путь к корневой папаке приложения. Чтоб не писать путь целиком, можно воспользоваться шаблонами. В документации пишут:

The first occurrence of each of the following character sequences in each of the command and working directory fields is substituted by the items specified below before the command is run.

  • %d — substituted by the absolute path to the directory of the current file.
  • %e — substituted by the name of the current file without the extension or path.
  • %f — substituted by the name of the current file without the path.
  • %p — if a project is open, substituted by the base path from the project.
  • %l — substituted by the line number at the current cursor position.


то есть, некоторые имена файлов и пути к папкам можно указывать специальными переменными.

Вторая команда в списке тех, что зависят от типа файла, получает в меню кирпичную иконку и (по умолчанию) клавишу F9 для быстрого запуска. Клик по кнопке с кирпичом, расположенной на панели инструментов под меню также вызовет выполнение этой второй команды.

Пробуем выполнить тест — в окно Compiler выводятся результат выполнения. Если есть ошибки, они будут выделены и в этом окне, и в исходном коде теста.

Воскресенье, 1 апреля

Хабрахабр: Метки / perl: [Из песочницы] Скрипт нагрузочного тестирования для проверки соответствия текущих параметров каналов связи заявленным

Проблематика

В организациях, использующих арендованные у операторов связи каналы передачи данных VPN/Интернет для построения корпоративной филиальной сети, рано или поздно может возникнуть ситуация, когда внезапно выясняется, что каналы до некоторых удаленных подразделений не соответствуют заявленным требованиям по полосе пропускания, либо при незначительной загрузке каналов появляются потери, влияющие на качество работы сетевых сервисов.

При этом система мониторинга исправно мониторит доступность каналов, потери на них, задержку, но вследствие того, что каналы связи не всегда загружены трафиком, особенно резервные каналы, она не может своевременно выявить все отклонения их параметров от согласованных с операторами связи. Для таких целей требуется проведение периодического нагрузочного тестирования каналов, в результате которого производится проверка потерь на канале при одновременной его загрузке трафиком, утилизирующим канал практически до максимальных значений полосы пропускания, с последующим контролем объема принятого трафика удаленным маршрутизатором. Хочу поделиться своими наработками в части автоматизации данного процесса.
Читать дальше →

Написал alexk038 в 19:59

Среда, 21 марта

Shoor/нал: Сфинкс спрятался? Сделаем туннель, но ненадолго

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

На сервере есть SSH — значит, можно проложить туннель, чтоб разработчик мог тестировать свои приложения на своих компьютерах, прежде чем делать коммиты и лезть на сервер. Команда для проброса стандартного сфинксового порта 9312 с локальной машины на сервер может выглядеть так:

Однако в таком виде она неудобна: команду надо запускать в одном окне терминала, тесты — в соседнем, а после завершения тестов надо ещё и закрывать SSH-сессию в первом окне.

В инструкции ( man ssh ) пишут:

То есть, ssh позволяет и команду выполнить, и перед этим уйти в фоновый режим. Приме́ним полученные знания:

Такая команда откроет туннель, не выводя ничего в терминал, подождёт пять секунд и закроется — почти то, что надо!

Осталось исключить рытьё тоннелей на сервере

и скрестить открытие туннеля с тестированием. Тесты в перловом веб-приложении, написанном с использованием микрофреймворка Mojolicious::Lite, могут вызываться различными путями — и как ./application.pl test , и командой prove , и как-нибудь ещё — я, например, обычно создаю Makefile с нужными мне задачами и тесты выполняю командой make test — мне так удобнее. Чтоб не рассматривать все возможные варианты тестирования, надо поместить открытие туннеля прямо в тест. Если конфигурация приложения хранится в каком-либо отдельном файле (YAML хорошо для этого подходит — в Моджолишисе есть плагин для чтения ЯМЛ-конфигов), можно команду открытия туннеля хранить рядом с остальными настройками — это лучше, чем пихать её в тест. А в тесте останется лишь вызвать её после создания объекта Test::Mojo:

Тесты зеленеют, можно спокойно идти заниматься музыкой :-)

P.S. Если вместо system применить функцию exec, то тест не будет выполняться до тех пор, пока не закроется туннель — тест будет ждать завершения дочернего процесса и в итоге так и останется красным.

Суббота, 10 марта

Shoor/нал: Картину, корзину, картонку

Если в целях переносимости хранить перловые модули рядом со своим кодом — будет не очень хорошо. Если при этом ещё и своих собственных модулей наберётся не один десяток (я такой винегрет встречал) — совсем плохо. Вывод — надо разделять.

Один из вариантов — использовать carton. Для тех, кому лень читать по-английски, есть перевод — статья Вячеслава Тихановского «Локальная установка и использование Perl-модулей» из журнала Pragmatic Perl за 2014 год.

Carton берёт список модулей, ставит их локально (root не нужен) вместе с зависимостями и позволяет запускать приложения с таким вот набором модулей. Список используемых модулей (если carton ещё ничего не ставил) можно достать из скриптов и своих модулей:

Чтоб указать необходимость установки какого-нибудь Module::Name , достаточно добавить в файл cpanfile строку

Carton умеет ставить нужные версии модулей, однако в документации этот момент вскользь упомянут, но не описан должным образом. Если захотеть, например, поставить старую версию модуля Sphinx::Search (это потребуется, если сам Сфинкс не новый) и написать

то вместо желаемой версии будет установлена свежая (0.31 по состоянию на март 2020) — похоже, такая запись указывает минимально допустимую версию. Если поменять код на

и снова выполнить carton install , версия поменяется

Команда carton exec может пригодиться для запуска не только самого́ приложения, но и чего-нибудь ещё:

Пятница, 9 марта

Shoor/нал: Простая drag’n’drop-передача файлов в перловое приложение на Mojolicious::Lite

Хочу упростить загрузку файлов пользователем на некоторые сайты, сделанные на Mojolicious::Lite — нужна обработка нескольких файлов за раз плюс поддержка drag and drop — это удобно, когда надо загрузить несколько файлов, которые в проводнике файловом менеджере либо просмотрщике картинок отображаются не рядом.

Естественно, ищу готовые примеры, чтоб не изобретать велосипед. Нашёл два:

  • Один из них красивый и работает (надо брать!), но примеры серверной части для него — не на перле. Понятно, что можно взять имеющиеся примеры (на пхп и питоне) и перевести их. Либо погуглить тщательнее.
  • Другой — маленький и простой, и даже конкретно под Mojolicious::Lite, но не работает, потому как был написан во времена, когда автор активно пилил Моджолишес, не обращая внимания на обратную совместимость — мне уже приходилось сталкиваться с необходимостью допиливания старых приложений, которые не взлетали на новом Моджо. Пара взмахов напильником — и оно заработало.

Попутно выяснилось, что в клиентской части можно даже без jQuery обойтись — оно способно работать на голом JavaScript.

Порекомендуйте простой файловый менеджер на perl/cgi

Коллеги, порекомендуйте _простой_ файловый менеджер на перле под CGI.
Сейчас используется phpWebFileManager, нужно что-то аналогичное или даже ещё проще, но на перле:
показывать содержимое одной-единственной директории, указываемой в конфиге, закачивать/скачивать в неё файлы, переименовывать, удалять.
Всё, больше нечего не нужно. Никакой аутентификации, никаких операций с директориями, с правами, владельцами, и пр.

Гуглить пробовал, находятся либо монстры всё-в-одном, либо веб-клиенты к FTP (нафига??).

В общем-то, я могу и сам написать, но наверняка уже что-нибудь готовое есть.

Как получить помощь по Perl?

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

Сайт Perl Maven

На сайте https://ru.perlmaven.com/ Вы найдете переведенные статьи по языку. Возможно, они смогут Вам помочь. Полный список статей на русском языке можно найти в архиве. Однако значительно больше материала доступно на английском языке здесь https://perlmaven.com/

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

Пишем сайт на Perl и Mojo. Часть 1 — Выбираем необходимый софт и окружение.

В последнее время, вокруг языка Perl складывается очень много сказок и небылиц. То Perl «умер», то он очень сложен для новичка, то создать на нем сайт/веб-приложение сложно и «старомодно» ну и т.д. и т.п.
Любой человек, программирующий на Perl, наверняка слышал о таком web-фреймворке как Catalyst . Лично мне, очень нравится Perl, но вот до освоения Catalyst дело так и не дошло (за исключением каких-то базовых вещей). И вот, относительно недавно, появился новый и очень интересный фреймворк для разработки web-приложений на Perl — mojolicious .

Хочу представить серию статей, целью которых является рассказать и показать читателям, что создавать веб-сайты на Perl и Mojolicious , не сложнее чем на PHP и Codeigniter и даже интересней.

Часть 1 — Выбираем необходимый софт и окружение.

У меня есть ноутбук, на котором установлена WINDOWS VISTA (да, да, будем писать на Perl и Mojo именно под Windows, ведь у большинства тоже Win, не так ли?).

Первое, что на понадобится и без чего мы не сможем двинуться дальше — это собственно сам Perl.
Тут есть несколько вариантов:
1. Взять сборку Perl от ActiveState
2. Взять сборку strawberryperl
3. Можно посмотреть все варианты получения Perl вот здесь www.perl.org/get.html

Пусть вас не пугает слово «сборка», ничего «собирать» и «компилировать» не придется =)!
В обоих случаях Вы получите удобный инсталятор, который выполнит всю необходимую работу.
Разработчики Mojo, при работе на MS Windows рекомендуют использовать strawberryperl.com .
И так скачиваем последний дистрибутив Perl (на момент написания статьи это strawberry-perl.googlecode.com/files/strawberry-perl-5.10.1.0.msi ) и приступаем к установке.

Установка проходит в «3 клика».

Соглашаемся с лицензионным соглашением, поставив соответствующую галочку, жмем «Install».

После 30 секунд копирования файлов установка завершена!

Вот и все! Perl установлен и готов к использованию!

Теперь установим (если его еще нет) текстовый редактор или IDE, для написания кода.
Тут, как говорится, дело вкуса. Можно писать в «родном» блокноте для Windows, но лучше выбрать что-нибудь более подходящее.
Лично я могу посоветовать следующее:
Komodo edit
Notepad++
Intype
Padre

Я остановил свой выбор на Komodo edit. В его установке нет ничего сложного — простое Windows приложение, которое устанавливается, как и сам Perl, в «3 клика» (Если вы вдруг перейдете на Linux — нет проблем — Komodo Edit работает и там).

Теперь у нас есть работающий Perl + возможность комфортно писать код на нем!
В следующей части мы уставим Mojolicious, рассмотрим основы работы с ним и напишем «Hello World»!
На сегодня все!

Perl, Python — блог программиста

Очень лениво набирать этот код раз за разом. Добавляю эти несколько строк кода для дальнейшего копипаста. Ведь постоянно нужно что-то тестировать, и простой http-клиент, особенно, если надо тестировать взаимодействие с партнерами посредством обмена xml-данными, бывает незаменим.

Расширить функциональность очень просто, см. документацию:

Самый простой http-клиент на perl : 3 комментария

Можно короче. См например первый пункт в заметке http://eax.me/mini-notes-issue-7/

Спасибо! Действительно, можно и короче :) Хотя, не думаю, что это очень принципиальное различие :) У вас интересный блог, кстати. Не подскажете, панель слева, с кнопками от «В контакте», «Одноклассники» и пр. — это какой-то плагин к wordpress, или каждая социальная сеть вручную добавлена?

azalio

Сб, 19 дек, 2009, 22:29
Какой шаблонизатор на Perl выбрать?

Сб, 19 дек, 2009 19:44 (UTC)
solom

Люблю мой собственный:

Первый параметр — шаблон вида

Второй — указатель на хэш типа <'TITLE'=>‘Мой сайт’,’TEST’=>’Это просто тестовый текст’>

Сб, 19 дек, 2009 19:57 (UTC)
azalio

===========
Давайте, признайтесь: вы написали шаблонизатор. Это нормально, почти у каждого была такая цель. Вы начали с чего-то очень простого, вроде $HTML =

s/\$(\w+)/$<$1>/g и продолжали, добавляя условия, циклы и инклуды, пока вы не создали нерасширяемого монстра.
===========

Я не к тому что подъебнуть, а к тому что очень интересно пересеклась статья и твой комментарий.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL