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

Perl

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

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 часто сильніший у системній автоматизації й текстовій обробці, Ruby — у web development і виразному об’єктному коді.; Навіть якщо нові проєкти часто обирають Python, Ruby, Go або JavaScript, Perl усе ще зустрічається в старих системах, автоматизації й інфраструктурних скриптах.; * Learning Perl.; Практична користь: Perl-скрипт часто є собою простим і надійним способом автоматизувати регулярну системну або офісну задачу.;
!; Вона найкраще функціонує там, де потрібно оперативно й гнучко обробляти файли, логи, регулярні вирази та системні задачі.;

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};
package User; TAP надає можливість: `use strict;` і `use warnings;` — базові захисні практики Perl.; {| class="wikitable"
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`.;
  • завжди використовувати `use strict;`;
  • завжди використовувати `use warnings;`;
  • оголошувати змінні через `my`;
  • писати зрозумілі імена;
  • не зловживати спеціальними змінними;
  • уникати надмірно щільних one-liners у production;
  • розділяти код на modules;
  • писати тести;
  • перевіряти помилки відкриття файлів;
  • використовувати lexical filehandles;
  • обережно запускати shell-команди;
  • використовувати placeholders у SQL;
  • документувати складні регулярні вирази;
  • форматувати код;
  • не зберігати secrets у скриптах.;

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

Коли варто використовувати Perl

my $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";
  • вкладених структур;
  • передачі великих даних без копіювання;
  • об’єктів;
  • складних hash/array структур;
  • модулів;
  • callbacks.; if (!defined $value) {

Приклад запуску:

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 ==
Практична роль: Mojolicious показує, що Perl має змогу використовуватися не лише для legacy CGI, а й для сучасніших web API і застосунків.;

</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>
Суть OOP у Perl: об’єкт часто є собою blessed reference, а методи — subroutines у package.; Практична роль: Perl часто використовують саме для читання, фільтрації, перетворення й запису текстових файлів.; Вона стала дуже популярною в Unix/Linux-середовищі, web-розробці 1990-х років, CGI-скриптах, системному адмініструванні й автоматизації.;

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";

Суть sigils: символ перед змінною показує, з яким типом контейнера або значення функціонує код.;
== 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]]
* [[Логування]]
* [[Налагодження коду]]
* [[Безпека застосунків]]