Перейти к основному содержимому

Perl — о разделе

Черновик раздела. Материалы будут дополняться; ниже — структура, контекст экосистемы и черновые статьи с практическим содержанием для чтения legacy-кода и написания скриптов.

Perl — язык с сильной строковой и regex-моделью, CPAN (Comprehensive Perl Archive Network — реестр модулей) и традицией системного администрирования и bioinformatics. В разделе — акцент на Perl 5 (современный синтаксис, use strict, use warnings, signatures в 5.36+).

МатериалЗачем
История языкаLarry Wall, CPAN, Perl 5 и Raku
Первая программаstrict, Hello World, однострочники
Python introАльтернатива для новых скриптов
Bash introShell glue рядом с Perl

Что такое Perl простыми словами

Perl создавался для извлечения и преобразования текста — логи, отчёты, конфиги, HTML эпохи CGI. Синтаксис гибкий (TMTOWTDI — There's more than one way to do it), встроены регулярные выражения, контексты scalar/list и огромный архив модулей CPAN.

Сегодня новый прикладной код чаще пишут на Python или Bash, но Perl остаётся в:

  • legacy web (mod_perl, старые CGI);
  • log parsing и DevOps-скриптах;
  • bioinformatics (BioPerl);
  • embedded tooling в старых enterprise-системах.

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


Планируемое содержание

ТемаСтатус
1История языкачерновик
2Скаляры, массивы, хешипланируется
3Регулярные выражения и matchпланируется
4CPAN, cpanm, модулипланируется
5ОО в Perl (Moo/Moose)планируется
6Однострочники и системное администрированиепланируется
7Первая программачерновик
8+PSGI, Mojolicious, сравнение с Pythonпланируется

Ключевые идеи раздела

Контексты scalar и list

Выражение ведёт себя по-разному в зависимости от ожидаемого контекста:

my @items = (1, 2, 3);
my $count = @items; # scalar context → 3
my ($a, $b) = @items; # list context → первые элементы

Понимание контекста — главный барьер для новичков после Python.

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

Regex — часть языка, не отдельная библиотека:

if ($line =~ /ERROR: (.+)/) {
my $msg = $1;
}

Статья 3 разберёт флаги, capture groups и s///.

CPAN

CPAN — реестр тысяч модулов: LWP::UserAgent, DBI, JSON, Moo. Установка через cpanm:

cpanm JSON::MaybeXS

См. пакетные менеджеры.

strict и warnings

Современный Perl начинается с:

use strict;
use warnings;
use v5.36; # включает signatures и часть features

Без strict опечатки в именах переменных создают silent bugs.


Perl 5 и Raku

Raku (бывший Perl 6) — отдельный язык, не совместимый с Perl 5. В вакансиях "Perl" почти всегда означает Perl 5. В истории — хронология разветвления.


Порядок чтения

  1. История языка — контекст и CPAN.
  2. Первая программа — установка, strict, Hello World.
  3. Regex и файлы (статьи 2–3, когда появятся).
  4. CPAN и модули (статья 4).

Для однострочников в shell параллельно полезен Bash intro.


Кому подойдёт раздел

СценарийЗачем Perl
Поддержка legacy CGI/mod_perlЧитать и патчить без переписывания
Log analysis на старых серверах-ne, -pe, regex
Bioinformatics legacyBioPerl модули
DevOps archaeologyСкрипты в /usr/local/bin

Для новых CLI-утилит и автomation чаще выбирают Python или Go — но Perl-грамотность экономит время при инцидентах.


Связанные разделы

РазделСвязь
PythonПреемник для скриптов и ML
BashPipeline и glue
PHPCGI-эра web рядом с Perl
Черновик

Статьи 2–6 в плане. Черновики истории и первой программы уже дают рабочий старт с strict и однострочниками.


Современный Perl 5 (5.36+)

Signatures (experimental/stable по версии) сокращают boilerplate:

use v5.36;

sub greet ($name) {
return "Hello, $name";
}

say вместо print ... "\n"; state для lexical static; refactoring через Perl::Critic и Perl::Tidy.

FeatureМодуль / pragma
Strict varsuse strict
Warningsuse warnings
Signaturesuse v5.36 или use experimental 'signatures'
OO без boilerplateMoo, Moose

Однострочники и CLI

Perl славится one-liners для администрирования:

perl -ne 'print if /ERROR/' access.log
perl -pe 's/foo/bar/g' file.txt
perl -lane '$F[0]++' names.txt # uniq -c style

Флаги: -n (loop without print), -p (print), -a (autosplit), -l (chomp \n). Для новых pipeline часто достаточно Bash, но legacy серверы всё ещё содержат Perl glue.


Безопасность при работе с legacy

РискМера
SQL injectionPrepared statements через DBI
Command injectionТрехаргументный open или IPC::Run
Tainted data (legacy)-T taint mode (редко в новом коде)
Устаревшие модулиcpan-outdated, audit CPAN deps

Не копируйте однострочники из Stack Overflow без понимания контекста scalar/list.


PSGI и веб (обзор)

PSGI — интерфейс между Perl web app и сервером (аналог WSGI в Python):

my $app = sub {
my $env = shift;
return [200, ['Content-Type' => 'text/plain'], ['Hello']];
};

Plack — reference implementation; Mojolicious — full-stack framework. Legacy CGI .pl в cgi-bin — типичный объект миграции на PHP или Python, но поддержка требует знания Perl.


Bioinformatics и CPAN

BioPerl — экосystem модулей для последовательностей, BLAST, форматы GenBank. Много legacy lab scripts на Perl 5.10–5.20. Обновление — осторожно с $ sigils и deprecated features.


Perl и Python для новых скриптов

ЗадачаPerlPython
Regex-heavy log parseСилён из коробкиre module
ML / data scienceСлабоpandas, numpy
DevOps greenfieldРедкоAnsible, scripts
Поддержка старого CGIPerlПереписывание

Раздел учит читать Perl; для новых проектов см. Python intro.


Чек-лист чтения legacy Perl

  • В начале файла есть use strict; use warnings;
  • Понятен контекст: scalar @array vs list (@a, @b)
  • Regex с флагами и capture $1, $2
  • Зависимости в cpanfile или Makefile.PL
  • Запуск через perl script.pl, не случайный sh script.pl

Дальше: историяпервая программа.


Однострочники Perl в production archaeology

ЗадачаКоманда
Строки с ERRORperl -ne 'print if /ERROR/' log
Замена in-placeperl -pi -e 's/old/new/g' *.conf
CSV 2-й столбецperl -lane 'print $F[1]' file.csv
Подсчёт uniqsort file | uniq -c (часто + Perl)

Perl часто живёт в Makefile и cron — знание -n/-p экономит часы.


CPAN — как устроен реестр

cpanm Carton
carton install # lock для Perl проекта
ИнструментРоль
cpanmУстановка модулей
CartonLock + local lib
PintoPrivate CPAN mirror
MetaCPANПоиск и документация

Perl и regex — preview статьи 3

if ($line =~ /^(\d{4}-\d{2}-\d{2})\s+(ERROR|WARN)\s+(.*)$/) {
my ($date, $level, $msg) = ($1, $2, $3);
}

Флаги /x (comments), /m (multiline), /s (dotall) — в полной статье по regex.


Когда читать Perl, а когда переписывать

СитуацияДействие
Скрипт 50 строк, cronПоддерживать на Perl
Модуль 5k+ строк, нет тестовПлан миграции на Python
BioPerl pipelineОставить Perl, изолировать env
Новый microservicePython/Go, не Perl

Модули и @INC (preview)

Perl ищет модули в @INC — список директорий. Локальная lib:

use lib './lib';
use MyApp::Config;

Установка в site_perl через cpanm предпочтительнее use lib в production.


Perl::Critic и качество кода

Perl::Critic — линтер по best practices (severity 1–5). Запуск:

perlcritic script.pl

Полезно при code review legacy без полного переписывания.


Carton и lockfile (preview)

Carton фиксирует версии CPAN-модулей per project — аналог bundler. Файл cpanfile.snapshot коммитится в git для воспроизводимых deploy.


Краткий FAQ раздела

Perl или Python для нового скрипта? Python — intro; Perl — legacy support.

С чего начать? 7.md1.md.