Перейти до вмісту

Perl

Матеріал з K2 ERP Wiki

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;

Суть array: масив зберігає список значень і зручний для рядків файлу, аргументів, результатів пошуку й наборів даних.

Правило: 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.
Module у Perl — файл із reusable кодом.
У 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(

! }

Контекст

Hash — key-value структура.
Приклад:
<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: регулярні вирази виступає як природною частиною мови, тому Perl дуже зручна для пошуку, заміни й парсингу тексту. Perl і Ruby мають спільну історичну близькість у scripting і text processing. * CPAN.

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 = (