Perl — это высокоуровневый интерпретируемый язык программирования общего назначения, который создал Ларри Уолл в 1987 году и который особенно силен в обработке текста, регулярных выражениях и системном администрировании. Сегодня это нишевый язык: на нем редко начинают новые крупные проекты, но он живет в системных скриптах, парсерах и легаси-коде, который надо поддерживать.
Содержание
Ниже разберу, для чего Perl нужен на практике, как выглядит первый рабочий скрипт, чем сильны регулярные выражения, что означают сигилы $, @, % перед переменными, какие ошибки ловят новички и в каком состоянии язык находится в 2026 году. Весь код прогнан на Perl 5.34, вывод показан фактический.
Для чего нужен Perl
Perl задумывался как «клей» между программами и текстовыми потоками, отсюда и его сильные стороны. Основные сценарии, где он до сих пор уместен:
- Обработка текста и логов. Разбор строк, извлечение полей, подсчет и агрегация. Это исходная специализация языка.
- Регулярные выражения. Синтаксис регулярок Perl (PCRE) стал стандартом де-факто и перекочевал в другие языки.
- Системное администрирование. Скрипты для бэкапов по расписанию, парсинга конфигов, автоматизации рутины на Unix-серверах.
- Одноразовые скрипты-однострочники. Быстрая обработка файлов прямо из командной строки, без отдельной программы.
- Легаси-веб и биоинформатика. Старые CGI-приложения и научные пайплайны (BioPerl), которые продолжают работать.
Для мобильной разработки, игр, фронтенда и типового современного бэкенда Perl не выбирают — там доминируют другие языки. Это честная граница применимости, а не универсальный инструмент.
Первый скрипт на Perl
Начну с минимального законченного скрипта, который можно скопировать и запустить. Он объявляет переменные трех основных типов и печатает результат:
use strict;
use warnings;
my $name = "Perl"; # скаляр: одно значение
my @langs = ("Perl", "Python", "Bash"); # массив: список значений
my %versions = (Perl => "5.40", Python => "3.13"); # хеш: пары ключ-значение
print "Привет, $name!\n";
print "Языков в списке: ", scalar(@langs), "\n";
print "Версия Perl: $versions{Perl}\n";
Вывод в консоли:
Привет, Perl!
Языков в списке: 3
Версия Perl: 5.40
Теперь по строкам. use strict; и use warnings; — две директивы, с которых стоит начинать любой скрипт: они требуют объявлять переменные через my и предупреждают о подозрительных местах. Без них Perl прощает опечатки молча, и ошибку потом трудно найти (пример покажу ниже).
my $name объявляет локальную переменную. Сигил $ перед именем означает скаляр — одно значение (число или строку). @langs — массив, %versions — хеш (ассоциативный массив, пары ключ-значение). scalar(@langs) в скалярном контексте дает длину массива, поэтому печатается 3. Обращение $versions{Perl} берет одно значение из хеша, и сигил снова $, потому что достаем один элемент.
Сигилы переменных
Сигил — это ведущий символ перед именем, который задает тип структуры. Это ключевая особенность синтаксиса Perl, из-за нее код и выглядит непривычно.
| Сигил | Тип | Пример объявления | Что хранит |
|---|---|---|---|
$ |
скаляр | my $x = 42; |
одно значение: число, строку или ссылку |
@ |
массив | my @list = (1, 2, 3); |
упорядоченный список значений |
% |
хеш | my %h = (a => 1); |
пары ключ-значение |
Тонкость: при доступе к одному элементу массива или хеша сигил меняется на $, потому что достаете скаляр: $list[0] (первый элемент массива), $h{a} (значение по ключу). Начинающие часто путают @list и $list[0] — это разные вещи, целый массив против одного его элемента.
Регулярные выражения — сильная сторона
Регулярные выражения встроены в язык на уровне синтаксиса, а не подключаются библиотекой. Оператор =~ связывает строку с шаблоном. Разберу типовую задачу: вытащить из строки числа, домен email и замаскировать сумму.
use strict;
use warnings;
my $text = 'Заказ 1024 от client@example.com, сумма 4990 руб';
my @numbers = $text =~ /(\d+)/g; # все группы цифр, флаг g - найти все
print "Числа: @numbers\n";
if ($text =~ /(\S+)@(\S+\.\w+)/) { # захват имени и домена в $1 и $2
print "Домен: $2\n";
}
(my $masked = $text) =~ s/\d+ руб/*** руб/; # s/// - замена по шаблону
print "$masked\n";
Вывод:
Числа: 1024 4990
Домен: example.com
Заказ 1024 от client@example.com, сумма *** руб
Здесь /(\d+)/g с флагом g возвращает все совпадения списком, скобки создают группы захвата. Оператор s/шаблон/замена/ меняет подстроку. Такой разбор строк на Perl пишется компактнее, чем на многих других языках, — это и есть его исходная ниша.
Обработка логов: пример посложнее
Типичная задача системного администратора — посчитать записи по уровням в лог-файле. Скрипт читает файл построчно и накапливает счетчики в хеше:
use strict;
use warnings;
my %count;
open(my $fh, '<', 'log.txt') or die "Не открыть файл: $!";
while (my $line = <$fh>) {
if ($line =~ /\s(INFO|WARN|ERROR)\s/) {
$count{$1}++; # $1 - захваченный уровень, ++ увеличивает счетчик
}
}
close($fh);
for my $level (sort keys %count) {
print "$level: $count{$level}\n";
}
Для лога из двух INFO, двух ERROR и одного WARN вывод будет такой:
ERROR: 2
INFO: 2
WARN: 1
Ту же логику часто пишут вообще без файла-скрипта — одной строкой в терминале. Флаг -n оборачивает код в цикл по строкам ввода, -l добавляет перенос:
perl -lne '$c{$_}++; END { print "$_: $c{$_}" for sort keys %c }' log.txt
Три частые ошибки
Ошибка 1: символ @ в двойных кавычках. В строке с email @ воспринимается как начало массива:
use strict;
use warnings;
my $email = "client@example.com";
print "$email\n";
Под use strict это падает при компиляции:
Possible unintended interpolation of @example in string
Global symbol "@example" requires explicit package name ...
Исправление — одинарные кавычки (в них нет интерполяции) или экранирование: my $email = 'client@example.com'; либо "client\@example.com".
Ошибка 2: == для сравнения строк. Оператор == в Perl сравнивает числа, а строки — оператор eq. Легко перепутать:
use strict;
use warnings;
my $answer = "yes";
if ($answer == "yes") { print "совпало\n"; }
С use warnings Perl предупреждает и дает неверный результат:
Argument "yes" isn't numeric in numeric eq (==)
совпало
Строка «yes» в числовом контексте становится 0, сравнение 0 == 0 истинно, поэтому «совпало» печатается ошибочно. Исправление — строковый оператор: if ($answer eq "yes").
Ошибка 3: опечатка в имени без use strict. Без строгого режима опечатка тихо создает новую переменную:
my $total = 0;
$total = $total + 100;
$totl = $totl + 50; # опечатка: $totl вместо $total
print "Сумма заказа: $total руб\n";
Скрипт не падает, но выводит неверную сумму:
Сумма заказа: 100 руб
Прибавка 50 ушла в переменную-призрак $totl, а $total осталась 100 вместо 150. Исправление — всегда ставить use strict; use warnings;: тогда та же опечатка ловится сразу с сообщением Global symbol "$totl" requires explicit package name.
Актуальность Perl в 2026
Живая ветка языка — Perl 5: она активно развивается, релиз 5.40 вышел в 2024 году, обратная совместимость сохраняется. Огромный репозиторий модулей CPAN тоже жив и остается сильной стороной экосистемы.
Отдельная тема — Perl 7. Его анонсировали в 2020 году как «Perl 5 с современными настройками по умолчанию», но на момент подготовки статьи стабильный релиз Perl 7 не вышел, а планы по нему менялись. Считать Perl 7 доступной версией нельзя — это скорее заявленное направление, чем факт. Актуальный статус стоит проверять на perl.org перед тем, как на него ссылаться.
Честно про нишевость: Perl уступил массовые задачи Python и другим языкам, его доля в рейтингах популярности невелика и снижается годами. Как первый язык для новичка он неудачен — синтаксис с сигилами и «есть больше одного способа сделать» усложняют вход. Но мертвым он не является: там, где нужно быстро перемолоть текст или поддержать существующий скрипт на Unix-сервере, Perl по-прежнему уместен.
Выводы
- Perl — интерпретируемый язык общего назначения, чья сильная сторона в 2026 году — обработка текста, регулярные выражения и системные скрипты, а не новые крупные приложения.
- Тип переменной задается сигилом:
$для скаляра,@для массива,%для хеша; при доступе к одному элементу сигил становится$. - Регулярные выражения встроены в синтаксис через операторы
=~иs///, что делает разбор строк компактным. - Директивы
use strict; use warnings;ловят опечатки и типовые ошибки на этапе компиляции — ставить их стоит в каждом скрипте. - Живая ветка — Perl 5 (релиз 5.40, 2024); статус Perl 7 на 2026 год не определен, его стоит уточнять отдельно.
Где применяется / связь с практикой
На практике Perl чаще всего встречается администраторам Linux-серверов: разобрать лог, собрать отчет по крону, склеить вывод одной утилиты со входом другой. Это работа на стыке командной строки, регулярных выражений и файловой системы, и базовые навыки Linux тут важнее, чем сам язык.
Освойте тему на практике
Освоить командную строку, права доступа, процессы и скриптинг, внутри которого Perl-однострочник становится рабочим инструментом, можно на курсе linux-basic в Otus. Посмотреть формат занятий и уровень до оплаты помогут бесплатные вебинары — там разбирают конкретные задачи и отвечают на вопросы.
Смежные темы: Язык Ruby: что это такое и зачем он необходим, Императивная разработка: характеристики и ее особенности, Введение в программирование.
FAQ
Как узнать версию установленного Perl?
Команда perl -v в терминале печатает версию интерпретатора. На macOS и большинстве дистрибутивов Linux Perl предустановлен; на Windows его ставят отдельно, распространенный бесплатный вариант — Strawberry Perl.
В чем разница между Perl и PHP, раз оба про веб?
PHP изначально заточен под генерацию веб-страниц и остается языком веб-бэкенда. Perl — язык общего назначения с упором на обработку текста; в вебе он сегодня встречается в основном в старых CGI-приложениях, а не в новых проектах.
Стоит ли учить Perl в 2026 году как первый язык?
Как первый — скорее нет: для старта проще Python. Perl имеет смысл осваивать точечно, если вы работаете с легаси-кодом на нем или с Unix-администрированием, где ценятся быстрые текстовые скрипты.



