Perl
package MyApp::Utils;
Перевірка:
} Витягування груп:
</syntaxhighlight>
open my $fh, "<", "data.txt" or die "Cannot open file: $!";
while (my $line = <$fh>) {
* text processing;
* parsing;
* регулярних виразів;
* системного адміністрування;
* DevOps-скриптів;
* обробки логів;
* one-liners;
* automation;
* ETL;
* legacy web systems;
* CGI;
* bioinformatics;
* network scripts;
* тестових інструментів;
* швидких утиліт;
* glue code між системами. Але в практиці Perl назви packages часто відповідають шляхам файлів модулів.== Subroutines ==
}
{| class="wikitable"
my $result = add(2, 3);
my $count = 10;
Приклад через `system`:
Приклад:
perl -ne 'print if /error/i' app.log
! use strict;
|-
| Складна логіка
| Зручніша
| здатна оперативно стати складною
|-
| Text processing
| Дуже сильна
| Сильна через grep/sed/awk
|-
| Структури даних
| Arrays, hashes, references
| Обмежені
|-
| Портативність
| Добра за наявності Perl
| Залежить від shell і команд
|-
| One-liners
| Дуже сильні
| так само сильні
|}
'''Підказка:''' у Perl-прикладах критично звертати увагу на context, references, regex, перевірку помилок і читабельність. Perl
use warnings; close $fh; Приклад запуску:
Reference — це посилання на іншу структуру даних. use warnings; use strict; use strict;
- нових web-проєктів без legacy-вимог;
- AI/ML;
- frontend;
- mobile development;
- великих команд без Perl-досвіду;
- проєктів, де важлива широка сучасна кадрова база;
- систем, де Python, Go, JavaScript або Java краще вписуються в стек;
- навчання програмуванню з нуля для більшості сучасних команд.</syntaxhighlight>
users => [
Висновок: якщо shell-скрипт стає занадто складним через умови, масиви, parsing і регулярні вирази, Perl здатна бути кращим варіантом. * Документація DBI. Вона стала дуже популярною в Unix/Linux-середовищі, web-розробці 1990-х років, CGI-скриптах, системному адмініструванні й автоматизації. Perl — це динамічна скриптова мова програмування, відома сильною підтримкою текстової обробки, регулярних виразів, системної автоматизації, роботи з файлами, one-liners, DevOps-скриптів і legacy-систем. Потрібно обережно працювати з:
use strict і use warnings
</syntaxhighlight>
for my $key (keys %user) {
'''Практична роль:''' postfix-умови в Perl зручні для коротких перевірок і простих one-liners. close $out;
age => 25,
=== Фільтрація логів ===
Perl дає можливість створювати вкладені структури. my ($a, $b) = @_;
],
Perl здатна бути дуже продуктивною мовою для досвідченого розробника. has name => (
<syntaxhighlight lang="perl">
'''Практична порада:''' Perl варто обирати, якщо задача переважно текстова, файлова, системна або пов’язана з існуючим Perl-кодом.== Testing ==
'''Subroutine''' — функція або процедура в Perl. Perl
$count--;
== Perl 6 і Raku ==
<div style="background:#eef2ff; border-left:6px solid #4f46e5; padding:12px; margin:12px 0;">
system("ls", "-la");
</div>
Типові задачі:
== Perl і Unix pipeline ==
* PostgreSQL;
* MySQL/MariaDB;
* SQLite;
* Oracle;
* SQL Server;
* іншими базами через драйвери DBD. Приклади:
Без `=~` regex часто застосовується до спеціальної змінної `$_`. Для підтримуваного коду ці директиви майже обов’язкові.
Заміна: </syntaxhighlight> </syntaxhighlight>
Він застосовується для для:
Arrays
`while`:
alice => "admin",
}
Увага: Perl 5 і Raku — різні мови. foreach my $item (@items) {
Коли Perl здатна бути невдалим вибором
конкурентні переваги Perl
<syntaxhighlight lang="perl">
</div>
Файл модуля зазвичай завершується `1;`, щоб повернути true value при завантаженні.</div>
{| class="wikitable"
<syntaxhighlight lang="perl">
Аргументи передаються через спеціальний масив `@_`.<syntaxhighlight lang="perl">
</div>
`for`:
perl -T script.pl
}
== References ==
}
}
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
Без `chomp` обробка рядків із файлів часто дає зайві перенесення. my $count = @items;
<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">
'''критично:''' класичний Perl OOP дуже гнучкий, але потребує дисципліни. Приклад hash reference:
<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">
print "$i\n";
Висновок: Perl часто сильніший у коротких текстових скриптах і legacy automation, а Python частіше обирають для нових універсальних проєктів. Perl має сильну культуру тестування. close $fh;
while (my $line = <STDIN>) {
return $self->{name};
Запис у файл:
'''Увага:''' references виступає як ключем до складних структур Perl, але синтаксис `->` здатна бути незвичним для новачків. close $fh;
get "/" => sub {
== Perl і біоінформатика ==
start;
app->start;
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
<syntaxhighlight lang="perl">
print $user {name}, "\n";
print "$count\n";
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
"",
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
Простий приклад:
my ($a, $b) = @_;
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
print "$line\n";
</div>
for my $word (sort keys %count) {
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
return $a + $b;
my $company = {
prove -v t/
Приклад: вивести рядки з помилками:
<syntaxhighlight lang="perl">
sub divide {
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
- вкладених структур;
- передачі великих даних без копіювання;
- об’єктів;
- складних hash/array структур;
- модулів;
- callbacks.== CPAN ==
!== Об’єктно-орієнтований Perl ==
Ключові історичні напрями:
Perl дуже зручна для роботи з файлами. `chomp` видаляє символ нового рядка з кінця рядка.
</syntaxhighlight>
Критично: Perl-скрипт, який запускає shell-команди або функціонує з користувацьким input, має перевіряти й екранувати інформаційні дані. * Матеріали щодо Perl security, taint mode, регулярних виразів і системної автоматизації. use strict;
}
У Perl важливе поняття context. print "Name: $name, Age: $age, Status: $status\n";
</syntaxhighlight>
my $c = shift;
use Dancer2;
perl -pi -e 's/old/new/g' file.txt
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
return "Hello from Dancer";
use warnings;
print "Looks like email\n";
my @items = ("A", "B", "C");
!</div>
print "$item\n";
Поширені помилки:
'''Головне правило для старту:''' майже кожен Perl-скрипт варто починати з `use strict;` і `use warnings;`. '''Практична роль:''' Perl став популярним у біоінформатиці через сильну роботу з текстовими форматами й швидке написання pipeline-скриптів. Ruby
Perl добре підходить для задач, які запускаються через cron або scheduler. `undef` означає невизначене значення. ! * Документація Mojolicious. У legacy-системах майже завжди йдеться саме про Perl 5. Модулі допомагають:
</div>
`bless` прив’язує reference до package, перетворюючи його на об’єкт.== Загальний SEO-опис ==
use Mojolicious::Lite;
my $json = encode_json($data);
`foreach`:
'''Суть sigils:''' символ перед змінною показує, з яким типом контейнера або значення функціонує код.<div style="background:#fff7ed; border-left:6px solid #fb923c; padding:12px; margin:12px 0;">
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
== Nested data structures ==
Заміна тексту:
Perl була розроблена Ларрі Воллом як практична мова для обробки текстів, звітів і системних задач.
</syntaxhighlight>
- parsing FASTA/FASTQ;
- обробка sequence data;
- text-heavy research files;
- pipeline scripts;
- legacy bioinformatics tools;
- conversion scripts;
- data cleanup;
- report generation. Практична роль: коли говорять про Perl у більшості production і legacy-контекстів, зазвичай мають на увазі Perl 5.== Modules ==
die "Division by zero" if $b == 0;
`warnings` показує попередження про потенційні помилки. Dancer — легкий web framework для Perl. * Learning Perl. Приклад ідеї з Moo:
for my $row (@$rows) {
Практичний висновок: awk і sed чудові для простих pipeline-задач, але Perl зручніший, коли потрібна повноцінна логіка програми. * потужні регулярні вирази;
- сильна текстова обробка;
- швидке написання скриптів;
- arrays і hashes;
- CPAN;
- one-liners;
- добра інтеграційні функції ERP з Unix;
- зручна робота з файлами;
- системна автоматизація процесів;
- legacy-сумісність;
- DBI;
- testing ecosystem;
- гнучкість;
- підходить для glue code.
$text =~ s/world/Perl/;
</syntaxhighlight>
Порахувати рядки:
{ RaiseError => 1, AutoCommit => 1 }
Складність Perl: context робить мову дуже виразною, але здатна бути неочевидним для новачків.
my $data = { name => "Alice", age => 25 };
print "Contains digits\n";Головне правило: хороший Perl-код має бути не лише коротким, а й читабельним, перевіреним, модульним і безпечним.
);
print $company->{users}->[0]->{name}, "\n";
required => 1,
Висновок
print $items [1], "\n";
}
my %user = ( </syntaxhighlight>
perl hello.pl
print "Adult\n" if $age >= 18;
Він оптимізує виявляти небезпечне використання даних, отриманих ззовні. Perl часто замінює складні shell scripts.</div>
<syntaxhighlight lang="perl">
</div>
my $text = "user@example.com";
print $user_ref->{name}, "\n";
print "$count\n";
Вони додають:
'''Практична роль:''' Perl виступає як класичним інструментом Unix/Linux-адміністрування, особливо для текстових і файлових задач. }
'''Суть subroutine:''' sub дає можливість винести повторювану логіку в окрему функцію й зробити код підтримуванішим. print "$json\n";
);
Приклад array reference:
Приклад:
<syntaxhighlight lang="bash">
системного адміністрування забезпечується через Perl довгий час була однією з головних мов; так само реалізовано web CGI, обробки логів, автоматизації Unix/Linux-задач, генерації звітів і швидкого написання утиліт. * обробка логів;
* пошук pattern у файлах;
* backup scripts;
* renaming files;
* monitoring helpers;
* parsing command output;
* generating reports;
* file cleanup;
* user management scripts;
* cron jobs;
* integration scripts. * Modern Perl.<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">
== Умови ==
<syntaxhighlight lang="bash">
'''Історична роль:''' Perl був однією з головних мов ранньої web-розробки через CGI, але для нових web-проєктів зазвичай обирають сучасніші фреймворки й підходи. * Документація Test::More і TAP.== Приватність даних ==
=== Підрахунок частоти слів ===
use strict;
== Обмеження Perl ==
'''Практична користь:''' Perl-скрипт часто виступає як простим і надійним способом цифровізувати регулярну системну або офісну задачу. * розділяти код;
* повторно використовувати логіку;
* підключати бібліотеки;
* організовувати packages;
* тестувати частини системи. "SELECT id, name FROM users",
print "$row->{id}: $row->{name}\n";
'''Суть one-liners:''' Perl можна використовувати як потужний command-line інструмент для швидкої обробки тексту без окремого скриптового файлу. bob => "user",
use strict;
<syntaxhighlight lang="perl">
== chomp ==
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
print $items_ref->[0], "\n";
<syntaxhighlight lang="perl">
Встановлення модуля здатна виконуватися через CPAN-клієнти або інструменти на кшталт `cpanm`. Критерій
<div style="background:#fef2f2; border-left:6px solid #ef4444; padding:12px; margin:12px 0;">
!</div>
</div>
* command injection;
* небезпечний user input;
* SQL injection;
* file path traversal;
* permissions;
* secrets у скриптах;
* credentials;
* небезпечні regex;
* тимчасові файли;
* права запуску;
* CGI input;
* небезпечні CPAN-залежності.<syntaxhighlight lang="perl">
sub new {
'''CPAN''' або '''Comprehensive Perl Archive Network''' — великий репозиторій Perl-модулів. Навіть якщо нові проєкти часто обирають Python, Ruby, Go або JavaScript, Perl усе ще зустрічається в старих системах, автоматизації й інфраструктурних скриптах. Raku не виступає як без зусиль наступною версією Perl 5. Основні інструменти:
Прохід по hash:
</div>
};
my ($name, $age, $status) = split /,/, $line;
Коротка форма:
use strict;
}
Приклад:
if ($age >= 18) {
my $price = 19.99;
print "$count\n";
use Moo;
my $count = 3;
'''Практична роль:''' цикли Perl часто використовують для обробки рядків файлів, списків і потоків тексту. while ($count > 0) {
$user {status} = "active";
== Moose і Moo ==
'''Scalar''' — це одиничне значення. '''Практична роль:''' `chomp` виступає як однією з найчастіших команд під час обробки текстових файлів у Perl.<div style="background:#fff7ed; border-left:6px solid #fb923c; padding:12px; margin:12px 0;">
Perl підтримує об’єктно-орієнтований стиль, хоча його модель відрізняється від класичних мов. '''Практична роль:''' модулі перетворюють Perl-скрипти з одноразових файлів на підтримувану структуру коду.== Mojolicious ==
for my $i (1..5) {
age => 25,
</syntaxhighlight>
name => "Alice",
</syntaxhighlight>
CGI
undef
is(2 + 3, 5, "addition works"); print $output;
Правило: Perl-скрипт не повинен випадково друкувати, логувати або зберігати секрети й персональні інформаційні дані в незахищених місцях. Приклад:
- заміна складних shell scripts;
- потужні регулярні вирази;
- швидка обробка тексту;
- CGI web programming;
- CPAN-екосистема;
- системна автоматизація процесів;
- bioinformatics;
- legacy enterprise scripts.</syntaxhighlight>
- скаляри;
- масиви;
- хеші;
- references;
- modules;
- packages;
- регулярні вирази;
- об’єктний стиль;
- CPAN;
- потужну роботу з файлами;
- сумісність із великою legacy-екосистемою. Perl
Перша програма на Perl
chomp $line;
Висновок: Perl часто сильніший у системній автоматизації й текстовій обробці, Ruby — у web development і виразному об’єктному коді. use warnings; `use strict;` і `use warnings;` — базові захисні практики Perl. Запуск:
print divide(10, 2), "\n";
{ name => "Alice", role => "admin" },
my %roles = (
Perl має звичні цикли.
};
use warnings;
Оператор `=~` прив’язує регулярний вираз до змінної. Критерій
`strict` оптимізує уникати:
- `use strict;` вимагає дисциплінованого оголошення змінних;
- `use warnings;` вмикає попередження;
- `print` виводить текст;
- `\n` додає новий рядок. Perl здатна запускати зовнішні команди. Вона найкраще функціонує там, де потрібно оперативно й гнучко опрацьовувати файли, логи, регулярні вирази та системні задачі. Потрібно контролювати:
my @fields = ("Alice", 25, "active"); Головна думка: Perl — це мова практичної автоматизації й тексту.== bless ==
Основні конкурентні переваги Perl:
Taint mode — механізм Perl для безпечнішої роботи з зовнішнім input. * Документація Dancer2.== System administration == </syntaxhighlight> my $line = join ",", @fields;
Perl і Python
print $user {age}, "\n"; Один і той самий вираз здатна поводитися по-різному в:
print $fields [0], "\n";
</syntaxhighlight> Приклад: my $name = "alice";
</syntaxhighlight>
cat app.log | perl -ne 'print if /timeout/i' | sort | uniq -c Практична роль: Perl часто використовують саме для читання, фільтрації, перетворення й запису текстових файлів. for my $word (split /\s+/, $line) {
} else {
CGI — історичний спосіб запуску web-скриптів на сервері. * Perl Maven. Для нових великих систем її часто порівнюють із Python, Go, JavaScript або Ruby, але для text processing і legacy automation Perl залишається важливим інструментом.</syntaxhighlight>
Perl популярна для one-liners — коротких команд у shell.== Perl 5 ==
Читання файлу: defined $value
print "Value is undefined\n";
use strict;
'''критично:''' `undef` не те саме, що порожній рядок або нуль.== Безпека Perl-скриптів ==
'''Суть OOP у Perl:''' об’єкт часто виступає як blessed reference, а методи — subroutines у package. ! '''Практична роль:''' вкладені hashes і arrays зручні для JSON-подібних даних, конфігурацій, API-відповідей і parsed structures. Окремо варто відзначити але потребує дисципліни: `strict`, `warnings`, зрозумілі імена, модулі, тести й обережність із regex і shell-командами. * невеликих web apps;
* REST API;
* internal tools;
* простих web-сервісів;
* прототипів.
</syntaxhighlight> </syntaxhighlight>
my %count;
Приклади задач на Perl
Match operator =~
Moo — легший варіант для простішого OOP.</syntaxhighlight>
<syntaxhighlight lang="perl">
!</div>
print if /error/i;
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
return $a + $b;
Використання:
print $out "Hello from Perl\n";
* `$` — scalar;
* `@` — array;
* `%` — hash;
* `&` — subroutine у деяких контекстах;
* `*` — typeglob у спеціальних сценаріях.<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">
DBI дає можливість працювати з:
Scalar здатна містити:
my $line = "Hello\n";
- attributes;
- constructors;
- type constraints;
- roles;
- method modifiers;
- cleaner object syntax;
- менше ручного boilerplate.== DBI ==
Практична роль: scalar — базова одиниця даних у Perl. Це здатна створити command injection. print $user->name, "\n";
Важлива ERP-платформа:
Пошук pattern:
Perl історично популярний у bioinformatics.
use warnings; Додавання елементів:
Простий приклад ідеї:
open my $fh, "<", "users.csv" or die "Cannot open file: $!";
while (my $line = <$fh>) {
name => "Example",
open my $fh, "<", "app.log" or die "Cannot open log: $!";
while (my $line = <$fh>) {
"dbi:SQLite:dbname=data.db",
Регулярні вирази
Packages
my $user_ref = {
my $dbh = DBI->connect(
Цикли
print "Content-Type: text/plain\n\n";
};
}
- щоденний звіт;
- обробка логів за ніч;
- експорт CSV;
- перевірка файлів;
- email notification;
- cleanup temporary directories;
- синхронізація даних;
- перевірка статусів;
- генерація HTML або текстових звітів. Приклад через backticks:
Тут регулярний вираз і `print` працюють із `$_`. Такий код здатна працювати, але бути майже непридатним для підтримки. my $output = `date`;
критично: Perl залишається корисним інструментом, але для нових великих систем вибір мови потрібно порівнювати з сучасним стеком команди.== Синтаксис ==
perl -ne '$count++; END { print "$count\n" }' file.txt
sub add {
</syntaxhighlight>
!</syntaxhighlight>
Типові помилки початківців
my $text = "abc123"; my @fields = split /,/, $line;
== Робота з системними командами ==
print "$line!";
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
get "/" => sub {
my $name = "Alice"; Використання: chomp $line;
done_testing();
};
</syntaxhighlight>
Помилка: писати Perl як набір “магічних” коротких виразів без структури. Приклад: my $text = "Hello world";
print "Found name: $1\n";
my @copy = @items;
my $age = 20;
- рядок;
- число;
- reference;
- undefined value;
- інші одиничні значення. use warnings;
Array — впорядкований список значень.</syntaxhighlight> ! chomp $line;
};
use strict;
my $line = "Name: Alice";
- Офіційна документація Perl. * perldoc. return $a / $b;
Простий приклад:
Perl застосовується для для:
}
'''Перевага:''' Perl дає можливість дуже оперативно написати скрипт для задачі, де вручну довелося б довго редагувати, шукати, фільтрувати або перетворювати текстові інформаційні дані. if ($text =~ /\d+/) {
<syntaxhighlight lang="bash">
Додавання значення:
'''Практична роль:''' TAP зробив Perl-тести простими, переносимими й зручними для автоматизації.== Perl і shell scripting ==
Коли варто використовувати Perl
|- | Історичний фокус | Text processing, sysadmin, CGI | Developer happiness, OOP, Rails |- | Web | CGI, Mojolicious, Dancer | Ruby on Rails, Sinatra |- | Синтаксис | Гнучкий і щільний | Виразний і читабельний |- | Legacy | Дуже багато системних скриптів | Багато Rails-застосунків |- | Основна асоціація | Automation і regex | Web development і DSL |}
print "$text\n";
my @items = ("A", "B", "C");
print "Hello from CGI\n";
my $self = {
}
|-
| Простий пошук і заміна
| Добре
| Дуже добре
|-
| Складні структури даних
| виступає як arrays, hashes, references
| Обмежено
|-
| Багатофайлова логіка
| Зручна
| Складніша
|-
| Скрипти
| Повноцінна мова
| Спеціалізовані інструменти
|}
'''Практична роль:''' Mojolicious показує, що Perl здатна використовуватися не лише для legacy CGI, а й для сучасніших web API і застосунків. Приклад:
* підтримки legacy Perl-систем;
* text processing;
* log analysis;
* one-liners;
* системної автоматизації;
* Unix/Linux scripts;
* quick data conversion;
* регулярних виразів;
* простих ETL;
* DBI scripts;
* bioinformatics legacy;
* CGI legacy;
* glue code;
* задач, де CPAN уже має потрібний компонент. Python
Perl має виразний, але іноді незвичний синтаксис. Для сучаснішого стилю часто використовують Moose, Moo або інші модулі. {| class="wikitable"
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
<syntaxhighlight lang="perl">
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
Приклад:
'''Небезпека:''' Perl швидко дає можливість написати код, який функціонує сьогодні, але через місяць його важко зрозуміти навіть автору. Scalar-змінна починається з `$`.<syntaxhighlight lang="perl">
* BioPerl;
* CPAN-модулі для science data;
* legacy research scripts. my $age = 25;
'''Практична роль:''' taint mode історично важливий для CGI і скриптів, які обробляють недовірені інформаційні дані. * Programming Perl. Запуск:
my $items_ref = ["A", "B", "C"];
name => "Alice",
</div>
</div>
* логами;
* email;
* персональними даними;
* токенами;
* паролями;
* database credentials;
* backup files;
* тимчасовими файлами;
* CSV exports;
* web input;
* конфігураційними файлами. Shell
'''критично:''' Perl має велику legacy-базу.<div style="background:#fff7ed; border-left:6px solid #fb923c; padding:12px; margin:12px 0;">
== Scalars ==
<syntaxhighlight lang="perl">
<syntaxhighlight lang="perl">
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
== Хороші практики Perl ==
Perl-скрипти часто працюють із файлами, системними командами, логами й даними, тому безпека важлива.</div>
'''Практична роль:''' Moose і Moo роблять об’єктний Perl більш структурованим і зручним для великих проєктів. use DBI;
print "$name role: $roles {$name}\n";
return bless \%args, $class;
use strict;
Можливі проблеми:
name => "Alice",
} </syntaxhighlight>
Джерела
- `cat`;
- `grep`;
- `awk`;
- `sed`;
- `sort`;
- `uniq`;
- `find`;
- `xargs`. awk/sed
</syntaxhighlight>
TAP
print "Hello, world!\n"; print $items [0], "\n";
TAP або Test Anything Protocol — простий формат виводу тестів, який став важливою частиною Perl-екосистеми. print "Minor\n";
Приклад:
Критично: не можна без перевірки передавати користувацький input у shell-команди. критично: `$_` робить Perl-код коротким, але надмірне використання здатна зменшити читабельність. Однією з особливостей виступає як sigils — спеціальні символи перед змінними. Вона особливо сильна там, де потрібно багато працювати з текстом, файлами, регулярними виразами й системними командами.
open my $out, ">", "output.txt" or die "Cannot write file: $!";
Приклад:
TAP дає можливість:
if ($line =~ /Name:\s+(\w+)/) {
</div>
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
== File handling ==
use warnings;
<syntaxhighlight lang="perl">
print "$line\n";
</div>
CPAN містить модулі для:
}
</div>
* web applications;
* REST API;
* real-time apps;
* WebSockets;
* prototypes;
* internal tools;
* modern Perl web development. '''Практична користь:''' split і join — базові інструменти для CSV-подібних файлів, логів і простих текстових форматів. * web development;
* databases;
* JSON;
* XML;
* testing;
* networking;
* parsing;
* system administration;
* email;
* logging;
* dates;
* security;
* bioinformatics;
* automation. }
package User;
=== Читання CSV-подібного файлу ===
'''Критично:''' Perl без `strict` і `warnings` здатна дозволити помилки, які важко знайти. Критерій
|-
| Основна історична ніша
| Text processing, sysadmin, CGI, automation
| General-purpose programming, automation, data science, web, AI
|-
| Синтаксис
| Дуже гнучкий, іноді щільний
| Більш явний і структурований
|-
| Регулярні вирази
| Дуже природні в мові
| Потужні через компонент `re`
|-
| ERP-платформа
| CPAN, legacy scripts
| Дуже широка сучасна ERP-платформа
|-
| Нові проєкти
| Рідше
| Частіше
|}
<syntaxhighlight lang="perl">
print "$name is $age years old\n";
my @items = ("A", "B", "C");
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
`join` об’єднує список у рядок. my $line = "Alice,25,active";
=== Hash lookup ===
1;
print $line if $line =~ /error/i;
$count {lc $word}++;
== Спеціальна змінна $_ ==
Приклад:
<syntaxhighlight lang="perl">
* `Test::More`;
* `prove`;
* TAP;
* `Test::Simple`;
* `Test::Exception`;
* `Test::Deep`;
* `Test::MockModule`. '''Практична роль:''' Dancer дає простий DSL для web routes і невеликих web-застосунків на Perl. Рекомендовано:
{ name => "Bob", role => "user" },
* складна читабельність погано написаного коду;
* багато стилів написання;
* менша популярність у нових проєктах;
* legacy-репутація;
* щільний синтаксис;
* неочевидний context;
* спеціальні змінні можуть заплутувати;
* OOP у базовому Perl менш очевидний;
* технічна підтримка старих скриптів здатна бути складною;
* менша кадрова база, ніж у Python або JavaScript;
* сучасні web/AI напрями частіше обирають інші мови. Perl доречно використовувати для:
'''Суть `=~`:''' оператор показує, до якого саме тексту застосовується pattern. Perl здатна бути проміжним фільтром між командами:
Простий приклад:
<syntaxhighlight lang="perl">
== Perl і Ruby ==
Perl часто порівнюють із Python. Для перевірки краще використовувати `defined`. Hash-змінна починається з `%`.{{SEO
|title=Perl — мова програмування для скриптів, текстової обробки, автоматизації, DevOps і legacy-систем
|description=Perl — Wiki-стаття про динамічну скриптову мову програмування, відому потужною роботою з текстом, регулярними виразами, системним адмініструванням і автоматизацією. Розглянуто Perl 5, CPAN, синтаксис, scalars, arrays, hashes, references, modules, packages, регулярні вирази, file handling, one-liners, CGI, Mojolicious, DBI, тестування, переваги, обмеження і хороші практики.
|keywords=Perl, мова програмування Perl, Perl programming language, Perl 5, CPAN, скриптинг, регулярні вирази, text processing, automation, DevOps, system administration, one-liners, scalar, array, hash, references, modules, packages, DBI, CGI, Mojolicious, Dancer, testing, TAP, програмування
|alternativeTo=ручна обробка текстових файлів; складні shell-скрипти; ручна автоматизація системних задач; одноразові текстові трансформації без коду; застарілі CGI-рішення без структури; регулярні задачі адміністрування без скриптів; ручний аналіз логів; прості ETL-операції без автоматизації
}}
<syntaxhighlight lang="perl">
);
Приклад:
Індексація масивів починається з 0.У scalar context масив повертає кількість елементів. "",
</div>
use JSON;
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
- завжди використовувати `use strict;`;
- завжди використовувати `use warnings;`;
- оголошувати змінні через `my`;
- писати зрозумілі імена;
- не зловживати спеціальними змінними;
- уникати надмірно щільних one-liners у production;
- розділяти код на modules;
- писати тести;
- перевіряти помилки відкриття файлів;
- використовувати lexical filehandles;
- обережно запускати shell-команди;
- використовувати placeholders у SQL;
- документувати складні регулярні вирази;
- форматувати код;
- не зберігати secrets у скриптах. Увага: `package` — це namespace, а не файл сам по собі.</syntaxhighlight>
my $name = "Alice";
bless $self, "User";
У цьому прикладі:
- scalar context;
- list context;
- void context. Perl — це практична скриптова мова програмування, яка стала відомою через сильній текстовій обробці, регулярним виразам, системній автоматизації, one-liners, CPAN і широкій legacy-базі. Perl здатна бути не найкращим вибором для:
'''Moose''' — потужна об’єктна платформа для Perl.<syntaxhighlight lang="perl">
Perl 5 має:
{ Slice => {} }
Приклад:
</div>
'''Перевага:''' Perl має зрілу testing-культуру, особливо через TAP і модулі Test::*. Це окрема мова з власним дизайном, типами, граматиками, concurrency-моделлю й екосистемою. Критерій
chomp $line;
Perl часто використовують як потужнішу альтернативу awk і sed. Приклад:
}
Приклад:
* не використовувати `strict` і `warnings`;
* випадково створювати глобальні змінні;
* плутати scalar і list context;
* неправильно працювати з references;
* забувати `chomp`;
* плутати `$array [0]` і `@array`;
* писати занадто складні regex без пояснення;
* не перевіряти `open`;
* передавати input у shell без перевірки;
* використовувати `$_` там, де краще явна змінна;
* створювати unreadable one-liners;
* ігнорувати encoding;
* не писати тести. ! Основні sigils:
'''Mojolicious''' — сучасний Perl web framework. use strict;
'''Регулярні вирази''' — одна з найсильніших сторін Perl. my $value;
Reference потрібні для:
Perl часто використовують для системного адміністрування. if (!defined $value) {
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
* запускати тести;
* збирати результати;
* інтегрувати різні test runners;
* бачити pass/fail;
* працювати з CI.
my $rows = $dbh->selectall_arrayref(
! }
Контекст
Приклад:
<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">
if (exists $roles {$name}) {
my ($self) = @_;
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
push @items, "D";
`$_` — спеціальна змінна за замовчуванням у Perl. my $last = pop @items;
'''Практична роль:''' DBI виступає як важливою частиною Perl-екосистеми для database scripts, reporting і backend legacy-систем. Приклад:
1;
while (<STDIN>) {
my ($class, %args) = @_;
'''Практична роль:''' hash — одна з найкорисніших структур Perl для конфігурацій, лічильників, lookup-таблиць і парсингу даних. age => 25,
Історично існував проєкт Perl 6, який згодом став окремою мовою '''Raku'''. '''Головна перевага:''' Perl дуже оперативно вирішує практичні задачі тексту, файлів, логів і автоматизації. Perl
<syntaxhighlight lang="perl">
print "$word: $count {$word}\n";
'''Package''' задає namespace у Perl.</div>
</div>
'''Практична порада:''' Perl особливо корисний, коли `grep`, `sed` або `awk` уже стають занадто незручними для складнішої логіки. sub add {
Perl підтримує `if`, `elsif`, `else`.== історія продукту Perl ==
is => "ro",
print "Adult\n";
Perl має обмеження.== split і join ==
<syntaxhighlight lang="perl">
<syntaxhighlight lang="perl">
== Perl і регулярна автоматизація процесів ==
'''Перевага CPAN:''' Perl має одну з найстаріших і найширших бібліотечних екосистем для практичних задач автоматизації.<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
}
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
Perl довгий час був дуже популярним для CGI. name => "Alice",
Dancer підходить для:
=== Функція з перевіркою аргументів ===
`split` розбиває рядок на частини. Вона добре підходить для логів, файлів, parsing, Unix/Linux scripts, database reports, glue code і підтримки старих систем.<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
}
Приклад:
my $user = User->new(name => "Alice");
<syntaxhighlight lang="perl">
print "$result\n";
основна й найпоширеніша гілка Perl, яка десятиліттями використовувалась у production виступає ключовою рисою Perl 5. print "$key = $user {$key}\n"; use warnings;
== Hashes ==
Див. так само
== One-liners ==
</div>
1;
);
<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">
$c->render(text => "Hello from Mojolicious");
package User; </syntaxhighlight>
Dancer
Perl часто описують як мову, яка поєднує функції ERP shell scripting, awk, sed, C і високорівневих структур даних. my @items = ("A", "B", "C"); Приклад:
} </syntaxhighlight> </syntaxhighlight>
if ($text =~ /@/) {
use warnings;
Taint mode
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
Приклад використання модуля:
== Perl і awk/sed ==
<syntaxhighlight lang="perl"> sub name {
Perl-скрипти можуть опрацьовувати чутливі файли, логи, персональні інформаційні дані й credentials. Array-змінна починається з `@`.}
Тематичні мітки
- випадкових глобальних змінних;
- помилок у назвах змінних;
- небезпечних symbolic references;
- частини неочевидної поведінки. DBI — стандартний підхід Perl для роботи з базами даних. Основна ідея: Perl розроблена для практичної автоматизації: оперативно прочитати текст, знайти pattern, перетворити інформаційні дані, обробити файли й виконати системну задачу. my ($a, $b) = @_;
);
use warnings; <syntaxhighlight lang="perl">
use Test::More; } Perl добре поєднується з Unix pipeline. my %user = (
- Програмування
- Мова програмування
- Скриптова мова
- Shell scripting
- Python
- Ruby
- PHP
- Awk
- Sed
- Регулярні вирази
- CPAN
- CGI
- Mojolicious
- Dancer
- DBI
- Unix
- Linux
- Автоматизація
- DevOps
- Логування
- Налагодження коду
- Безпека застосунків
);