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
Поиск модулей:
Популярные модули 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