🐪 Perl

Скриптовый язык для текста и автоматизации: скаляры, массивы, хэши, регулярки.

Шпаргалки · Программирование · #perl #scripting

IDE и запуск

VS Code, Padre, любой текстовый редактор. perl script.pl, одной строкой perl -e 'print "hi\n"'. Пакеты: CPAN (cpanm Module::Name). Начало файла: use strict; use warnings;.

Типы данных

Тип задаётся сигилом:

my $n = 1;  my $s = "a";            # $ скаляр (число, строка, ссылка)
my @a = (1, 2, 3);                   # @ массив
my %h = (a => 1, b => 2);            # % хэш
my $ref = \@a;  my $href = {x => 1}; # ссылки
undef

Элемент: $a[0], $h{a}, $ref->[0], $href->{x}.

Операторы

+ - * / % **, . (склейка), x (повтор), == != (числа), eq ne lt gt (строки), <=>, cmp, && || ! (и and or not), // (defined-or), =~ (регулярка).

Циклы

for my $i (1..3) { print "$i\n"; }
foreach my $x (@a) { }
while (my $line = <STDIN>) { chomp $line; }
last; next;

Подпрограммы

sub add { my ($a, $b) = @_; return $a + $b; }
my $sq = sub { $_[0] ** 2 };

Встроенные

print, length, substr, index, join, split, push, pop, shift, sort, map, grep, keys, values, exists, sprintf, open, die, time.

Регулярные выражения

if ($s =~ /(\d+)-(\d+)/) { print "$1 $2\n"; }
(my $t = $s) =~ s/foo/bar/g;
my @w = $s =~ /\w+/g;

Асинхронность

fork, threads, AnyEvent, Mojo::IOLoop, Parallel::ForkManager.

Коллекции

@a = sort { $a <=> $b } @a;, my @sq = map { $_ ** 2 } @a;, my @ev = grep { $_ % 2 == 0 } @a;, scalar(@a), %h = map { $_ => 1 } @a;

Модули по задачам

Mojolicious, Dancer2 (веб), DBI (БД), LWP::UserAgent, HTTP::Tiny (HTTP), JSON::PP, Moose / Moo (ООП), Test::More (тесты), Path::Tiny (файлы).