🐪 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 (файлы).