Привет, Хабр! На связи Александр Ткач, руководитель группы идентификации, и Татьяна Устинова, ведущий инженер-программист в группе Рунити. Наша команда отвечает за сервисы, через которые проходит каждый пользователь: регистрация, авторизация, верификация личных данных и жизненный цикл договора пользователя.

Perl принято хоронить примерно с 2010 года. В феврале 2026-го TIOBE вернул его в топ-10 — и это немного всколыхнуло профессиональное сообщество. В группе компаний Рунити на Perl работает 25–30% продакшн-сервисов: биллинг, авторизация, очереди, ядро платформы. Расскажем, почему так вышло, что происходит, когда мы пытаемся это переписать, и почему нам за это не стыдно.

Навигация по тексту:

Сколько Perl в продакшне и зачем

Ещё в 2017–2021 годах доля Perl в сервисах группы компаний превышала 50%. Сейчас — около 25–30%: мы планомерно переводим сервисы на Python и Go, но процесс небыстрый. Дальше объясним почему. На Perl у нас реализованы:

  • Платформа — низкоуровневая логика работы с хранилищами, конфигами, логированием

  • Биллинг — ядро системы контроля и учета жизненного цикла услуг и платежей в Рег.ру и Руцентре

  • Жизненный цикл договора (аккаунта пользователя) — от момента регистрации до архивации

  • Очереди

  • Идентификация — сервис сверки персональных данных клиентов и предоставления привилегий по итогу прохождения идентификации

  • Крон-скрипты — служебная автоматизация

  • Справочная система и тикеты поддержки

  • Бэк-офис — внутренний интерфейс сотрудников

  • Отправка почты — для Руцентра (в процессе переписывания)

  • Взаимодействие с РКН 

  • Магазин доменов — часть логики выбора домена

  • Двухфакторная аутентификация

  • Отправка SMS — используется в 2FA, напоминаниях и других сценариях

Иногда мы пишем новые сервисы на Perl — не из идеологических соображений, а из прагматичных. Жесткого запрета на язык в компании нет: при прочих равных новый сервис скорее уйдет на Python, но если команда загружена, а задача не требует тяжелого решения — пишем на Perl. Единственное условие: сервис должен отвечать общим архитектурным практикам.

Perl-экосистема предлагает Rex — инструмент автоматизации на базе Perl. Мы его не используем: к тому моменту, когда вопрос встал, уже перешли на более зрелые решения. Для тестовых сред — Ansible и docker-compose, для стейджинга и прода — Kubernetes.

Почему мы снижаем долю Perl

Дело не в недостатках языка. Просто рынок труда для Python и Go больше: проще нанять, шире поддержка сообщества, больше готовых библиотек — не нужно изобретать велосипеды.

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

Еще один фактор — обновления библиотек на Perl приходят позже, чем для Python или Go. Это ощутимо, когда нужна свежая функциональность или быстрый патч безопасности.

Когда мы переписываем и что из этого выходит

Переписывание — это параллельный процесс: поддержка существующей базы идет одновременно с постепенным выносом логики в новые микросервисы. Вот несколько наших кейсов — разных по исходу.

Авторизация: получилось

Изначально авторизация на сайте Рег.ру работала на Perl с использованием фреймворка Catalyst. Старая реализация не позволяла переиспользовать компоненты авторизации нигде, кроме этого фреймворка.

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

Домены Рег.ру: получилось, но не до конца 

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

Команда решила не выносить куски существующего кода итеративно, а сразу написать новую систему с нуля — «идеальную», на все случаи жизни. Это классическая ловушка: академически спроектированная система хорошо выглядит на бумаге, но реальные проблемы вылезают только в продакшне, и никакое моделирование их не предсказывает. Чтобы довести такое решение до состояния «можно запускать», понадобились бы еще годы — параллельно с поддержкой живого Perl-кода. Объем работ недооценили, и в какой-то момент стало очевидно, что игра не стоит свеч.

Снимки HTML: доработали вместо замены

Catalyst не обеспечивал нужную скорость открытия динамических страниц. Вместо миграции мы написали утилиту поверх него: она собирает из динамических страниц статический HTML-кэш и отдаёт его через nginx. Задача решена без переписывания.

Как устроена разработка на Perl у нас

Требования к сервисам — те же, что для Python и Go

У нас нет языковых ограничений. Сервис должен соответствовать принципам SOLID, иметь настроенный мониторинг и деплоиться в Kubernetes. Это одинаково для всех языков.

Зависимости

В Рег.ру мы ведем собственный репозиторий Perl-модулей на базе Pinto, где фиксируем нужные версии. Зависимости попадают во внутренний репозиторий только после проверки отделом безопасности — ничего не скачиваем напрямую из CPAN. В Руцентре принято собирать RPM-пакеты: установка библиотек при сборке Docker-образа происходит быстрее.

Безопасность зависимостей

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

Линтинг и код-стайл

Perl::Critic мы не внедрили во всех командах — его стандарт не полностью совпадает с нашим код-стайлом. В сервисе идентификации Perl::Critic используется в CI. А в других сервисах — нет, там ручная проверка на соответствие внутреннему стандарту. Наш код-стайл для Perl можете посмотреть по ссылке, для нового кода мы стараемся придерживаться тех же правил.

Тесты

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

Фреймворк Test::Spec, который мы используем для юнит-тестирования на Perl, значительно упрощает написание тестов и делает их читаемее. Он опубликован на MetaCPAN, пользуйтесь!  Библиотеки, которые мы разработали внутри компании, тоже лежат в открытом доступе.

Прямая речь разработчиков Рунити: что нам самим нравится в Perl

И еще один аргумент для тех, кто говорит, что Perl умер: он входит почти во все UNIX-подобные операционные системы из коробки — устанавливать отдельно не нужно. Язык, встроенный в инфраструктуру на уровне ОС, никуда не денется просто по факту своего присутствия везде.

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

Коллеги добавляют:

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

— Иван Клянников, разработчик Рег.ру.

«Для меня главный прикол Perl — в его гибкости: можно написать однострочник, скрипт или большую программу на десятки тысяч строк. Независимо от того, вырастет ли его популярность снова, наши компетенции останутся востребованными, а опыт пригодится при работе с другими языками. Честно скажу: при первом погружении было сложно — много непонятных символов ($, @, %) и какой-то магии. Но чем глубже изучаешь, тем больше нравится. Главный плюс сейчас — приятный и понятный синтаксис, если соблюдать хороший код-стайл. Главный минус — нет современных платформ и курсов для изучения»,

— Илья Тещин, разработчик Рег.ру.

Как попадают на Perl-разработку

Сейчас в нашей группе компаний около 30 Perl-разработчиков — по меркам рынка это немало. Пополняем двумя путями.

Наём извне — сложный. Молодых специалистов с Perl мало, опытные часто не готовы к смене грейда. Поэтому всё активнее растим своих.

Переход внутри — рабочая история. Например, Татьяна пришла в компанию питонистом и два года писала на Python. А когда ее проект завершился, перешла в команду, где основная часть задач — на Perl:

«С самим языком я познакомилась ещё на Python-проекте — нам нужно было переписывать код с Perl на Python, так что сначала только читала. Когда перешла в новую команду, нужно было уже писать. Но гораздо сложнее оказалось не выучить язык, а погрузиться в логику проекта — она намного сложнее самого языка».

В 2025 году мы провели внутреннюю стажировку по Perl. Из 20 участников отобрали троих — они сейчас работают Perl-разработчиками в наших командах. 

Онбординг строится на документации и тестах: почти каждый сервис покрыт описанием архитектуры и бизнес-требованиями. Если что-то непонятно — идут к тимлиду с конкретным вопросом.

Идентификация: актуальный кейс

Наш сервис идентификации написан на Perl. Он верифицирует персональные данные пользователей.

Например, сейчас в разделе «Настройки» личного кабинета Рег.ру клиент может пройти идентификацию через ЕСИА: заполнить контактные данные владельца аккаунта автоматически, без загрузки документов и ручной проверки. Данные передаются по защищенному соединению, доступ только к разрешенным законом сведениям. Есть и функция актуализации — она позволяет в пару кликов получить обновленные данные от Госуслуг, если что-то изменилось. 

Страница настроек с баннером «Пройдите идентификацию через Госуслуги»
Страница настроек с баннером «Пройдите идентификацию через Госуслуги»
Страница настроек для нового аккаунта с предложением заполнить контактную информацию
Страница настроек для нового аккаунта с предложением заполнить контактную информацию
Шторка заполнения контактов: вкладки «Физическое лицо», «ИП», «Юридическое лицо»
Шторка заполнения контактов: вкладки «Физическое лицо», «ИП», «Юридическое лицо»

Сейчас функционал доступен для физических лиц, в перспективе — расширение на юридические лица и ИП. В декабре 2025 года в законодательство внесли изменения: с сентября 2026 года идентификация через Госуслуги станет обязательной для администраторов доменов при операциях с доменами. Инфраструктура для этого у нас уже готова — и написана на Perl.

Если остались вопросы про наш Perl, архитектуру или процессы переписывания — пишите в комментарии, постараемся ответить.