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