Пока ты попивал смузи и катался на гироскутере, серьёзные пацаны подготовили к выпуску Perl 5.28
Что нового?
- Поддержка Unicode 10.0 (появился символ биткоина).
- delete можно использовать на срезах:
my %sanitised_values = delete %input_values{@allowed_keys};
- Проверка системы письменности на однородность (script runs):
Вернёт «ложь», т.к. буква «е» кириллическая. (подробнее о script runs)
'Pеrl' =~ /^(*sr:\w+$)/
Экспериментальные возможности:
Поддержка буквенных синонимов для некоторых утверждений (assertion) регулярных выражений (Осторожно! Может повысить читабельность!):
(?=...) (*pla:...) or (*positive_lookahead:...)
(?!...) (*nla:...) or (*negative_lookahead:...)
(?<=...) (*plb:...) or (*positive_lookbehind:...)
(?<!...) (*nlb:...) or (*negative_lookbehind:...)
(?>...) (*atomic:...)
Улучшения производительности:
- Серьёзно снижены накладные расходы связанные с использованием параметров юникод (\p{...}) в регулярных выражениях.
- Существенно ускорена множественная конкатенация. Например, следующий код на x86_64 работает в 4 раза быстрее:
my $s; my $a = "ab\x{100}cde"; my $b = "fghij"; my $c = "\x{101}klmn"; for my $i (1..10_000_000) { $s = "\x{100}wxyz"; $s .= "foo=$a bar=$b baz=$c"; }
- sprintf() с фиксированным набором аргументов и строкой формата содержащей только %s и %% работает быстрее.
- ref() работает намного быстрей в булевом контексте, т.к. больше не создаётся временная строка вроде Foo=ARRAY(0x134af48).
- Циклы for() и аналогичные конструкции в большинстве ситуаций будут работать быстрей
- Появилась возможность хранить процедуры в пакетах без использования таблиц имён, что позволяет сэкономить крупные объёмы памяти.
Другие изменения:
- Ядро почистили от «use vars». Многие продолжают использовать «use vars», что является плохой практикой с момента введения «our» в версии 5.6.0.
- Новое предупреждение для случаев:
my $name='Pistachio'; print "In $name's house";
Рекомендую посмотреть на видео. Возможно улыбнётесь.
Видео: Sawyer X рассказывает о нововведениях и фитчах предыдущих версий, которые ты пропустил.
>>> Подробности