Skip to content

Perl

Общее описание

Perl (Practical Extraction and Report Language) — это высокоуровневый, динамически типизированный язык программирования с открытым исходным кодом. Разработан Ларри Уоллом в 1987 году как инструмент для обработки текста и создания отчетов. Со временем стал универсальным языком, подходящим для сетевых программ, системного администрирования, веб-разработки, биоинформатики и многого другого.

Основные особенности:

  • Мощные возможности работы с регулярными выражениями
  • Поддержка процедурного, объектно-ориентированного и функционального стилей программирования
  • Кроссплатформенность (Windows, Linux, macOS)
  • Богатая экосистема модулей (CPAN)
  • Высокая эффективность при работе с текстом и файлами
  • Интеграция с базами данных, сокетами, GUI и т.д.

Версии Perl

Версия Год выпуска Особенности
Perl 4 1987 Первая популярная версия
Perl 5 1994 ООП, модули, улучшенные регулярные выражения
Perl 6 (Raku) 2019 Новый язык на основе Perl, но несовместимый обратно

Примечание: Perl 6 был переименован в Raku, чтобы избежать путаницы. Perl 5 продолжает активно развиваться.


Установка Perl

На Ubuntu/Debian:

sudo apt update
sudo apt install perl

Проверка:

perl -v

На CentOS/RHEL:

sudo yum install perl

или через Perlbrew (менеджер версий):

curl -L https://install.perlbrew.pl | bash
perlbrew init
perlbrew install perl-5.38.0
perlbrew switch perl-5.38.0

На Windows:

Скачайте установщик с https://strawberryperl.com

На macOS через Homebrew:

brew install perl

Синтаксис Perl

Hello World:

print "Hello, World!\n";

Запуск:

perl hello.pl

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

# Однострочный комментарий

=begin comment
Многострочный
комментарий
=cut

Переменные:

my $name = "Alice";     # скаляр
my @names = ("Alice", "Bob", "Charlie");  # массив
my %person = (name => "Alice", age => 30); # хэш

Условия:

if ($age >= 18) {
    print "Adult\n";
} elsif ($age > 12) {
    print "Teenager\n";
} else {
    print "Child\n";
}

Циклы:

for my $i (1..5) {
    print "$i\n";
}

while ($count < 10) {
    print "$count\n";
    $count++;
}

Функции:

sub greet {
    my ($name) = @_;
    return "Hello, $name";
}

print greet("Bob");

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

my $text = "Hello, world!";
if ($text =~ /world/) {
    print "Match found\n";
}

Работа с файлами

open(my $fh, '<', 'input.txt') or die "Cannot open file: $!";
while (my $line = <$fh>) {
    print $line;
}
close($fh);

open(my $out, '>', 'output.txt');
print $out "New content\n";
close($out);

Работа с данными

Списки:

my @fruits = ('apple', 'banana', 'cherry');
push @fruits, 'orange';

Хэши:

my %user = (
    name => 'John',
    role => 'admin'
);
print $user{name};

Работа с JSON

use JSON;

my $data = { name => "Alice", age => 30 };
my $json = encode_json($data);
my $decoded = decode_json($json);

Работа с базами данных

DBI + MySQL:

use DBI;

my $dbh = DBI->connect("DBI:mysql:database=test;host=localhost", "user", "password");

my $sth = $dbh->prepare("SELECT * FROM users");
$sth->execute();

while (my $row = $sth->fetchrow_hashref) {
    print "$row->{username}\n";
}

CPAN — менеджер пакетов

CPAN (Comprehensive Perl Archive Network) — это репозиторий тысяч модулей Perl, доступных для загрузки и использования.

Установка модуля:

cpan install LWP::UserAgent

или через cpanm:

cpanm JSON

Поиск модулей:

https://metacpan.org


Популярные модули Perl

Модуль Назначение
LWP::UserAgent HTTP-запросы
Moose Современная система ООП
Dancer / Catalyst Веб-фреймворки
Text::Template Шаблонизаторы
Parallel::ForkManager Параллельные процессы
Log::Log4perl Расширенное логирование
Test::More Юнит-тестирование
Net::FTP / Net::SSH Работа с FTP/SSH
DateTime Работа с датами и временем

Web-разработка

CGI (Common Gateway Interface):

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<h1>Hello from CGI</h1>";

Dancer Framework:

use Dancer2;

get '/' => sub {
    return "Hello, Dancer!";
};

start;

Catalyst Framework:

Более мощный MVC-фреймворк:

catalyst.pl MyApp
cd MyApp
script/myapp_server.pl

Безопасность

Рекомендации:

  • Использовать use strict; use warnings;
  • Экранировать входные данные
  • Не запускать код от непроверенных источников
  • Использовать Taint mode (-T) для CGI-скриптов
  • Использовать безопасные методы работы с файлами и БД

Производительность и оптимизация

Инструменты:

  • Benchmark — сравнение производительности
  • Devel::NYTProf — профайлер
  • Inline::C — вызов C-кода
  • XS — написание модулей на C для ускорения

Логирование и диагностика

Использование Log::Log4perl:

use Log::Log4perl qw(get_logger);
Log::Log4perl->init('log.conf');

my $logger = get_logger();
$logger->info("Application started");

Файл log.conf:

log4perl.rootLogger=DEBUG, Screen
log4perl.appender.Screen=Log::Log4perl::Appender::Screen
log4perl.appender.Screen.layout=PatternLayout
log4perl.appender.Screen.layout.ConversionPattern=%d %p %m%n

Тестирование

Юнит-тестирование:

  • Test::Simple
  • Test::More
  • Test::Harness

Пример:

use Test::More tests => 1;

is(2+2, 4, 'Basic math works');

Запуск:

prove test.pl

Документирование

Perl использует формат POD (Plain Old Documentation):

=head1 NAME

MyModule - Just an example module

=head1 SYNOPSIS

    use MyModule;

=head1 DESCRIPTION

This is a simple module for demonstration.

=cut

package MyModule;
1;

Генерация HTML или man-страниц:

pod2html Module.pm > Module.html

Сообщество и поддержка

Официальные источники: