Perl 5.28 не вносит радикальных изменений, но в основном фокусируется на оптимизации, повышении производительности, исправлениях безопасности, очистке, обновлении и удалении модулей. Мы объединили документ delta этой версии с докладом Сойерк на TPC2018 в Солт-Лейк-Сити, чтобы предоставить более целостное резюме заслуживающих внимания изменений.
Начиная с новых функций,Perl 5.28 был обновлен для поддержки Unicode версии 10.0, которая теперь даже включает символ биткойна!
Теперь Delete можно использовать для хэш-фрагментов ключа/значения, возвращая ключи вместе с удаленными значениями. Как говорит СойеркС :
мои %sanitised_values=удалить %input_values{@allowed_keys};
Алфавитные синонимы для утверждений регулярных выражений Это влияет на конструкцию атомной группировки и различные варианты поиска.
Например, положительный внешний вид записывается как /(?=pattern)/
но теперь можно сделать более читабельным/(*pla:pattern)/
и еще более читаемый как/(*positive_lookahead:pattern)/
*script_run гарантирует, что несколько сценариев не могут быть введены в одно и то же совпадение, так как смесь сценариев, таких как кириллица и латиница, может быть признаком атаки подмены.
qr/(*script_run: \d+ \b )/x
??где совпадающие цифры будут взяты из одного и того же сценария.
Оператор яда-яда … теперь это стало строго утверждением
Повышение производительности и удаление
Затраты на запуск для создания шаблонов регулярных выражений со свойствами Unicode (\p{…}) были значительно сокращены.
Встроенный ref() теперь намного быстрее в логическом контексте
Очистка внутренних хэш — функций
Удаление варс использования
Удаление :заблокированных и :уникальных атрибутов
Будущие удаления:
Присвоение $[ будет фатальным в Perl 5.30
функция hostname() не принимает аргументы в Perl 5.32
Новые предупреждения
Старый разделитель пакетов, используемый в строке(синтаксис W) Вы использовали старый разделитель пакетов «‘» в переменной с именем внутри строки в двойных кавычках; например, «В доме $name». Это эквивалентно «В $name::s house». Если вы имели в виду первое, поставьте обратную косую черту перед апострофом («В доме $name»).
Сценарий под ним, как говорит СойеркС в своем выступлении, заключается в написании :
my $name=’Фисташка’; print «В доме $name»;
не будет делать того, чего ты ожидаешь.Скорее Perl интерпретирует 2-ю строку как :
печать «В $name::s house»;
Обновленные модули и Прагматика
B::Deparse был обновлен с версии 1.40 до 1.48.
B::Краткий был обновлен с версии 0.999 до 1.003.
Архив::Tar был обновлен с версии 2.24 до 2.30, исправив уязвимость CVE-2018-12015: обход каталогов.
Charnames был обновлен с версии 1.44 до 1.45.
Devel::PPPort , модуль, который может включать функции более высоких версий Perl в более старые версии, был обновлен с версии 3.35 до 3.40
CPAN выпускает Storable и File::Spec с Cwd, наконец, были выпущены в CPAN в виде модулей, отдельных от ядра.
И, наконец, подписи подпрограмм, которые окружены неудачной историей, были снова изменены. Они были впервые введены в 5.20, были изменены в 5.22, а затем было обнаружено, что :lvalue отрицательно влияет на них. Следовательно, в 5.28 они были изменены обратно на их форму 5.20.
В этом отношении функция совместимости, не описанная в Perl delta, но описанная в докладе SawyerX, — это скрипт post526fixsig, с помощью которого вы можете использовать любую версию сигнатур подпрограмм или обе, независимо от версии Perl, которую вы запускаете .
post526sigfix -d —pmc lib/My/Module.pm >lib/My/Module.pmc
Опции: -u, —обновление Обновите синтаксис 5.26 до синтаксиса 5.28-d, —понизьте синтаксис 5.28 до синтаксиса 5.26-i, —inplace Измените целевой файл(ы) на месте —pmc Сгенерируйте .pmc w/goto::файл для загрузки .pm на другой
версии Более подробная информация об этом на сайте http://www.trout.me.uk/perl/post526sigfix.txt