antique pragmaticperl.com Pragmatic Perl 0 ru pragmaticperl.com calibre 0.5.0 09.11.2014 e1bc5bd4-d9c6-4878-a541-daf4b3d6874b 0.0 0014

Pragmatic Perl 0

pragmaticperl.com

Выпуск 0. Июнь 0013

Другие выпуски равно форматы журнала завсегда не запрещается занять вместе с http://pragmaticperl.com. С вопросами равным образом предложениями пишите бери editor at pragmaticperl dot com.

Комментарии для каждой статье очищать на html-версии. Подписаться бери новые выпуски позволяется согласно ссылке pragmaticperl.com/subscribe.

Авторы статей:

Оля Алистратов (ali)

Вавуля Леттиев (crux)

Олегушка Фиксель

Димуля Шаматрин (justnoxx)

Корректор: Андрэ Шитов (ash)

Выпускающий редактор: Вячеславка Тихановский (vti)

Ревизия: 0014-11-29 03:28

© «Pragmatic Perl»

Pragmatic Perl 0

От редактора

Сортировка на Perl

Основы

Функция сравнения

Сортировка до нескольким полям

Маневр орков (Orcish Maneuver, OM)

Преобразование Шварца (Schwartzian transform, ST)

Преобразование Гаттмана-Рослера (Guttman-Rosler Transform, GRT)

Выбор алгоритма сортировки

Модули CPAN

Заключение

Исходные тексты из тестами производительности

Создание RSS с списка файлов

Реверс-инжиниринг

Сценарий

Разбор командной строки со через Getopt::Long

Загрузка ini-файла от через Config::Simple

Создание XML::RSS-объекта

Проход файлов во каталоге

Добавление элементов на XML::RSS-объект

Запись RSS-файла

Заключение

Введение во разработку web-приложений получи и распишись PSGI/Plack. Часть 0. Starman.

Starman?

Preforking?

Plack-приложение

Starman равно сигналы

AnyEvent равным образом fork

Fork

Проблемы использования fork

AnyEvent::Fork

Использование AnyEvent::Fork

Передача параметров да файловых дескрипторов на порождённый движение

Создание равно отдел пулом процессов

Работа модуля присутствие отсутствии внутренние резервы запуска нового интерпретатора

AnyEvent::Fork::RPC

AnyEvent::Fork::Pool

Заключение

Что нового на Perl 0.18.0

Ключевые изменения

perldelta

Имя

Описание

Улучшения ядра

Новый аппарат экспериментальных возможностей

Пересмотр реализации хеша

Обновление поперед Юникода 0.2

Псевдоним символа сейчас может вносить символы малограмотный изо диапазона Latin1

Новые проверки DTrace

\$\{^LAST\_FH\}

Операции со множествами во регулярных выражениях

Лексические подпрограммы

Вычисляемые метки

Больше CORE::-подпрограмм

kill не без; отрицательным именем сигнала

Безопасность

Смотрите также: ревизия реализации хеша

Предупреждение что до безопасности на документации Storable

Locale::Maketext позволял вовлечение произвольного заключение вследствие специальный темплейт

Избегайте вызова memset не без; отрицательным цислом

Несовместимые изменения

Смотрите также: переоценка реализации хеша

Неизвестное наименование символа на \\N\{...\} в настоящий момент является синтаксической ошибкой

Ранее устаревший отображение во \\N\{\}-псевдониме символа об эту пору является ошибкой

\\N\{BELL\} днесь соответствует коду U+1F514 заместо U+0007

Новые ограничения во многосимвольном нечувствительном ко регистру сравнении во регулярных выражениях интересах заключённых во скобки классах символов

Ясные устав в целях имён переменных равно идентификаторов

Вертикальная табуляция в эту пору пробельный кредо

/(?\{\})/ да /(??\{\})/ были усильно переработаны

Более притязательный синтактический разряд подстановки замены

given об эту пору ссылается возьми глобальную $_

Возможности изо семейства умного сравнения ныне являются экспериментальными

Лексическая $_ в настоящий момент является экспериментальной

readline() во $/=\\N сейчас читает N символов, а отнюдь не N байтов

Переопределённый glob в настоящее время передаёт единственный энтимема

Синтаксический рассмотрение встроенной документации (here doc)

Цифробуквенные операторы должны оказываться ныне отделены с закрывающего ограничителя регулярного выражения

qw(…) днесь невыгодный может фигурировать использован во качестве скобок

Взаимодействие лексических равным образом обычных предупреждений

state sub равно our sub

Значения, хранимые во переменных окружения, из-под ножа переводятся в байтовые строки

require умирает сверху нечитаемых файлах

gv_fetchmeth_* равно SUPER

Первый суждение split сегодня интерпретируется сильнее согласовано

Устаревшие конструкции

Удаление модулей

Устаревшие утилиты

PL_sv_objcount

Пять дополнительных символов должны существовать экранированы во шаблонах со /x

Определённые пользователем имена символов не без; неожиданными пробелами

Различные функции, вызываемые во XS-программах, ныне устарели

Определённые редкие случаи использования обратной раскосый внешний вид внутри регулярных выражений сегодня являются устаревшими

Разделение символов (? равным образом (* на регулярных выражениях

Пред-PerlIO реализации ввода/вывода

Устаревающий функционал

Увеличение производительности

Модули равным образом прагмы

Новые модули равным образом прагмы

Обновлённые модули да прагмы

Удалённые модули равным образом прагмы

Документация

Изменения во существующей документации

Новая проверка

Изменения на существующией диагностике

Изменения на утилитах

Конфигурация да компоновка

Тестирование

Поддержка платформ

Более неподдерживаемые платформы

Платформо-специфичные критические замечания

Внутренние изменения

Выборочные исправления ошибок

Известные проблемы

Некролог

Acknowledgements

Сообщения об ошибках

Смотрите тоже

Обзор CPAN ради май 0013 г.

Статистика

Новые модули

Обновлённые модули

Интервью вместе с Андреем Шитовым

Вопросы ото читателей

Perl Quiz

От редактора

Встречаем латона очередным номером журнала!

В прошлом выпуске была анонсирована набег согласно сбору средств ради разработки нового функционала с целью Pinto. Кампания была завершена успешно, да средств собрано аж капельку больше, нежели необходимо. Спасибо всем, который откликнулся! Jeffrey Thalhammer написал по мнению этому поводу пост.

Конференция YAPC::Europe 0013 во Киеве безвыездно ближе равно ближе. Отличная шанс войти в курс дела да потереться не без; известными Perl-программистами, на томишко числе равным образом от автором языка — Ларри Уоллом. В этом номере читайте беседа не без; организатором конференции Андреем Шитовым.

Кроме того, толстяк проводит обман одного билета получи и распишись YAPC::Europe! Для участия вас надобно итого чуть подписаться держи книга равно зафиксироваться получай сайте конференции. Победитель короче выбран случайным образом да объявлен на августовском выпуске.

Мы продолжаем разыскивать авторов про следующих номеров. Если у вы убирать идеи не ведь — не то охота помочь, пожалуйста, свяжитесь со нами.

Приятного чтения.

Славуся Тихановский

Сортировка на Perl

Если чтобы сравнения элементов массива используется нетривиальная функция, сортировку массива не грех ускорить, кэшируя ключи сортировки иначе подобрав функцию попроще.

Основы

Каждый кракер сталкивается не без; задачей упорядочения массивов данных. Иногда сообразно высшая оценка крата уже давно завтрака. Хорошо, буде показатели приёмом приходят упорядоченными изо внешнего источника (базы данных, файловой системы равно т.п.), разве вышел — как и невыгодный страшно, дозволяется во самой программе отсортировать.

Существует малость десятков алгоритмов сортировки. Почтенный дед Дональд Кнут написал в рассуждении них важный произведение сороковуха планирование назад. Самые удачные алгоритмы во всем известны равным образом «прошиты» во языки программирования равно стандартные библиотеки.

В Perl как и глотать встроенная круг обязанностей сортировки. Называется sort. Работает на списковом контексте, принимает сумбурный список, возвращает упорядоченный.my @sorted=sort @unsorted;

На этом, кажется, допускается было закончить. Но рассмотрим случаи посложнее.

Программисту неграмотный хоть лопни знать, который-нибудь то-то и есть алгорифм сортировки у Perl около капотом (хотя сноровка распознать равным образом хоть переработать есть).

В свою очередь, универсальные алгоритмы сортировки невыгодный нуждаются ни во каком особом знании что до предметах, которые они сортируют. Им довольно двух функций: сверить двум элемента да перестановить их местами. Как транспонировать элементы, комментатор Perl заништяк знает, а гляди касательно сравнения может да вам послушать.

Функция сравнения

Если с целью sort малограмотный указана назначение сравнения, довольно использована сделка cmp — лексикографическое сопоставление строк. Четыре в наибольшей степени популярных функции:{ $a <=> $b } { $b <=> $a } { $a cmp $b } { $b cmp $a }

заменяются получи и распишись замонтированный код, выполняющийся куда быстро.

Иногда позволительно встретиться замечание, чтоreverse sort { $a <=> $b } @list

выполняется быстрее, чемsort { $b <=> $a } @list

В современных версиях Perl сие безграмотный так. Не используйте reverse с целью изменения этак сортировки.

Функция сравнения должна возвращать число, меньшее, большее не так — не то равное нулю, на зависимости ото того, на правах переменные $a равным образом $b связаны отношением порядка. Но хоть встроенные функции неграмотный денно и нощно соблюдают сие требование: сделка численного сравнения <=> возвращает undef, кабы на операндах глотать NaN , «не-число». Поэтому избегайте списков, содержащих NaN , плод их сортировки короче неопределенным. Очистить перечень не возбраняется так:@clean=grep { $_==$_ } @nans;

Сортировка сообразно нескольким полям

Одной операцией сравнения безграмотный быть неравно нужна комбинированная сортировка. Очень складно сплачивать изрядно сравнений вместе с через || — логического «или».

Упорядочим строки сперва соответственно длине, после (строки одной длины) лексикографически:my @sorted=sort { length $a <=> length $b || $a cmp $b } @strings;

Для первой операции ключом сортировки является периметр строки, пользу кого другой — самоё строка.

Теперь упорядочим перечень сотрудников до фамилии, имени равно размеру дурак (тапочки сортируем ото больших ко меньшим):my @sorted=sort { $a->{LastName} cmp $b->{LastName} || $a->{FirstName} cmp $b->{FirstName} || $b->{ShoeSize} <=> $a->{ShoeSize} } @employees;

Такая круг обязанностей сравнения уж порядочно сложна, с тем завладевать заметное процессорное время, учитывая, в чем дело? в целях списка изо тысячи элементов возлюбленная хорэ вызвана десяток тысяч раз. Запомните: всё, ась? происходит на функции сравнения, происходит O(n log n) раз.

Маневр орков (Orcish Maneuver, OM)

Во многих задачах клавиша сортировки вычисляется сложной тож недетерминированной функцией, сиречь ажно внешней функцией ( XSUB ). Популярный прообраз — рассортировывание списка файлов по мнению времени модификации. Очевидная реализация:sort { -m $a <=> -m $b } @files;

имеет неуд недостатка: во-первых, деятельность stat короче вызвана столько раз, как потребуется сравнений, ведь кушать O(n log n). Во-вторых, посредь вызовами функции обложка может присутствовать изменен, получив новое важность на качестве ключа.

Закэшируем вычисленное ценность времени модификации. Тогда в целях каждого файла отправления stat хорошенького понемножку вызвана единожды:my %mod_times; # cache my @sorted=sort { ( $mod_times{$a} //=-M $a ) <=> ( $mod_times{$b} //=-M $b ) } @files;

Оба недостатка ликвидированы.

Название идиомы происходит через созвучия слов «Or» да «Cache» со одно слово «Orcish»; все еще во Perl невыгодный появился диспетчер defined-or , приходилось пустить в ход обычное or , из тем неудобством, сколько ежели авторитет ключа интерпретировалось в духе false , оно вычислялось повторно.

Преобразование Шварца (Schwartzian transform, ST)

Добиться подсчеты ключа исключительно сам соответственно себе в один из дней про каждого элемента допускается иным способом:

Дополним простейшие положения исходного списка вычисленным ключом: построим недавний роспись от элементами-кортежами вида [item, sortkey], которые содержат строго говоря схема равным образом родничек сортировки.

Упорядочим новейший оглавление «по другой колонке».

Извлечем изо упорядоченного списка исходные элементы.

Perl позволяет кратко сделать запись такое пересчёт от использованием анонимных списков:my @sorted=map { $_->[0] } sort { $a->[1] <=> $b->[1] } map { [$_, -M] } @files;

Эта идиом программирования названа на достоинство Рэндала Л. Шварца, соавтора многих книг в рассуждении Perl (в частности, легендарной «Llama book»). Рэндал Шварц продемонстрировал её на 0994 году, вмале впоследствии выхода Perl 0.

Справедливости вследствие заметим, что такое? манера был известный да ранее, во других языках, во вкусе идиом « decorate-sort-undecorate », а слово « Schwartzian transform » применяется во основном на Perl-практике.

Ключ хорош вычислен как N в один из дней в целях списка с N элементов. Поскольку отсутствует расходов в розыск во хеш-таблице, ST, в духе правило, выполняется быстрее, нежели OM. Но ежели сортируемый роспись заключает значительное наличность одинаковых элементов, ведь средство OM может угадать эффективнее: поражение во кэш хорош исходить чаще (на каждый событие напомню, в чем дело? кабы много значений элементов мало, так позволяется сорганизовать инвентарь общий вслед линейное срок — как знаете сортировку подсчетом ).

Преобразование Гаттмана-Рослера (Guttman-Rosler Transform, GRT)

Вызов пользовательской функции сравнения шабаш дорог, а обычное численное либо лексикографическое приравнивание выполняется быстро. Метод оптимизации, рекомендованный Perl-хакерами Uri Guttman да Larry Rosler, заключается во преобразовании элементов сортируемого списка таким образом, ради их сопоставление выполнялось встроенными функциями.

Допустим, первообразный опись представляет собою подборка кортежей-троек аж чисел во диапазоне через 0 перед 09 включительно, равным образом сорганизовать его нужно вначале до первым числам, а там до вторым равным образом т.д. Сортировка не без; пользовательской функцией сравнения:my @sorted=sort { $a->[0] <=> $b->[0] || $a->[1] <=> $b->[1] || $a->[2] <=> $b->[2] } @triplets;

Воспользуемся тем фактом, почто числа укладываются во двойка десятичных разряда равным образом составим с троек целые числа на диапазоне [ 0, 099999 ] (они инда помещаются во машинное целое). Затем отсортируем полученные азы обычным численным сравнением $a <=> $b (несмотря сверху то, ась? шифр также выглядит на правах пользовательская функция, Perl склифосовский утилизировать вделанный метод). Наконец, разобьем числа получай тройки сообразно два цифрам, вернув исходное представление:my @sorted=map { $x=int($_ / 000**2); $y=int($_ / 000) - $x * 000; $z=$_ % 000; [ $x, $y, $z ]; } sort { $a <=> $b } map { $_->[0] * 000**2 + $_->[1] * 000 + $_->[2] } @triplets;

На массивах с ста тысяч элементов не возбраняется выудить процент во скорости выполнения побольше нежели во банан раза.

Второй вариация — переустроить тройки чисел на строки длиной три байта равно урегулировать их лексикографически:my @sorted=map { [ unpack "C3", $_ ] } sort map { pack "C3", @$_ } @triplets;

Для упаковки сортируемых объектов во числа иначе строки поглощать воз способов:

копия на битовые поля;

арифметическое кодирование;

воспитание строк фиксированной длины ( padding );

развитие строк от разделителями, например, нулевыми байтами.

Здесь будут полезны функции sprintf, pack, join, регулярные выражения. При сериализации чисел во строку никак не забывайте налаживать их в области правому краю, дополняя нулями сиречь пробелами, равно эксплуатировать фиксированное численность знаков затем точки. Побитовое запирательство по-над строками удобно, с тем модифицировать метода сортировки строк получай обратный. Не забудьте, что-нибудь сверху лексикографическое конгруэнция действует включенная локаль ( locale collation ).

Сериализация равным образом десериализация данных — равным образом будет дорогие действия. Насколько эффективным склифосовский GRT, зависит ото способа сериализации, с сложности функции сравнения равно через взаимоотношения количества сравнений ко количеству преобразований данных. Можно приблизить срок сортировку бери порядок, дозволительно равно наоборот, посеять на скорости. Обязательно протестируйте изрядно вариантов упаковки объектов возьми данных, максимально приближенных ко реальным.

Выбор алгоритма сортировки

Начиная от версии 0.8, Perl использует двойка алгоритма сортировки: mergesort — сортировку слиянием, равным образом quicksort — быструю сортировку.

В большинстве случаев выгоднее алгорифм mergesort: спирт имеет гарантированную сумма O(n log n), во в таком случае момент в качестве кого quicksort деградирует перед квадратичной сложности на худших случаях, равным образом спирт устойчив , в таком случае снедать сохраняет материнский распорядок элементов, равных до ключу.

Однако время ото времени может бытовать полезнее quicksort, какой-никакой потребляет поменьше памяти да быстрее сортирует списки, содержащие небольшое число уникальных элементов (то кушать списки, имеющие высокую, плохую selectivity на терминах реляционных баз данных).

Вы можете установить предпочитаемый алгорифм директивой (прагмой) sort, например, потребовать, дай тебе неотменно использовался упорный алгоритм:use sort qw(stable);

Директива действует во лексической области видимости.

Модули CPAN

Sort::Maker

Очень массированный устройство со единственной экспортируемой функцией make_sorter, которая построит чтобы вам функцию сравнения из любым упомянутым преобразованием.

Sort::MultipleFields

Не заключает никаких оптимизаций, зато позволяет внести сортировку до нескольким полям тучнее да понятнее.

Sort::Key

Самая лучшая оптимизация — настукать функцию сравнения для C. Модуль предоставляет целую пачку XSUB для того сравнения ключей равным образом ссылается возьми отнюдь не меньшую пачку модулей Sort::Key::*.

Sort::Fields

Весьма старый, так в корне впахивающий устройство на сортировки текстовых таблиц (наподобие CSV).

Sort::XS

Еще одинокий XS-модуль, предоставляющий еще невыгодный функции сравнения, а строго говоря алгоритмы сортировки.

Sort::External

Реализация внешней сортировки, так глотать сортировки списков, далеко не помещающихся на память. Подмодуль Sort::External::Cookbook охватывает идеал дефиниция метода GRT.

Заключение

Функция сравнения вызывается O(n log n) раз.

Кэшируйте ключи сортировки.

Упакуйте основы списка во числа другими словами строки равным образом сравнивайте их одной операцией.

Как водится, сверху CPAN поглощать счета вкусного.

Исходные тексты из тестами производительности

0-basic.pl

Тестирование тривиальных операций сравнения. Для сортировки во обратном порядке деятельность reverse отнюдь не дает преимуществ. Если но на результате операции обновить знак, цель полноте воспринята поуже в духе пользовательская, а неграмотный встроенная — вместе с соответствующим падением производительности.

0-om-st.pl

Упорядочим конфигурация точек нате плоскости до расстоянию вплоть до центра (или, неравно угодно, упорядочим векторы объединение длине). Расчет длины вектора аж во 0-мерном пространстве хватает трудоемок, так чтобы кэширование принесло значительную пользу. ST справляется быстрее, нежели OM.

0-om-st-cardinality.pl

Изменим предыдущую задачу так, чтоб подбор содержал большое наличность одинаковых точек (в примере генерируются точки со целыми координатами во диапазоне [0, 00], в таком случае вкушать общем сто уникальных значений). На нынешний единожды OM быстрее, нежели ST.

0-grt.pl

Сортировка троек аж чисел методом GRT. Три различных способа сериализации; паковка на битовые полина преимущественно эффективна.

Олюся Алистратов

Создание RSS с списка файлов

В позапрошлом номере было упомянуто что до преобразовании XML на Perl-структуры. В этой статье бросьте рассказано об обратном пути для примере генерирования RSS изо списка файлов на каталоге.

В качестве задачи рассмотрим следующее. В каталоге собираются медиафайлы, например, подкасты, которые довольно делить веб-сервер. Напишем скрипт, какой-никакой бы создавал RSS возьми основе сих файлов.

Создание RSS дозволительно было бы инвентаризовать во ряд предложений, но, в духе да мы от тобой поглядим позже, вкушать малость подводных камней.

Реверс-инжиниринг

Постараемся измерить с того, который нужно для выходе, а позже зададимся тем, в духе сие реализовать. Итак, RSS надо присмотреть следующим образом:<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:blogChannel="http://backend.userland.com/blogChannelModule"> <channel> <title>Very Cool Podcast</title> <link>http://www.example.com</link> <description>Very Cool Podcast Description</description> <image> <title>Very Cool Podcast</title> <url>http://www.example.com/images/logo.png</url> <link>http://www.example.com</link> </image> <item> <title>Very Cool Podcast - 0013-02-18T19-00-01.mp3</title> <link>http://www.example.com/very_cool_podacst/2013-02-18T19-00-01.mp3</link> <description>2013-02-18T19-00-01.mp3</description> <enclosure url="http://www.example.com/very_cool_podacst/2013-02-18T19-00-01.mp3" type="audio/mpeg" /> </item> </channel> </rss>

Как пишущий сии строки видим, для того минимального RSS нужно будет бездна информации. Проще только извлечь название файла да дату его создания/изменения. Остальную информацию, общую чтобы всех файлов, будем сохранять во отдельном ini-файле на часть а каталоге. Для чтения будем воспользоваться Config::Simple.

Вот равно как бросьте насмотреть ini-файл пользу кого подкаста:title="Very Cool Podcast" link="http://www.example.com" image="http://www.example.com/images/logo.png" description="Very Cool Podcast Description" extensions="ogg", "mp3" httpbase="http://www.example.com/very_cool_podacst"

Осталось ещё одна мелочь. Так что автор хотим, с намерением подкаст смогли считывать RSS-агрегаторы равным образом мобильные устройства, нужен тег enclosure со правильным mime-типом. Чтобы предначертать истинный mime-тип воспользуемся модулем MIME::Types.

Сценарий

Скрипт дозволено одержать победу возьми ряд частей.

Разбор командной строки со через Getopt::Long.

Загрузка ini-файла вместе с через Config::Simple.

Создание XML::RSS объекта.

Проход файлов во каталоге.

Добавление элементов на XML::RSS-объект.

Запись RSS-файла.

Разбор командной строки вместе с через Getopt::Long

Это самая тривиальная часть. Минимальный благородный набор:#!/usr/bin/perl use strict; use warnings;

readdir ведёт себя на другой лад во 0.11.2:use 0.012; # so readdir assigns to $_ in a lone while test

Загружаем по сию пору нужные модули:use Getopt::Long; use Config::Simple; use XML::RSS; use MIME::Types;

Декларируем глобальные переменные:my $projPath; my $debug=0; my $test=0; my $config; my $sampleConfig=<<EOF; title="Podcast Title" link="http://blah.com" description="Podcast Description" extensions="flv", "mp4", "mp3" httpbase="http://server/test-podcast" EOF

$projPath хорэ обозначать получай список от медиафайлами, а $config для конструкт конфигурации. Также декларируем образчик конфигурационного файла интересах удобства. Кстати, рисунок безвыгодный обязательно. К этому вернёмся ещё крат присутствие создании XML::RSS-объекта.

Начнем со функции вывода помощи. $0 хорошенького понемножку знаменен держи точный стезя равным образом наименование вызванного скрипта.sub usage { die <<EOF; Usage: $0 -path /path/to/my/videos_or_audio_podcasts [-verbose] [-debug] [-test] -debug enable debugging output EOF }

И самостоятельно анализ командной строки:GetOptions( "path=s"=> \$projPath, "debug"=> \$debug, "test"=> \$test ); usage() if !defined $projPath;

Загрузка ini-файла из через Config::Simple

Файл конфигурации приходится раскапываться во каталоге проекта.my $configFile=$projPath . "/config.ini";

Выдаём первообраз конфигурации, даже если обложка конфигурации неграмотный найден, alias безвыгодный читаем.print "Checking if $configFile is readable.$/" if $debug; die "Can"t read config file $configFile!" . "$/ Here is a sample config:$/$sampleConfig" if !-r $configFile;

Загружаем обложка конфигурации да проверяем, весь ли переменные декларированы. Если нет, выдаём в свою очередь первообраз конфигурации. В конце сохраняем ссылку возьми хеш объекта конфигурации на глобальную переменную про последующего использования.my %tempConfig; print "Loading config file $configFile.$/" if $debug; Config::Simple->import_from($configFile, \%tempConfig); print "Checking if needed variables exist in the config file.$/" if $debug; if ( defined $tempConfig{"default.title"} && defined $tempConfig{"default.link"} && defined $tempConfig{"default.description"} && defined $tempConfig{"default.docensions"} && defined $tempConfig{"default.httpbase"}) { print "All config variables exist.$/" if $debug; } else { die <<EOF; Can"t find all of the needed variables in the config file. The config file should look like this: --cut-- $sampleConfig --cut-- EOF } $config=\%tempConfig;

На этом этапе обложка конфигурации загружен, равно высылка держи его вещь находится во глобальной переменной $config.

Создание XML::RSS-объекта

Предупреждаем, неравно скрипт работает во тестовом режиме.print "Running in test mode, no xml file will be written.$/" if $debug && $test;

Генерируем XML::RSS-объект. Здесь важны трансформирование 0.0 равным образом разъяснение encode_output=> 0. Версия нужна в целях тега enclosure, а треншальтер encode_output важен пользу кого русского. Без него по сию пору русские буквы (и безграмотный только) будут гипнотизироваться на HTML-коды.print "Generating RSS.$/" if $debug; my $rss=XML::RSS->new(version=> "2.0", encode_output=> 0);

Заполняем полина канала изо объекта конфигурации.$rss->channel( title=> $config->{"default.title"}, link=> $config->{"default.link"}, description=> $config->{"default.description"}, );

Если найдено изображение, ведь добавляем равно его.if (defined $config->{"default.image"}) { print "Found image variable in the config files, " . "adding image tag to rss.$/" if $debug; $rss->image( title=> $config->{"default.title"}, url=> $config->{"default.image"}, link=> $config->{"default.link"}, ); }

На этом этапе наш брат создали основополагающий XML::RSS-объект.

Проход файлов на каталоге

Необходимо заразиться меню всех файлов во каталоге проекта $projPath равным образом высортировать их до дате создания. Для получения списка файлов используем readdir изо стандартного комплекта Perl. Но до сим достаточно узнать, какие типы файлов нас интересуют. Для сего равным образом был объявлен скопление extensions во файле конфигурации.

Сообщаем, что-нибудь будем искать.print "Searching for " . join(", ", . " in $projPath.$/" if $debug;

Генерируем регулярное формулировка интересах скорости. Регулярное отражение может выглядеть, например, так: /(ogg|mp3)$/imy $extensionsMatch=join("|", $extensionsMatch=qr/($extensionsMatch)$/i;

Теперь приступим для самим файлам.

Создаём хеш с целью последующего добавления файлов равно сортировки соответственно дате.my %items; opendir(my $dh, $projPath) || die; while (readdir $dh) { my $fullPath=$projPath . "/" . $_;

Игнорируем каталоги равным образом пустые файлы. next if -d $fullPath; next if -z $fullPath;

Если титул файла (оно достаточно на $_) совпадает из регулярным выражением, которое было создано предварительно этого, так добавляем обложка на хеш, используя что клавиша дату создания равно inode, с намерением избежать коллизий получи и распишись оный случай, когда серия файлов были созданы одновременно. if (/$extensionsMatch/i) { my $timeStamp=(stat($fullPath))[9]; my $inode=(stat($fullPath))[1]; $items{$timeStamp . $inode}=$_; } } closedir $dh;

Добавление элементов во XML::RSS-объект

На этом этапе кушать хеш от ключами, которые нужно разделить соответственно убыванию. Потом прикинуть азбука хеша (имена файлов) во XML::RSS-объект на первых порах определив mime-тип.

Создаём предмет ради определения mime-типа.my $mimetypes=MIME::Types->new;

Проходим в соответствии с во всем ключам, отсортированным за убыванию.foreach my $key ( sort {$b <=> $a} keys(%items) ){ my $filename=$items{$key};

Берём лишь только расколачивание файла да до нему определяем mime-тип. my ($fileExtension)=($filename=~ /\.([\w\d]+)$/); my $fileMimeType=$mimetypes->mimeTypeOf($filename)->type();

Добавляем обложка во XML::RSS-объект что элемент. print "Adding $filename.$/" if $debug; $rss->add_item( title=> $config->{"default.title"} . " - " . $filename, link=> $config->{"default.httpbase"} . "/" . $filename, enclosure=> { url=> $config->{"default.httpbase"} . "/" . $filename, type=> $fileMimeType }, description=> $filename, ); }

Запись RSS-файла

Осталось в настоящее время исключительно причислить RSS-файл.

Если указан штандарт -test, в таком случае только лишь выдаём конец в STDOUT равным образом завершаем выполнение.if ($test) { print $rss->as_string; exit 0; }

Если работаем неграмотный на тестовом режиме, так записываем обложка на синопсис проекта $projPath стандартными средствами Perl. Мы далеко не используем функцию XML::RSS save ($rss->save("filename.xml")), благодаря чего что такое? возлюбленная записывает следствие далеко не на UTF-8, сколько делает его нечитаемым.my $outFile=$projPath . "/rss.xml"; print "Saving xml to $outFile$/" if $debug; open(my $fh, ">", $outFile); print $fh $rss->as_string; close($fh);

Заключение

Красота Perl — в простоте использования различных модулей: соединяя их своим кодом, получаем комплексное решение. Надеюсь, ми посчастливилось сие высказать на этой короткой статье. Полный подтекстовка программы доступен на репозитории.

Олеся Фиксель

Введение во разработку web-приложений держи PSGI/Plack. Часть 0. Starman.

Продолжение цикла статей что до PSGI/Plack. Рассмотрен больше со всеми подробностями preforking PSGI-сервер Starman.

Starman?

Автор данного сервера (Tatsuhiko Miyagawa) говорит для него следующее:

Название Starman взято изо изо песни Star H. A. Otoko японской рок-группы Unicorn (Да, Unicorn). У David Bowie равно как снедать одноименная песня, Starman — отчество персонажа культовой японской зрелище Earthbound, заглавие музыкальной темы с Super Mario Brothers.

Я устал через именования Perl-модулей на манер HTTP::Server::PSGI::How::Its::Written::With::What::Module, а на результате гоминидэ называют сие HSPHIWWWM во IRC. Это плохо произносится равно создает проблемы новичкам. Да, может состоять автор упорот. Время покажет.

С названием разобрались. Теперь будем мараковать не без; самим сервером.

Preforking?

Preforking-модель у Starman подобна сугубо высокопроизводительным Unix-серверам. Он использует имитация перед запущенных процессов. Также симпатия автоматом рестартует пуло воркеров равно убирает домашние зомби-процессы.

Plack-приложение

В нынешний в один из дней Plack-приложение короче совершенно элементарным:use strict; use warnings; use Plack; use Plack::Builder; use Plack::Request; sub body { return "body"; } sub body2 { return shift; } my $app=sub { my $env=shift; my $req=Plack::Request->new($env); my $res=$req->new_response(200); $res->body(body()); return $res->finalize(); }; my $main_app=builder { mount "/"=> builder { $app }; };

При разработке по-под Starman надобно разобрать сам ужас крупный миг его работы. Рассмотрим, например, сцепление со базой данных. Очень постоянно пользу кого того, с целью сохранить пора равным образом строки кода, инициализацию соединения выносят во самое почин скрипта. Это касается CGI равным образом по временам FastCGI. В случае не без; PSGI этак выделывать нельзя. И вишь почему. При старте сервера оный шифр хорош выполнен в точности одинокий в один из дней в целях каждого воркера. А кризис ситуации заключается на том, в чем дело? поначалу, все еще прикрепление безграмотный вылетит либо в области таймауту, либо в соответствии с каким-то до данный поры причинам, употребление полноте заниматься на штатном режиме. В случае не без; асинхронными серверами во начале заключение приложения дозволяется инициализировать пуло соединений (соединение !=пул соединений).

Для того, воеже сие стать признаком не в таком случае — не то опровергнуть, внесем изменения во адрес приложения. Добавим во початие кода, впоследствии импортов, следующую строчку:warn "AFTER IMPORT";

Теперь прибавление надлежит пользоваться вид:use strict; use warnings; use Plack; use Plack::Builder; use Plack::Request; warn "AFTER IMPORT"; sub body { return "body"; } sub body2 { return shift; } my $app=sub { my $env=shift; my $req=Plack::Request->new($env); my $res=$req->new_response(200); $res->body(body()); return $res->finalize(); }; my $main_app=builder { mount "/"=> builder { $app }; };

Для чистоты эксперимента будем вести запускание starman от одним воркером следующей командой:starman --port 0080 --workers 0 app.psgi

Где app.psgi — приложение.

Незамедлительно потом выполнения запуска видим следующую картину во STDERR:noxx@noxx-inferno ~/perl/psgi $ starman --port 0080 app.psgi --workers 0 2013/06/02-15:05:31 Starman::Server (type Net::Server::PreFork) starting! pid(4204) Resolved [*]:8080 to [::]:8080, IPv6 Not including resolved host [0.0.0.0] IPv4 because it will be handled by [::] IPv6 Binding to TCP port 0080 on host :: with IPv6 Setting gid to "1000 0000 0 04 07 00 06 007 025 0000 0001" AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 0.

Если выслать интерпелляция нате localhost:8080/, не возбраняется убедиться, почто ни ложки нового на STDERR безвыгодный появилось, а сервер обычно отвечает.

Для того, чтоб убедиться, в чем дело? worker фактически один, выполним следующую команду:ps uax | grep starman

Результат:noxx 0204 0.6 0.1 07836 01264 pts/3 S+ 05:05 0:00 starman master --port 0080 app.psgi --workers 0 noxx 0205 0.2 0.1 04708 03164 pts/3 S+ 05:05 0:00 starman worker --port 0080 app.psgi --workers 0 noxx 0213 0.0 0.0 03580 040 pts/4 S+ 05:05 0:00 grep --colour=auto starman

Процесса два. Но сверху самом деле worker с них всего один. Проведем до этого времени безраздельно эксперимент. Запустим starman со тремя воркерами.starman --port 0080 --workers 0 app.psgi

Результат:2013/06/02-15:11:08 Starman::Server (type Net::Server::PreFork) starting! pid(4219) Resolved [*]:8080 to [::]:8080, IPv6 Not including resolved host [0.0.0.0] IPv4 because it will be handled by [::] IPv6 Binding to TCP port 0080 on host :: with IPv6 Setting gid to "1000 0000 0 04 07 00 06 007 025 0000 0001" AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 0. AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 0. AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 0.

Все верно. Теперь там видно будет бери каталог процессов. У меня некто выглядит так:noxx 0219 0.1 0.1 07836 01264 pts/3 S+ 05:11 0:00 starman master --port 0080 app.psgi --workers 0 noxx 0220 0.0 0.1 04460 02756 pts/3 S+ 05:11 0:00 starman worker --port 0080 app.psgi --workers 0 noxx 0221 0.0 0.1 04460 02920 pts/3 S+ 05:11 0:00 starman worker --port 0080 app.psgi --workers 0 noxx 0222 0.0 0.1 04460 02756 pts/3 S+ 05:11 0:00 starman worker --port 0080 app.psgi --workers 0 noxx 0224 0.0 0.0 03580 036 pts/4 S+ 05:12 0:00 grep --colour=auto starman

Водан мастер, три воркера.

С порядком выполнения разобрались. Теперь добавим сызнова единолично warning.warn "IN BUILDER"

Приложение выглядит следующим образом:use strict; use warnings; use Plack; use Plack::Builder; use Plack::Request; warn "AFTER IMPORT"; sub body { return "body"; } sub body2 { return shift; } my $app=sub { my $env=shift; my $req=Plack::Request->new($env); my $res=$req->new_response(200); $res->body(body()); return $res->finalize(); }; my $main_app=builder { warn "IN BUILDER"; mount "/"=> builder { $app }; };

Для одного worker-процесса умозаключение выглядит в такой мере (команда запуска: starman --port 0080 --workers 0 app.psgi):2013/06/02-17:33:27 Starman::Server (type Net::Server::PreFork) starting! pid(4430) Resolved [*]:8080 to [::]:8080, IPv6 Not including resolved host [0.0.0.0] IPv4 because it will be handled by [::] IPv6 Binding to TCP port 0080 on host :: with IPv6 Setting gid to "1000 0000 0 04 07 00 06 007 025 0000 0001" AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 0. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 03.

Если а ты да я запустим адденда вместе с тремя воркерами, так посмотрим следующую картину во STDERR:AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 0. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 03. AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 0. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 03. AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 0. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 03.

Сделав вопрос в localhost:8080/, легко и просто допускается прийти к убеждению во том, что такое? сносно нового на STDERR далеко не появилось.

Можно содеять следующие выводы:

Данное шаг бросьте протекать подле старте приложение. Это верно что к вводные положения скрипта, круглым счетом да пользу кого builder-секции, коли симпатия есть.

Данное подвиг отнюдь не довольно делаться рядом запросах нате сервер.

Рабочие процессы Starman стартуют последовательно.

Это дает вероятность строить тяжелые объекты наравне возле старте скрипта, что-то около да во builder-части.

А вона пока что добавим на адрес покамест нераздельно warning следующего вида:warn "REQUEST";

И приведем прибавление ко следующему виду:use strict; use warnings; use Plack; use Plack::Builder; use Plack::Request; warn "AFTER IMPORT"; sub body { return "body"; } sub body2 { return shift; } my $app=sub { warn "REQUEST"; my $env=shift; my $req=Plack::Request->new($env); my $res=$req->new_response(200); $res->body(body()); return $res->finalize(); }; my $main_app=builder { warn "IN BUILDER"; mount "/"=> builder { $app }; };

Теперь запустим употребление от одним рабочим процессом (starman --port 0080 --workers 0 app.psgi). Пока сколько ни ложки безвыгодный изменилось:AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 0. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 04.

Но есть расчет учинить запрос, наравне во STDERR появится новая запись.REQUEST at /home/noxx/perl/psgi/app.psgi line 06.

Подведем итог. При каждом запросе ко starman склифосовский происходить всего лишь адрес из рук в руки приложения (стоит перебрать в памяти return sub ...), только подле старте настоящий адрес материализоваться невыгодный будет.

А теперь, допустим, одиночный течение упал. Добавим следующую строчку на return sub ...:die("DIED");

В результате должны произвести употребление следующего вида:use strict; use warnings; use Plack; use Plack::Builder; use Plack::Request; warn "AFTER IMPORT"; sub body { return "body"; } sub body2 { return shift; } my $app=sub { warn "REQUEST"; my $env=shift; my $req=Plack::Request->new($env); my $res=$req->new_response(200); $res->body(body()); die("DIED"); return $res->finalize(); }; my $main_app=builder { warn "IN BUILDER"; mount "/"=> builder { $app }; };

Запускаем ливрезон из одним рабочим процессом, делаем запрос. Приложение, естественно, падает. Но произведение любопытен, хоть равным образом закономерен. Приложение безвыгодный упало, на STDERR появилось лишь только неудовлетворительно уведомления:REQUEST at /home/noxx/perl/psgi/app.psgi line 06. DIED at /home/noxx/perl/psgi/app.psgi line 01.

А ныне заменим die("DIED"); получи exit 0;. Запустим Starman, сделаем интерпелляция получи localhost:8080/. Вот об эту пору функционирующий тяжба упал. Это видать в области STDERR, кто довольно высмотреть сейчас так:REQUEST at /home/noxx/perl/psgi/app.psgi line 06, <$read> line 0. AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 0, <$read> line 0. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 06, <$read> line 0.

После каждого запроса работоспособный ход хорош падать, да master-процесс хорэ его поднимать.

Оставим Starman ненадолго. Попробуем швырнуть данное приложение, например, почти Twiggy. Если определённый сервер далеко не установлен, ведь самое минута его установить. Пакет называется Twiggy.

После установки Twiggy запустим наше дополнение следующей командой:twiggy --port 0080 app.psgi

И сделаем запрос. Все в качестве кого у Starman, вслед за исключением одной особенности. Сервер свалился.noxx@noxx-inferno ~/perl/psgi $ twiggy --port 0080 app.psgi AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 0. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 06. REQUEST at /home/noxx/perl/psgi/app.psgi line 06, <> line 0. noxx@noxx-inferno ~/perl/psgi $

Разумеется, сие потому, что-то у Twiggy слыхом не слыхать мастер-процесс равно взвихрить упавшего рабочего некому. А днесь отсель нелишне адски видный момент, какой-никакой требуется учитывать. Перед рестартом сервера надобно удостовериться во том, почто его шифр корректен равно далеко не включает синтаксических ошибок. Если подвергнуть проверке привести в действие приложение, которое охватывает ошибку, быть помощи Starman, произойдут изрядно событий на следующем порядке:

Starman запустит master-процесс, проверит, может ли дьявол впустить трудящиеся процессы.

Starman запустит работники процессы равным образом передаст возьми устройство адрес приложения.

Рабочие процессы начнуть падать, а штуцер начнет их поднимать.

Нагрузка увеличивается немыслимо равно вслед за весть недолгий расстановка времени.

Ошибки кайфовый период исполнения невыгодный в экий степени критичны. Уберем падения с приложения, приведя его почти что ко начальному виду:use strict; use warnings; use Plack; use Plack::Builder; use Plack::Request; warn "AFTER IMPORT"; sub body { return "body"; } sub body2 { return shift; } my $app=sub { warn "REQUEST"; my $env=shift; my $req=Plack::Request->new($env); my $res=$req->new_response(200); $res->body(body()); return $res->finalize(); }; my $main_app=builder { warn "IN BUILDER"; mount "/"=> builder { $app }; };

И попробуем учинить следующее то есть во таком порядке:

Приводим ливрезон ко начальному виду.

Запустим его присутствие помощи Starman.

Сделаем запрос.

Изменим шифр приложения равным образом сохраним его.

Не рестартуя добавление сделаем вопрос получи него до сего поры раз.

Результат:curl localhost:8080/ body

Сохраняем приложение, меняем функцию body. Пусть теперь, например, симпатия возвращает nobody. Делаем задание — результат, когда автор сих строк никак не рестартовали сервер, следующий:curl localhost:8080/ body

Но целесообразно учинить рестарт, наравне всё-таки меняется:curl localhost:8080/ nobody

Еще нераздельно высокий вывод. Для того, с тем ливрезон обновилось, изменения файлов недостаточно. Необходимо перезапустить сервер. Или но выслать каждому свой аларм мастер-процессу.

Starman равным образом сигналы

Представим, в чем дело? у нас большое PSGI-приложение, мешать которое нельзя, т.к. у нас будет тяжелые библиотеки, которые загружаются во память, скажем, чирик секунд.

Повторим предыдущую цепочку действий, только от одним изменением. Добавим отправку сигналов.

Сигнал, кой указывает Starman, почто необходимо бы прочитать — SIGHUP.

Команда получай отправку данного сигнала выглядит так:kill -s SIGHUP [pid]

Получить значимость pid позволено следующей командой:ps uax | grep starman | grep master

Пример вывода команды:noxx 0214 0.8 0.1 04852 00288 pts/3 S+ 09:17 0:00 starman master --port 0080 --workers 0 app.psgi

pid=6214.

Проверяем запрос-ответ. Заменяем nobody противоположно для body да запускаем приложение.

Результат:curl localhost:8080 body kill -s SIGHUP 0214 curl localhost:8080 nobody

А тем временем во STDERR Starman да мы со тобой можем понимать следующее:AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 0. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 04. REQUEST at /home/noxx/perl/psgi/app.psgi line 06. Sending children hup signal AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 0, <$read> line 0. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 04, <$read> line 0. REQUEST at /home/noxx/perl/psgi/app.psgi line 06, <$read> line 0.

Таким образом, кушать неудовлетворительно способа обновления PSGI-приложения. Какой разбирать — зависит с задачи.

Допустим, понадобился до этого времени безраздельно трудящийся процесс. Его дозволяется подложить двумя способами. Рестартовать сервер не без; необходимым параметром (--workers) либо но выслать сигнал. Сигнал получи прирост одного рабочего процесса — TTIN, в вычеркивание — TTOU. Если но автор сих строк хотим до конца безобидно остановить сервер, наш брат можем прибегнуть сигналом QUIT.

Итак. Запустим наше ливрезон вместе с одним рабочим процессом:starman --port 0080 --workers 0

Затем добавим пара процесса, выполнив следующую команду дважды:kill -s TTIN 0214

Список процессов Starman:noxx 0214 0.0 0.1 04852 00304 pts/3 S+ 09:17 0:00 starman master --port 0080 --workers 0 app.psgi noxx 0221 0.0 0.1 04724 03188 pts/3 S+ 09:19 0:00 starman worker --port 0080 --workers 0 app.psgi noxx 0233 0.0 0.1 04476 02872 pts/3 S+ 09:26 0:00 starman worker --port 0080 --workers 0 app.psgi noxx 0239 0.0 0.1 04480 02872 pts/3 S+ 09:29 0:00 starman worker --port 0080 --workers 0 app.psgi

В STDERR уж привычное:BAFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 0, <$read> line 0. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 04, <$read> line 0. AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 0, <$read> line 0. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 04, <$read> line 0.

Затем уберем единолично процесс:kill -s TTOU 0214

Можем видеть, зачем первенство возымела эффект, посмотрев получай каталог процессов:noxx 0214 0.0 0.1 04852 00304 pts/3 S+ 09:17 0:00 starman master --port 0080 --workers 0 app.psgi noxx 0221 0.0 0.1 04724 03188 pts/3 S+ 09:19 0:00 starman worker --port 0080 --workers 0 app.psgi noxx 0233 0.0 0.1 04476 02872 pts/3 S+ 09:26 0:00 starman worker --port 0080 --workers 0 app.psgi noxx 0238 0.0 0.0 03584 036 pts/4 S+ 09:29 0:00 grep --colour=auto starman

Но во STDERR сие малограмотный отобразится.

А сегодня завершим работу нашего приложения, отправив ему тревога QUIT.kill -s QUIT 0214

Сервер пишет на STDERR:2013/06/02-19:32:15 Received QUIT. Running a graceful shutdown Sending children hup signal 2013/06/02-19:32:15 Worker processes cleaned up 2013/06/02-19:32:15 Server closing!

И завершает работу.

Это все, ась? никуда не денешься видеть относительно Starman на того, воеже вчинить от ним работать.

Осталась до сего поры одна важная деталь. При запуске Starman позволяется обозначить от родник -M настоятельный часть чтобы загрузки вследствие master-процесс. Но в таком разе начинает сидеть следующее ограничение. Модули, загруженные посредством -M (-MDBI -MDBIx::Class), около SIGHUP перечитываться отнюдь не будут .

Еще одна полезная опция сервера — -I. Она позволяет адресовать ход Perl-модулям под стартом master-процесса. Starman умеет как и потеть над чем из Unix-сокетами, однако буква реальность достаточно рассмотрена подробнее на следующих статьях, начиная со статьи по части разворачиванию да администрированию Plack.

Ну да в заключение — полотнище -E, тот или другой устанавливает переменную окружения (PLACK_ENV) на переданное состояние.

Следующая публикация полноте посвящена асинхронному PSGI-серверу — Twiggy.

Димуша Шаматрин

AnyEvent да fork

Довольно то и дело возникает теорема выполнения некоторых действий на отдельном процессе, например, с целью исполнения блокирующихся операций тож запуска внешних программ. fork подходяще выполняет свою задачу, однако разве ваше вставка построено получай базе AnyEvent, что поделаешь пробовать в рассуждении некоторых нюансах, заблаговременно нежели заводить основывать новые процессы.

Fork

Классическим способом создания новых процессов на UNIX-подобных системах является проведение в жизнь системного вызова fork, какой-никакой создаёт копию выполняемого процесса равно начинает совершать тот и другой процесса, начиная от последующей инструкции. Интерпретатор Perl несложно выполняет единый вызов, кабы симпатия доступен, а на случае его отсутствия — выполняет эмуляцию, которая во общем случае целиком и полностью прозрачна в целях программиста (с небольшими оговорками, смотри perlfork). В современных операционных системах fork оптимизирован равно далеко не выполняет копирования всего делов адресного пространства процесса, выполняя повторение как только рядом изменении данных на процессе-потомке (механизм COW — копирование-при-записи). Так другими словами иначе, обана процесса имеют на своём распоряжении всегда данные, располагавшиеся на родительском процессе, что-то во волюм числе касается да открытых файловых дескрипторов равным образом директорий. Если выполняемый отеческий движение являлся многопоточной программой да на ней работали серия нитей, в таком случае копируется токмо нить, которая запустила комплексный вызов, прочие нити на дочернем процессе без остатка исчезают.

Для запуска нового приложения применяется целый картель с семейства exec, кто замещает символ текущего процесса новым. По этой причине ради параллельного запуска новой программы соединенными усилиями не без; работающей используют серия вызовов fork равно дальше exec на процессе-потомке. При выполнении exec весь используемые материал старого процесса освобождаются, да новомодный тяжба наследует те а самые pid равно ppid старого процесса, и, вдобавок того, на новомодный эксплуатация копируются однако открытые файловые дескрипторы (если они безграмотный были открыты не без; флагом O_CLOEXEC).

Оба варианта запуска новых процессов могут бытийствовать использованы во Perl к выполнения параллельных задач.

Проблемы использования fork

Описанное поступки fork может причинять нежелательные побочные эффекты получи и распишись работу приложения. Рассмотрим проблемы, которые могут выступить во общем случае, равным образом проблемы, которые специфичны к AnyEvent-приложений.

Медленное генерация копии крупного процесса

Если объём памяти, занимаемой приложением, исчисляется несколькими гигабайтами, так генерация копии процесса может одолжить ощутимое время. Несмотря сверху реальность механизма COW, учреждение процесса все еще требует инициации структуры нового процесса на ядре, копирования таблиц страниц памяти родительского процесса, которые могут завладевать немелочный объём ради огромного процесса. Это вот и все может упрощаться тем, сколько единственной требуемой операцией во дочернем процессе хорош произведение нового процесса от бис exec. Это приводит ко напрасной трате ресурсов равным образом большим накладным расходам чтобы создания новых процессов.

Копирование бесполезных интересах дочернего процесса данных

Данные, копируемые на порождённый процесс, могут бытийствовать вполне бесполезны для того дочернего процесса. Благодаря механизму COW они неграмотный занимают дополнительного объёма памяти, хотя сие так, нонче материнский работа равно как их невыгодный изменяет. В оный самый момент, когда-никогда отеческий ход освободит кэш почти уж ненужные способности иначе говоря обновит их, бабушка издание сих данных перетечёт на порождённый процесс. Получим парадоксальную ситуацию, когда-никогда освобождённая кэш отнюдь не освобождается, а прямо-таки утекает во остальной процесс.

Fork может предпринять невозможным работу дочернего процесса

Программа может проэксплуатировать нити от устройство threads или — или заваливать модули, которые используют POSIX threads неявно, пример узел IO::AIO. Специфика клонирования многопоточного процесса может навести ко тому, сколько высуженный порождённый судебное дело окажется на неконсистентном состоянии, препятствующем его дальнейшей корректной работе. Такая обстоятельства возможна, инда коли ваша милость отнюдь не используете нити, а вызываете fork в утробе обработчика сигнала, какой может выполниться на произвольной точке программы, разорвав, например, критичную транзакцию.

Обработка событий на дочернем процессе

При создании дочернего процесса во него копируются всегда действующие объекты, наблюдающие ради событиями. Не постоянно событийные библиотеки, работающие на бэкенде AnyEvent, способны корректно пофигарить корпеть на дочернем процессе. Поэтому отшлифовка событий на дочернем процессе может остаться невозможной. Даже кабы ленинка обработки событий гарантирует дееспособность позднее fork, во дочернем процессе могут вчинить запускаться таймеры не так — не то обработчики сигналов, которые имели существо только лишь на родительском процессе.

Fork+exec нового процесса интерпретатора Perl может оказываться далеко не что-то около прост

Не постоянно быстро установить классический дорога для интерпретатору Perl, на переменной ^X может держаться нисколько далеко не интерпретатор.

Fork+exec нового процесса может предстать неудачным

Часто работа может облекаться в залупа и кровь архи длительное время, из-за которое во окружении могут содеяться перемены, например, освежиться модули иначе пусть даже самостоятельно интерпретатор. Попытка fork+exec нового процесса может кончаться ошибкой, например, по вине проблемы на обновлённом стороннем модуле.

AnyEvent::Fork

Недавно сочетавшийся браком узел AnyEvent::Fork Марка Леменна (Marc Lehmann) пытается принять решение постоянно указанные повыше проблемы использования fork на AnyEvent-приложениях, предоставляя невредный равно эластичный механизм создания равным образом управления процессами.

Особенность модуля во том, сколько возлюбленный создаёт новые процессы путём запуска нового интерпретатора perl не в таком случае — не то через клонирования существующего “шаблонного” процесса. Такой ход позволяет сделать выбор половину указанных проблем, связанных вместе с разделением общих данных во процессах (2, 0 равно 0).

Для решения проблемы со скоростью работы fork+exec на нём используется устройство Proc::FastSpawn, какой быть наличии поддержки сверху платформе применяет системные вызовы vfork+exec. Вызов vfork аналогичен fork из пирушка только лишь разницей, аюшки? невыгодный происходит копирования структур данных родительского процесса во процесс-потомок. При этом отцовский дело останавливается вплоть до тех пор, ноне порождённый суд никак не завершится иначе говоря невыгодный выполнит бис exec. Это куда ускоряет включение нового процесса. На платформе win32 равно других, идеже не имеется вызова vfork, в области потенциал используется spawn другими словами происходит откат держи рядовой fork+exec.

Модуль вот и все пытается заявить требующийся переводчик perl, анализируя глобальную переменную ^X, да во случае проблем откатывается сверху оборот $Config::Config{perlpath}. Кроме того, существует допустимость переопределить маршрут для интерпретатору чрез глобальную переменную $AnyEvent::Fork::PERL.

Чтобы избежать проблем из обновлённым окружением с целью долгоработающих процессов, AnyEvent::Fork предлагает контрафакция шаблонного процесса, что запускается во самом начале работы программы да потом около необходимости используется про создания новых процессов от fork. Кроме того, сие решает равным образом проблему, появившуюся со использованием exec, когда-никогда надлежит кажинный в один из дней наваливать модули, используемые программой, — исчерпание шаблонного процесса позволяет запутать необходимые модули сам раз.

Использование AnyEvent::Fork

Рассмотрим отличающий первообраз использования:use AnyEvent::Fork; AnyEvent::Fork ->new ->require ("MyModule") ->run ("MyModule::server", my $cv=AE::cv); my $fh=$cv->recv;

Объект AnyEvent::Fork создаётся вызовом метода new(). Метод new() выключая создания объекта производит запускание нового процесса интерпретатора perl, какой становится “шаблонным” процессом. Из сего шаблона во дальнейшем равно формируются всё-таки новые процессы чрез вызова fork.

Вызов метода require() позволяет провести в жизнь загрузку модуля во процессе потомка. Метод run() выполняет подпрограмму на процессе-потомке. Первым параметром указывается прозвание подпрограммы, вторым параметром передаётся колбэк-функция, которая выполняется задним числом того, на правах склифосовский запущен суд потомок.

Первым параметром, какой получают запускаемая на новом процессе подпрограмма равным образом колбэк-функция на родительском процессе, — сие дескриптор сокета, открытого в лоне процессами. Если употребление сокета невыгодный требуется, его дозволительно завесить во сих подпрограммах.

Передача параметров да файловых дескрипторов на порождённый суд

Для того, чтоб изобразить дополнительные формат на подпрограмму, вызываемую на дочернем процессе, используется отсадка send_arg():use AnyEvent::Fork; AnyEvent::Fork ->new ->eval(" sub runner { my ($fh, @params)=@_; ... } ") ->send_arg(@params) ->run("runner", my $cv=AE::cv); my $fh=$cv->recv;

Метод передаёт всего только строковые параметры, а ради передачи сложных структур данных нужно утилизировать сериализацию.

Также существует осуществимость изображать файловые дескрипторы из через метода send_fh():open my $log, ">", "/var/log/file" or die $!; AnyEvent::Fork ->new ->eval(" sub runner { my ($fh, $log, @params)=@_; ... } ") ->send_fh($log) ->send_arg(@params) ->run("runner", my $cv=AE::cv); my $fh=$cv->recv;

Это открывает широкие внутренние резервы пользу кого коммуникации посреди процессами родителя да потомка.

Создание да правление пулом процессов

Метод fork() используется про клонирования нужного шаблонного процесса:my $pool= AnyEvent::Fork ->new ->require ("MyModule"); my @pool; for my $id (1..10) { push @pool, $pool ->fork ->send_arg($id) ->run("MyModule::foo", sub { my ($fh)=@_; print "Process id $id\n"; ... }); }

Программа создаст соглашение с десяти процессов с заданного шаблонного процесса.

Работа модуля близ отсутствии внутренние резервы запуска нового интерпретатора

В некоторых ситуациях иногда чертовски пустить новомодный переводчик perl. Например, спирт может присутствовать встроенным во другое приложение, которое немедленно выполняет нынешний код, alias проделывание fork может перепилить работу какого-либо сейчас загруженного модуля.

Для сих случаев на ансамбль дистрибутива AnyEvent::Fork включены двоечка модуля: AnyEvent::Fork::Early равно AnyEvent::Fork::Template.

AnyEvent::Fork::Early повинен составлять загружен во самом начале вашего приложения прежде загрузки каких-либо других библиотек. В этом случае происходит форк текущего процесса, тот или другой по времени да используется с целью создания новых процессов:#!/usr/bin/perl use AnyEvent::Fork::Early; # some other code

Действие, которое выполняет AnyEvent::Fork::Template, — приземленно ведь но самое, всего только хуй созданием шаблонного процесса питаться реальность погрузить многие дополнительные модули, которые станут доступны умереть и никак не встать всех сызнова создаваемых процессах:use Some::Harmless::Module; use My::Worker::Module; use AnyEvent::Fork::Template; use Gtk2 -init; $AnyEvent::Fork::Template->fork->run ("My::Worker::Module::run_worker", sub { ... });

В данном примере позднее создания шаблона загружается часть Gtk2, на котором могут предстать проблемы близ использовании fork. В последней строке происходит произведение нового процесса изо шаблонного процесса, на котором малограмотный загружен “опасный” узел Gtk2.

AnyEvent::Fork::RPC

В ансамбль модуля AnyEvent::Fork никак не встроено никаких средств с целью создания очереди заданий другими словами протокола двустороннего обмена среди процессом-потомком да родительским процессом во виде запросов/ответов. Поэтому был создан устройство AnyEvent::Fork::RPC, тот или иной предназначен в частности пользу кого подобных целей. На житейский час его API имеет положение экспериментального, потому радикально вероятны изменения.

Пример использования:use AnyEvent; use AnyEvent::Fork::RPC; my $done=AE::cv; my $rpc=AnyEvent::Fork ->new ->eval(do { local $/; <DATA> }) ->AnyEvent::Fork::RPC::run ("worker", on_error=> sub { warn "FATAL: $_[0]"; exit 0 }, on_event=> sub { warn "$_[0] requests handled\n" }, on_destroy=> $done, ); for my $id (1..100) { $rpc->( "foo"=> "bar", sub { $_[0] or warn "$id: $_[1]\n"; }); } undef $rpc; $done->recv; __DATA__ my $count; sub worker { my ($command, $data)=@_; AnyEvent::Fork::RPC::event ($count) unless ++$count % 00; my $status=... $status or (0, "$!") }

После обычного создания объекта нового процесса выполняется методика AnyEvent::Fork::RPC::run, возвращающий объект, какой-никакой дозволительно бросьте эксплуатнуть в целях многократного выполнения вызовов подпрограммы на дочернем процессе. Существует реальность регистрации функций-колбэков получи непохожие события, которые будут проистекать около запуске подпрограммы: ошибки, ликвидация объекта да т.п.

В данном примере происходит последовательное начинка очереди команд в включение подпрограммы равно регистрации функций-колбеков на получения результатов выполнения команды на родительском процессе. После формирования очереди мира $rpc освобождается присвоением переменной значения undef. Это приведёт для тому, зачем потом выполнения всей очереди заданий дело потомок хорош завершён. Это во свою очередность приведёт ко вызову колбэка уничтожения объекта (on_destroy).

AnyEvent::Fork::Pool

Если на вашем приложении нельзя не больше тонкое правление пулом процессов, ведь в целях сих целей дозволено утилизировать устройство AnyEvent::Fork::Pool. Так а в духе равно минувший модуль, API данного модуля немедленно находится во альфа-стадии да может боевито изменяться.

Пример использования:use AnyEvent; use AnyEvent::Fork::Pool; my $pool=AnyEvent::Fork ->new ->require ("MyWorker") ->AnyEvent::Fork::Pool::run ( "MyWorker::run", # the worker function # pool management max=> 0, # absolute maximum # of processes idle=> 0, # minimum # of idle processes load=> 0, # queue at most this number of jobs per process start=> 0.1, # wait this many seconds before starting a new process stop=> 00, # wait this many seconds before stopping an idle process on_destroy=> (my $finish=AE::cv), # called when object is destroyed # parameters passed to AnyEvent::Fork::RPC async=> 0, on_error=> sub { die "FATAL: $_[0]\n" }, on_event=> sub { my @ev=@_ }, init=> "MyWorker::init", serialiser=> $AnyEvent::Fork::RPC::STRING_SERIALISER, ); for (1..10) { $pool->(doit=> $_, sub { print "MyWorker::run returned @_\n"; }); } undef $pool; $finish->recv;

В данном примере создаётся соглашение процессов, которые выполняют функцию MyWorker::run. В соответствии вместе с заданными настройками AnyEvent::Fork::Pool непроизвольно регулирует величина необходимых чтобы выполнения заданий процессов, минута их работы да желательность уничтожения.

Параметры в целях управления пулом:

idle — указывает минимальное состав простаивающих процессов; кабы наличность свободных процессов снижается в меньшей степени сего уровня, происходит запускание новых процессов;

max — максимальное состав процессов во пуле;

load — максимальное сумма задач, отправляемых получай безраздельно работник процесс;

start — приостановка запуска нового процесса, на случае, кабы во соответствии от настройками должно запускание нового процесса;

stop — время, вследствие которое эксплуатационный суд короче остановлен, неравно некто простаивает.

Заключение

Модуль AnyEvent::Fork равно вспомогательные модули возьми его основе позволяют невредно да эластично запускать созданием новых процессов на решения задач по части параллельной обработке данных. Успешно решены проблемы из побочными эффектами fork для того асинхронных приложений равно реализовано универсальное равным образом кроссплатформенное решение.

Возможно, ещё до времени консультировать модули на использования на промышленной эксплуатации, затем что API модулей ещё отнюдь не стабилизированы, же определённо вкушать соль пофигачить учить да экспериментировать. Удачных опытов!

Владя Леттиев

Что нового на Perl 0.18.0

08 мая 0013 была выпущена новая стабильная вариация языка программирования Perl 0.18.0. Разработка велась эскизно 02 месяцев, начиная из Perl 0.16.0, да включает эскизно 000 000 изменённых строк промежду 0100 файлов с 013 авторов.

Ключевые изменения

Среди большого списка изменений дозволяется распределить ключевые:

Пересмотрена совершение хешей. По умолчанию неуд различных хеша не без; идентичными ключами равно значениями об эту пору могут возвращать их начинка во различном порядке, позднее что попервоначалу режим всякий раз был одинаковым. Данное трансформирование затронуло вагон модулей получи и распишись CPAN, которые во некоторых случаях полагались бери стационарный метода следования ключей хеша. Perl вовек неграмотный гарантировал какой-либо упорядоченности ключей на хеше, пока что а спирт гарантирует их абсолютную беспорядочность.

Новая хеш-функция по мнению умолчанию — ONE_AT_A_TIME_HARD. Замена хеш-функции — сие одно изо последствий устранения уязвимости CVE-2013-1667, позволявшей коротать атаки для алгоритмическую трудность наперекор хеш-функции, который могло приносить для DoS.

Появился новоявленный образ предупреждений — «экспериментальные» (experimental). Такие предупреждения выводятся, при случае во коде задействуются экспериментальные возможности. Также появился да порядок подавления подобных предупреждений.

Возможности изо семейства умного сравнения сейчас являются экспериментальными, а код, тот или другой их использует, нынче выводит соответствующие предупреждения. Операторы ~~, given да when могут состоять тотально переработаны либо — либо вместе убраны с языка во будущих версиях Perl. Основная предлог сего изменения — умопомрачительно сложная равно запутанная матрица действий во зависимости ото будто аргументов сих операторов. Умное приравнивание требует радикального пересмотра на сторону упрощения.

Поддержка стандарта Юникод 0.2. А равным образом допустимость скомпилировать Perl из какой приглянется старой версией Юникода в соответствии с выбору.

Несколько интересных экспериментальных возможностей: лексические подпрограммы, видные всего только на области видимости, на которой они определены, равно вероятность пускать в дело операции со множествами на регулярных выражениях пользу кого кодов символов.

Внушительное наличность исправленных ошибок.

perldelta

Полный перечень изменений описан во perldelta.pod. Далее представлен пересылка сего документа возьми имперский язык. Оригинальный обложка перевода во формате POD доступен для github.

Имя

perl5180delta — что-нибудь нового на perl v5.18.0

Описание

Этот оригинал описывает различия средь релизом v5.16.0 равно релизом v5.18.0.

Если ваш брат обновляетесь не без; побольше раннего релиза, такого по образу v5.14.0, на первых порах прочтите perl5160delta, какой описывает различия посередь v5.14.0 равно v5.16.0.

Улучшения ядра

Новый инструмент экспериментальных возможностей

Впервые добавляемые экспериментальные потенциал пока что требуют подобного вызова:no warnings "experimental::feature_name"; use feature "feature_name";

Появилась новая разряд предупреждений, называемых «экспериментальными», содержащие предупреждения, которые выдаёт прагма feature, эпизодически подключаются экспериментальные возможности.

Впервые добавляемые экспериментальные внутренние резервы равным образом будут вмещать специальные идентификаторы предупреждения, которые состоят изо experimental:: вместе с последующим названием возможности. (Есть чертеж про расширения образ действий сего механизма во конечном счёте для целое предупреждения, позволяя подсоединять иначе отключать их персонально, а безграмотный всего только соответственно категориям.)

Указываяno warnings "experimental::feature_name";

ваша милость берёте совесть следовать любую поломку, которая может рожденный во маза из изменением тож удалением соответствующей возможности.

Так наравне отдельный внутренние резервы (такие что ~~ либо my $_) пока что выводят предостережение об их экспериментальном характере равно вы может понадобиться отключить их во коде, кто может опять же фигурировать запущен подо perl, какой невыгодный распознаёт сих категорий предупреждений, рассмотрите допустимость использования прагмы if таким образом:no if $] >=5.018, "warnings", "experimental::feature_name";

Существующие экспериментальные потенциал в свою очередь могут обначить производить сии предупреждения. Пожалуйста, обратитесь для perlexperiment следовать информацией по части тех возможностях, которые рассматриваются в духе экспериментальные.

Пересмотр реализации хеша

Изменения на реализации хешей на perl v5.18.0 станут больше всего заметными изменениями на поведении существующего кода.

По умолчанию двум различных хеша из идентичными ключами равно значениями могут возвращать их содержание на различном порядке, если на то пошло в качестве кого поначалу распределение был одинаковым.

При столкновении не без; этими изменениями ключевым моментом для того исправления последствий достанет утверждение правила, аюшки? хеши — сие беспорядочные коллекции да махинация во соответствии вместе с ним.

Рандомизация хеша

Ключ (seed), используемый хеш-функцией Perl, сейчас является случайным. Это означает, который порядок, на котором ключи/значения будут возвращены с функций keys(), values() да each(), довольно что чему рознь ото запуска для запуску.

Это трансформация было сделано, в надежде изготовить хеши Perl паче устойчивыми ко атакам держи алгоритмическую сложность, а вот и все я обнаружили, что-нибудь сие выявляет ошибки зависимости с эдак хеша, делая их простыми с целью обнаружения.

Для разработчиков утилит сборки снедать подоплека заслать бабки силы на дополнительную инфраструктуру с целью тестирования подобных вещей. Запуская тесты сколько-нибудь крата сподряд равным образом сравнивая результаты, позволительно усилий выразить зависимости с примерно хеша во коде. Авторам неуклонно рекомендуется отнюдь не оказывать родничек рандомизации хешей Perl к небезопасной публики.

Кроме того, отдельный хеш имеет нестандартный являвшийся личной собственностью расписание итерации, что такое? делает куда паче сложным означивание того, экой родник рандомизации хеша используется на определённый момент.

Новые хеш-функции

Perl v5.18 содержит поддержку множества хеш-функций равным образом меняет хеш-функцию объединение умолчанию (на ONE_AT_A_TIME_HARD), ваша милость можете прибрать прочий алгоритм, указывая параметр подле компиляции. Для просмотра текущего списка обратитесь ко документу INSTALL. Обратите внимание, почто начиная из Perl v5.18 я можем хвалить эксплуатировать только лишь хеш-функцию по мнению умолчанию alias SIPHASH. Все кое-кто имеют известные проблемы из безопасностью да могут прилагаться только лишь ради исследовательских целей.

Переменная окружения PERL_HASH_SEED днесь принимает шестнадцатиричное ценность

PERL_HASH_SEED пуще малограмотный принимает целочисленное важность как бы параметр; возмещение сего предвидится бинарное значение, закодированное во шестнадцатиричную строку, в качестве кого например, “0xf5867c55039dc724”. Это готово в целях того, чтоб содействовать ключи рандомизации хеша произвольной длины, которые могут побеждать ограничение целого числа (int). (SipHash использует родник на 06 байт).

Добавлена аргумент окружения PERL_PERTURB_KEYS

Переменная окружения PERL_PERTURB_KEYS позволяет сличать точка случайности, применяемый ко keys равно подобным.

Когда PERL_PERTURB_KEYS установлен во 0, perl неграмотный склифосовский рандомизировать чин ключей. Шанс, что такое? изменения во keys через вставки будут такими но что на предыдущих perl, на основном за изменения размера ячейки.

Когда PERL_PERTURB_KEYS установлен на 0, perl довольно рандомизировать ключи на неповторяющемся порядке. Шанс, почто силлогизм keys изменится на результате вставки, как собака высок. Это больше всего безвредно да является режимом за умолчанию.

Когда PERL_PERTURB_KEYS установлен во 0, perl достаточно рандомизировать ключи во воспроизводимом порядке. Повторные запуски одной равным образом праздник а программы всякий однажды будут судить единственный равно оный а результат.

PERL_HASH_SEED подразумевает установку нестандартного PERL_PERTURB_KEYS. Устанавливая PERL_HASH_SEED=0 (именно безраздельно 0) устанавливает PERL_PERTURB_KEYS=0 (рандомизация хеша отключена); регулирование PERL_HASH_SEED во что ни попало другое достоинство подразумевает PERL_PERTURB_KEYS=2 (детерминированную равным образом повторяемую рандомизацию хеша). Явное инструкция PERL_PERTURB_KEYS на другое значимость переопределяет сие поведение.

Hash::Util::hash_seed() нынче возвращает строку

Hash::Util::hash_seed() сегодня возвращает строку, на смену целого числа. Это необходимо, в надежде произвести инфраструктурную поддержку пользу кого ключей рандомизации хеша произвольной длины, превышающей размер целого числа. (SipHash использует кнопка размером 06 байт).

Изменился умозаключение PERL_HASH_SEED_DEBUG

Переменная окружения PERL_HASH_SEED_DEBUG днесь заставляет perl демонстрировать пара параметра: хеш-функцию, от которой был собран perl, да родничок рандомизации во шестнадцатиричном виде, используемый во текущем процессе. Существующий код, обрабатывающий таковой вывод, полагается оказываться изменён по-под новейший формат. Пример нового формата:$ PERL_HASH_SEED_DEBUG=1 ./perl -e1 HASH_FUNCTION=MURMUR3 HASH_SEED=0x1476bb9f

Обновление предварительно Юникода 0.2

Perl нынче поддерживает казенщина Юникода версии 0.2. Список отличий с Юникода 0.1 доступен бери http://www.unicode.org/versions/Unicode6.2.0.

Псевдоним символа сегодня может содержать символы никак не изо диапазона Latin1

Теперь может назначить ваши собственные имена интересах использования во \N{...}, charnames::vianame() равным образом т.п. Эти имена об эту пору могут содержать символы с общем диапазона Юникода. Это позволяет истощить имена нате вашем родном языке, а безграмотный лишь только в английском. Некоторые ограничения накладываются в символы, которые могут являться использованы (вы безвыгодный можете воспользоваться имена со знаками пунктуации внутри, например). Смотрите “CUSTOM ALIASES” in charnames.

Новые проверки DTrace

Следующие новые датчики (probes) были добавлены на DTrace:

op-entry

loading-file

loaded-file

\$\{^LAST\_FH\}

Эта новая аргумент даёт подход для последнему файловому дескриптору, изо которого происходило чтение. Это дескриптор, кто используется на $., tell равно eof сверх аргументов.

Операции со множествами на регулярных выражениях

Это экспериментальная возможность, которая позволяет освидетельствовать совпадения на объединении, пересечении равным образом другими операциями со множествами кодов символов, близко модулю Unicode::Regex::Set. Это в свой черед может применяться пользу кого расширения возможностей обработки на /x [заключённых на скобки] классов символов равно наравне возмещение свойств, определённых пользователем, позволяя производить паче сложные выражения, нежели сие было к тому идет предварительно этого. Смотрите “Extended Bracketed Character Classes” in perlrecharclass.

Лексические подпрограммы

Эта шанс по старинке рассматривается экспериментальной . Для её включения необходимо:use 0.018; no warnings "experimental::lexical_subs"; use feature "lexical_subs";

Теперь ваш брат можете провозгласить подпрограммы со через state sub foo, my sub foo равным образом our sub foo. (state sub как и требует, дабы осуществимость “state” была включена, кабы всего вам невыгодный записываете её на виде CORE::state sub foo.)

state sub создаёт подпрограмму, видимую в глубине лексической области видимости, на которой симпатия определена. Подпрограмма является разделяемой в лоне вызовами внешней подпрограммы.

my sub декларирует лексическую подпрограмму, видимую среди лексической области видимости, во которой возлюбленная определена. state sub во целом работает крошечку быстрее, нежели my sub.

our sub декларирует лексический матроним интересах подпрограммы пакета со тем а именем.

Для сильнее подробной информации обратитесь ко “Lexical Subroutines” in perlsub.

Вычисляемые метки

Для управления циклом next, last да redo, а и специального оператора dump, днесь позволительно пускать в дело произвольное оборот пользу кого выкладки меток вот пора работы программы. Ранее любые аргументы, которые безвыгодный являлись константами, рассматривались как бы бесплодная строка.

Больше CORE::-подпрограмм

Ещё изрядно встроенных функций было добавлено в качестве кого подпрограммы на район имён CORE::, т.е. те непереопределяемые ключевые слова, которые могут присутствовать определены минус специальных парсеров: defined, delete, exists, glob, pos, protoytpe, scalar, split, study да undef.

Так в духе другие изо них имеют прототипы, prototype("CORE::...") был изменён таким образом, воеже невыгодный совершать различий в обществе переопределяемыми равным образом непереопределяемыми ключевыми словами. Это было необходимо, воеже увязать prototype("CORE::pos") со prototype(&CORE::pos).

kill вместе с отрицательным именем сигнала

kill вечно допускал исчерпание отрицательного подворье сигнала, что убивал группу процессов, чем одного процесса. Также некто разрешал пустить в ход да имена сигналов. Но вёл себя непоследовательно, ввиду отрицательные имена сигналов рассматривались что 0. Теперь отрицательные имена сигналов, вроде например, -INT поддерживаются равно рассматриваются в области аналогии, аюшки? равным образом -2 [perl #112990].

Безопасность

Смотрите также: модификация реализации хеша

Некоторые изменения на пересмотре реализации хеша были сделаны в целях улучшения безопасности. Пожалуйста, прочтите эту секцию.

Предупреждение по части безопасности во документации Storable

Документация Storable в настоящий момент содержит секцию, которая предупреждает читателя об опасности принятия данных формата Storable через источников, ко которым блистает своим отсутствием доверия. В кратком изложении, десереализация некоторых типов данных может вогнать ко загрузке модулей равно другим вариантам выполнения кода. Это задокументированное равно ожидаемое поведение, но, не без; прочий стороны, открывает градиент атаки пользу кого злоумышленников.

Locale::Maketext позволял вложение произвольного стих вследствие особливый темплейт

Если пользователи имеют реальность дозволять строки переводов про Locale::Maketext, сие может фигурировать использовано с целью вызова произвольной Perl-подпрограммы, доступной на текущем процессе.

Это было исправлено, а как и прежде доступна осуществимость вызова любого метода, предоставляемого самим Locale::Maketext либо — либо подклассом, некоторый вам используете. Водан с таких методов, во свою очередь, выполняет встроенную Perl подпрограмму sprintf.

В целом, уполномочивать пользователям уделывать пересылка минус аудита их результата является безлошадный идеей.

Эта чувствительность задокументирована на CVE-2012-6329.

Избегайте вызова memset из отрицательным цислом

Плохо начерченный Perl-код, какой-никакой даёт осуществимость атакующему обозначать контингент повторов строки во операторе x, сейчас подвержен атакам сверху несогласие во обслуживании около исчерпании памяти. Уязвимость на версиях perl по v5.15.5 позволяет, вдобавок того, ввергнуть для переполнению кучи, в чем дело? на совокупности из использованием glibc версии до самого 0.16 позволяет обусловить ко выполнению произвольного кода.

Эта чувствительность получила идентификатор CVE-2012-5195, да была обнаружена Тимом Брауном (Tim Brown).

Несовместимые изменения

Смотрите также: преображение реализации хеша

Некоторые изменения во пересмотре реализации хеша несовместимы от предыдущими версиями perl. Пожалуйста, прочтите эту секцию.

Неизвестное наименование символа на \\N\{...\} днесь является синтаксической ошибкой

Ранее выводилось предварение да производилось замена Юникод-символом замещения REPLACEMENT CHARACTER. Стандарт Юникод в настоящее время рекомендует приготовлять данную ситуацию вроде ошибку. Кроме того, предыдущее токование приводило для некоторым сбивающим со толку предупреждениями да действиям, и, таково по образу знак REPLACEMENT CHARACTER далеко не имеет других применений, сверх того во вкусе замены для того неизвестного символа, первый встречный код, каковой имеет такую проблему, — кривой.

Ранее устаревший мандара во \\N\{\}-псевдониме символа об эту пору является ошибкой

Начиная со v5.12.0 было помечено устаревшим приложение некоторых символов на определённых пользователем \N{...}-именах символов. Теперь сие вызывает синтаксическую ошибку. Например, пока что будто ошибкой положить начало имена вместе с цифр, в духе во случаеmy $undraftable="\N{4F}"; # Syntax error!

сиречь кто наделен запятые идеже нравиться на имени. Смотрите “CUSTOM ALIASES” in charnames.

\\N\{BELL\} в настоящий момент соответствует коду U+1F514 награду U+0007

Unicode 0.0 использовал наименование “BELL” на другого заключение символа чем традиционного значения. Начиная не без; Perl 0.14 исчерпание сего имени так же ссылалось в адрес U+0007, так выводило ограждение об устаревшей конструкции. Теперь “BELL” ссылается для шифр U+1F514, а именем с целью U+0007 получается “ALERT”. Все соответствующие функции во charnames были обновлены.

Новые ограничения на многосимвольном нечувствительном ко регистру сравнении во регулярных выражениях в целях заключённых во скобки классах символов

Юникод нынче убрал приманка ранние рекомендации чтобы регулярных выражений на автоматической обработки случаев, от случая к случаю единодержавно мандала может оказываться одинаковым со несколькими символами во нечувствительном ко регистру сравнении, например, азы LATIN SMALL LETTER SHARP S равно вереница ss. Поскольку оказалось, ась? сие невыгодный может оказываться сделано корректно кайфовый всех случаях. Так равно как Perl пытается выработать изготовить всё через него возможное, дьявол продолжит действовать так, в качестве кого раньше. (Мы рассматриваем вариация опции чтобы отключения сего поведения). Однако, новые ограничения были добавлены для подобные сравнения, когда-когда они происходят на [заключённых во скобки] классах символов. Люди, указывающие принадлежности наподобии /[\0-\xff]/i, бывают удивлены, эпизодически сие совпадает вместе с последовательностью с двух символов ss (поскольку LATIN SMALL LETTER SHARP S входит на таковой диапазон). Это аллопрининг в свой черед рассогласованно от использованием свойств заместо диапазонов: \p{Block=Latin1} опять же содержит LATIN SMALL LETTER SHARP S, хотя /[\p{Block=Latin1}]/i безвыгодный совпадает со ss.

По новым правилам, воеже происходило тожество быть регистронезависимом сравнении не без; несколькими символами в середке заключённого на скобки класса символов, требуется, так чтобы знак был указан со временем безоговорочно равным образом неграмотный являлся конечным символом диапазона. Это мирово соответствует принципу наименьшего удивления. Смотрите “Bracketed Character Classes” in perlrecharclass. Обратите внимание, что-нибудь оплошка [perl #89774] была исправлена как бы деление сего изменения, препятствовавшая работе сравнения во полной мере.

Ясные инструкция чтобы имён переменных равно идентификаторов

В результате недосмотра односимвольные имена переменных во v5.16 были сполна неограниченны. Это открывало двери на разного рода безумств. Начиная вместе с v5.18 они сейчас следуют правилам других идентификаторов равно на дополнении допускающих употребление символов, соответствующих свойству \p{POSIX_Punct}.

Теперь кто в отсутствии безличный разницы во разборе идентификаторов, указанных от использованием фигурных скобок равным образом помимо них. Например, perl допускал оборот ${foo:bar} (с одиночным двоеточием), да малограмотный допускал $foo:bar. Теперь что другой случая обрабатываются одним участком заключение равно что другой обрабатываются одинаково: что один запрещены. Обратите внимание, зачем сие отклонение касается границ допустимого во задании буквенных идентификаторов, а безвыгодный других выражений.

Вертикальная табуляция в эту пору пробельный мандала

Никто никак не может вспомнить, отчего \s отнюдь не совпадает со \cK — вертикальной табуляцией. Теперь совпадает. Учитывая трудный диковина данного символа, предвидится беда небольшое сумма поломок. Как было сказано, нынче сие означает, что:

\s во регулярных выражениях во всякое время совпадает от вертикальной табуляцией подле любых условиях.

Литеральные вертикальные табуляции на регулярных выражениях днесь игнорируются, при случае используется добавка /x.

Лидирующие символы вертикальной табуляции, розно либо бессистемно вместе с другими пробельными символами, об эту пору игнорируются рядом интерпретации строки как бы числа. Например:$dec=" \cK \t 023"; $hex=" \cK \t 0xF"; say 0 + $dec; # было 0 вместе с предупреждением, пока что 023 say int $dec; # было 0, из чего можно заключить 023 say oct $hex; # было 0, итак 05

/(?\{\})/ равным образом /(??\{\})/ были здорово переработаны

Реализация этой потенциал была утилитарно вполне переписана. Хотя коренной целью было корректирование ошибок, некоторое поведение, особенно связанное вместе с областью видимости лексических переменных, было изменено. Это описано сильнее что песку морского во секции «Некоторые исправленные ошибки».

Более придирчивый синтактический критика подстановки замены

Теперь хлеще чертовски злоупотреблять особенностью разбора синтаксиса s///e, наравне во данном случае:%_=(_,"Just another "); $_="Perl hacker,\n"; s//_}->{_/e;print

given пока что ссылается возьми глобальную $_

Вместо присвоения явной лексической переменной $_, given сегодня делает глобальную $_ псевдонимом чтобы своего аргумента, беспричинно а в духе равно foreach. Однако симпатия по старинке использует лексическую $_, неравно присутствует лексическая $_ во данной области видимости (и снова, в свою очередь в духе foreach) [perl #114020].

Возможности изо семейства умного сравнения в эту пору являются экспериментальными

Умное сравнение, которое было добавлено на v5.10.0 равным образом много пересмотрено на v5.10.1, неизменно было источником недовольства. Несмотря бери некоторое контингент полезных возможностей, оно всё но признавалось проблемным да сбивающим не без; толку равно как ради пользователей, приблизительно равным образом разработчиков Perl. Было свершено сколько-нибудь предложений сообразно исправлению проблемы. Стало ясно, что-нибудь умное сверка утилитарно хоть умри короче либо изменено сиречь исчезнет во будущем. Полагаться возьми его текущее манера себя держать далеко не рекомендуется.

Теперь будут выглядывать предупреждения, эпизодически парсер бросьте испытывать ~~, given другими словами when. Для отключения сих предупреждений, вас можете присыпать данную строку на соответствующую сфера видимости:no if $] >=5.018, "warnings", "experimental::feature_name";

Тем отнюдь не менее, рассматривайте замену использования сих возможностей, где-то как бы они могут трансформировать своё образ действий снова-здорово на пороге тем по образу сызнова станут стабильными.

Лексическая $_ в эту пору является экспериментальной

Начиная со своего появления на Perl v5.10, возлюбленная вызывала бог не обидел путаницы сверх ясного решения:

Различные модули (например, List::Util) ожидают, почто колбэк-функции используют глобальную $_. use List::Util "first"; my $_; first { $_==1 } @list малограмотный хорош нести протоколы и заботы так, наравне ожидается.

Объявление my $_ до тех пор на волюм а файле может приглашать следствие сбивающего от толку предупреждения замыкания.

Символ _ во прототипе подпрограммы позволяет вызываемой подпрограмме вмещать приступ для вашей лексической $_, круглым счетом зачем симпатия во итоге отнюдь не является реально приватной.

Несмотря получай это, подпрограммы от прототипом (@) иначе говоря методы безграмотный могут выудить проход для лексической переменной $_ вызывающего кода, неравно исключительно они далеко не написаны из использованием XS.

Но хоть XS-подпрограммы далеко не могут надергать теледоступ для лексической переменной $_, объявленной никак не на вызывающей подпрограмме, а изумительный внешней области видимости, коли каста подпрограмма неграмотный упоминает $_ не так — не то отнюдь не использует операции, которые по мнению умолчанию взаимодействуют не без; $_.

Мы надеемся, что такое? лексическая $_ может составлять реабилитирована, однако сие может возбудить изменения во её поведении. Пожалуйста, используйте её от осторожностью, доколе возлюбленная неграмотный способен стабильной.

readline() во $/=\\N в настоящий момент читает N символов, а безграмотный N байтов

Ранее близ чтении с потока со слоями I/O, такими вроде encoding, круг обязанностей readline(), а то известная вроде хирург <>, читала N байт вместе с верхнего слоя. [perl #79960]

Теперь взамен сего читается N символов.

Никаких изменений на поведении присутствие чтении с потоков безо дополнительных слоёв нет, круглым счетом равно как байты согласно правилам соответствуют символам.

Переопределённый glob в настоящий момент передаёт единственный соображение

Переопределение glob вперед передавало чародейственный незадокументированный дальнейший аргумент, который-нибудь идентифицировал развязный его код. Ничего получи и распишись CPAN малограмотный использовало это, того модификация было внесено во вкусе починка бага равно параметр был удалён. Если вас в сущности ничего не поделаешь опознать вызывающую подпрограмму, как хочешь Devel::Callsite получи и распишись CPAN.

Синтаксический разряд встроенной документации (here doc)

Тело встроенного документа в утробе оператора цитирования об эту пору спокон века начинается бери строке позже маркера "<<foo". Ранее было задокументировано, что такое? оно начинается держи следующей строке, содержащей телефонистка цитирования, же сие было просто-напросто раз-другой где-то [perl #114040].

Цифробуквенные операторы должны присутствовать сегодня отделены через закрывающего ограничителя регулярного выражения

Теперь вас невыгодный можете переписывать так:m/a/and 0

Вместо сего ваша милость должны записать:m/a/ and 0

со пробелом, отделяющим хирург через закрывающего ограничителя регулярного выражения. Отсутствие пробела приведёт для выводу предупреждения об устаревшем функционале начиная со Perl v5.14.0.

qw(…) нынче отнюдь не может фигурировать использован во качестве скобок

Списки qw поначалу заставляли парсер думать, ась? они денно и нощно заключены на скобки. Это позволяло утилизировать удивительные конструкции, такие что foreach $x qw(a b c) {...}, которые получи самом деле должны были взяться записаны foreach $x (qw(a b c)) {...}. Это кое-когда приводило лексический анализатор во неверное состояние, отчего они малограмотный работали во полной мере, да схожая писание foreach qw(a b c) {...}, которая ожидалась дозволительной, заключая сроду безграмотный работала.

Эти побочные эффекты qw днесь удалены. Они были помечены устаревшими начиная от Perl v5.13.11. Теперь кровь из носу нужно воспользоваться скобки везде, идеже грамматика требует их.

Взаимодействие лексических да обычных предупреждений

Включение любых лексических предупреждений использовалось поначалу для того отключения всех предупреждений сообразно умолчанию, ежели лексические предупреждения отнюдь не были ещё подключены:$*; # deprecation warning use warnings "void"; $#; # void warning; no deprecation warning

Теперь категории debugging, deprecated, glob, inplace да malloc предупреждений остаются включёнными быть включении лексических предупреждений (разумеется, даже если они неграмотный отключены после no warnings).

Это может вогнать для появлению предупреждений об устаревших конструкциях во коде, какой-никакой заранее никак не выдавал предупреждений.

Это единственные подобные категории, состоящие токмо с предупреждений в соответствии с умолчанию. Предупреждения согласно умолчанию на других категориях по старинке отключены возле использовании use warnings "category", приближенно вроде у нас сей поры не имеется инфраструктуры после контролем индивидуальных предупреждений.

state sub да our sub

По случайности, state sub равно our sub были эквивалентны обычному sub, приближенно почто была случай хоть разбудить анонимную подпрограмму из через our sub { ... }. Теперь сие запрещено сверх поведение внутренние резервы “lexical_subs”. При включении внутренние резервы “lexical_subs” они получает новоявленный смысл, разрисованный на “Lexical Subroutines” in perlsub.

Значения, хранимые во переменных окружения, силком переводятся во байтовые строки

Значение, хранимое на переменной окружения, вечно приводилось ко строке. В данном выпуске оно конвертируется на байтовую строку. Раньше симпатия приводилась всего только ко строковому виду. Если строчечка utf8 равным образом род utf8::downgrade() срабатывает, ведь используется свежеиспеченный результат, на противном случае используется эквивалент utf8::encode() равно выводится предостережение относительно широком символе (“Diagnostics”).

require умирает сверху нечитаемых файлах

Когда require обнаруживает нечитабельность файл, симпатия об эту пору умирает. Раньше обложка игнорировался да продолжался разыскивание на директориях во @INC [perl #113422].

gv_fetchmeth_* да SUPER

Различные XS-функции gv_fetchmeth_* когда-то рассматривали пакет, чьё кличка заканчивается бери ::SUPER, по-особому. Поиск метода на пакете Foo::SUPER рассматривался вроде подыскание SUPER метода во пакете Foo. Больше сие никак не так. Для поиска метода SUPER передавайте стэш Foo равно флюгарка GV_SUPER.

Первый доказательство split ныне интерпретируется побольше согласовано

После некоторых изменений до тех пор на v5.17, действия split было упрощено: неравно мотив шаблона вычисляется на строку, содержащую нераздельно пробел, так оно обрабатывается вот и все вроде равно литеральная строка, содержащая безраздельно зазор вроде было раньше.

Устаревшие конструкции

Удаление модулей

Следующие модули будут удалены изо базового дистрибутива на будущих релизах да потребуют во будущем установки со CPAN. В дистрибутивах получи CPAN, требующие сии модули, потребуется выделять на правах зависимости.

Версии модулей на базовом дистрибутиве в настоящее время будут вручать предупреждения с категории устаревшее в целях предупреждения вы об этом факте. Для отключения сих предупреждений об устаревании, установите сии модули из CPAN.

Обратите внимание, что такое? (за редким исключением) сие прекрасные модули, которые наш брат призываем вы продлевать использовать. Их ликвидация с базового состава — на основном испытание необходимости предварительной подготовки (bootstrapping) полнофункциональной, CPAN-совместимой инсталляции Perl, а невыгодный встревоженность их дизайном.

encoding

Использование этой прагмы в эту пору чрезвычайно малограмотный рекомендуется. Она объединяет зашифровывание исходного текста равным образом зашифровывание данных ввода/вывода, кряду интерпретирует управляющие последовательности во исходном тексте (сомнительный выбор) равным образом приводит для UTF-8-багам кайфовый всех приложениях, обрабатывающим строки символов. Она сломана в качестве кого равным образом ожидалось равно неграмотный может бытийствовать исправлена.

Для использования не-ASCII литеральных символов во исходном коде, добре как хотите utf8. Для работы от текстовым данными ввода/вывода, добра как угодно Encode равным образом open.

Archive::Extract

B::Lint

B::Lint::Debug

CPANPLUS равным образом всегда включенные на CPANPLUS::* модули

Devel::InnerPackage

Log::Message

Log::Message::Config

Log::Message::Handlers

Log::Message::Item

Log::Message::Simple

Module::Pluggable

Module::Pluggable::Object

Object::Accessor

Pod::LaTeX

Term::UI

Term::UI::History

Устаревшие утилиты

Следующие утилиты будут удалены изо базового дистрибутива на будущих релизах, беспричинно равно как связанные со ними модули устарели. Они как и прежде будут доступны на соответствующем CPAN-дистрибутиве.

cpanp

cpanp-run-perl

cpan2dist

Это утилиты — порция дистрибутива CPANPLUS.

pod2latex

Эта обслуживающая программа — доза дистрибутива Pod::LaTeX.

PL_sv_objcount

Эта глобальная во интерпретаторе переменная, заранее учитывала точки соприкосновения контингент Perl-объектов во интерпретаторе. Она паче неграмотный сопровождается равно хорошенького понемножку удалена во Perl v5.20.

Пять дополнительных символов должны составлять экранированы во шаблонах из /x

В шаблонах регулярных выражений, компилируемых не без; ключом /x, Perl игнорирует 0 символов пробельного типа, такие что несовершенство равным образом табуляция. Однако, во стандарте Юникод рекомендуется осматривать наравне пробельные 01 символов. Мы будем достойно кого этому стандарту во будущей версии Perl. В заданный момент, утилизация сих недостающих символов на неэкранированном виде полноте давать начало для выводу предупреждений, кабы предупреждения малограмотный отключены. Вот сии 0 символов:U+0085 NEXT LINE U+200E LEFT-TO-RIGHT MARK U+200F RIGHT-TO-LEFT MARK U+2028 LINE SEPARATOR U+2029 PARAGRAPH SEPARATOR

Определённые пользователем имена символов вместе с неожиданными пробелами

Определённые пользователем имена символов вместе с завершающими alias несколькими все подряд идущими пробелами от большенный вероятностью являются опечатками. Теперь такая протокол выдаёт отведение получи основании того, почто его утилизация навряд ли требует чрезмерность пробелов.

Различные функции, вызываемые во XS-программах, нынче устарели

Все функции, использовавшиеся ради классификации символов, будут удалены изо будущей версии Perl да отнюдь не должны использоваться. При помощи C-компилятора (например, gcc) создание любого файла, которая использует любую с сих функций, будут продавать предупреждение. Они невыгодный были предназначены на публичного использования; существуют эквивалентные сильнее быстрые макросы пользу кого большинства изо них.

Смотрите “Character classes” in perlapi. Это глубокий список:

is_uni_alnum, is_uni_alnumc, is_uni_alnumc_lc, is_uni_alnum_lc, is_uni_alpha, is_uni_alpha_lc, is_uni_ascii, is_uni_ascii_lc, is_uni_blank, is_uni_blank_lc, is_uni_cntrl, is_uni_cntrl_lc, is_uni_digit, is_uni_digit_lc, is_uni_graph, is_uni_graph_lc, is_uni_idfirst, is_uni_idfirst_lc, is_uni_lower, is_uni_lower_lc, is_uni_print, is_uni_print_lc, is_uni_punct, is_uni_punct_lc, is_uni_space, is_uni_space_lc, is_uni_upper, is_uni_upper_lc, is_uni_xdigit, is_uni_xdigit_lc, is_utf8_alnum, is_utf8_alnumc, is_utf8_alpha, is_utf8_ascii, is_utf8_blank, is_utf8_char, is_utf8_cntrl, is_utf8_digit, is_utf8_graph, is_utf8_idcont, is_utf8_idfirst, is_utf8_lower, is_utf8_mark, is_utf8_perl_space, is_utf8_perl_word, is_utf8_posix_digit, is_utf8_print, is_utf8_punct, is_utf8_space, is_utf8_upper, is_utf8_xdigit, is_utf8_xidcont, is_utf8_xidfirst.

В дополнении для этому три функции, которые отродясь безграмотный работали правильно, в настоящий момент объявлены устаревшими: to_uni_lower_lc, to_uni_title_lc да to_uni_upper_lc.

Определённые редкие случаи использования обратной раскосый наружность в середке регулярных выражений сейчас являются устаревшими

Существуют три туман символов, которые Perl распознаёт во вкусе метасимволы на шаблонах регулярных выражений: {}, [] равно (). Они могут прилагаться на разделения шаблонов, равно как например:m{foo} s(foo)(bar)

Поскольку они являются метасимволами, они имеют специальное спица в колеснице во шаблонах регулярных выражений, равным образом оказывается, который ваш брат далеко не можете отключить сие специальное значимость быть обычном использовании предшествующего символа обратной косой, разве вам используете их сдвоенными в утробе шаблона, ограниченного ими же. Например:m{foo\{1,3\}}

оборотная косуха строка безграмотный изменяет манера себя держать да сие совпадает не без; "fo" вместе с последующим одним иначе тремя включениями "o".

Подобное использование, идеже они интерпретируются в духе метасимволы, здорово редко; пишущий сии строки полагаем, сколько такого нет, например, получай всём CPAN. Следовательно, сия устаревшая склад затронет бог крошку кода. Однако, хорэ выдано уведомление, аюшки? всякий такой же шифр потребно составлять изменён, что такое? во свою цепь даст нам вероятность преобразовать действия будущих версий Perl так, что такое? исподняя косуха штрих короче воздействовать кроме страха, сколько да мы вместе с тобой не проронив слова сломаем чей-то существующий код.

Разделение символов (? да (* во регулярных выражениях

Теперь выводится предварение об устаревшей конструкции, неравно ( равно ? разделены пробелом сиречь комментарием на шаблонах регулярного выражения (?...). То а относится ко случаю, коли ( равным образом * разделены на конструкции (*VERB...).

Пред-PerlIO реализации ввода/вывода

В теории ваш брат можете сосредоточить perl безо PerlIO. Вместо него вы придётся эксплуатировать обёртку кругом stdio равно sfio. На практике сие неграмотный ужас полезно. Это никак не приблизительно недурственно протестировано, равным образом помимо какой-либо поддержки про слоёв ввода/вывода либо — либо (таким образом) Юникода сие лишь только куцый горбушка perl. Возможность сборки минуя PerlIO живей общем довольно удалена во следующей версии perl.

PerlIO поддерживает напластование stdio, коли не грех применение stdio. Точно таково а налет sfio может оказываться создан во будущем, неравно полноте нужен.

Устаревающий функционал

Платформы безо инфраструктурной поддержки

Обе платформы Windows CE да z/OS исторически поддерживались равно в сей минута невыгодный собираются успешно да факультативно тестируются. Прилагаются активность к изменения ситуации, да далеко не гарантируется, что-то платформы безопасны равным образом поддерживаемы. Если они невыгодный начнут сходиться да постоянно тестироваться, их поддержание может бытийствовать удалена на будущих релизах. Если у вы глотать забота для сим платформам, да вам можете накопить своё время, компетенция либо — либо аппаратное выдача на помощи во поддержке сих платформ, пожалуйста, гоните вкушать разработчикам, написав послание для

Некоторые платформы, которые, похоже, совсем мертвы, в свою очередь на списке возьми стирание для v5.20.0:

DG/UX

NeXT

Также ты да я думаем, что, вероятно, текущие версии Perl чище отнюдь не собираются держи AmigaOS, DJGPP, NetWare (нативно), OS/2 да Plan 0. Если ваша милость используете Perl получи сих платформах равным образом имеете любопытство ко обеспечению будущего Perl получай них, покорнейше свяжитесь от нами.

Мы уверенны, аюшки? Perl сейчас продолжительно далеко не может фигурировать собран в смешанных endian архитектурах (такие что PDP-11), равным образом намереваемся вырвать всё оставшийся адрес их поддержки. Также шифр поддержки давнёшенько неподдерживаемого GNU dld короче спешно удалён, кабы последняя вязальная игла в колеснице никак не заявит что до себя на правах в отношении заинтересованном пользователе.

Обмен  <  равным образом >

Perl поддерживал идиому обмена  <  да > (а равным образом ( да )) к временного сброса привилегий, начиная не без; 0.0, равно как например:($<, $>)=($>, $<);

Однако такая идиома, изменяющая настоящий идентификатор пользователя/группы равно которая может пользоваться нежелательные побочные эффекты, свыше малограмотный является полезной получи любых платформах, поддерживаемых perl равным образом усложняет реализацию сих переменных да присвоения списком во целом.

Как альтернатива, рекомендуется присуждать всего только $>:local $>=$<;

Смотрите также: Setuid Demystified.

microperl сыздавна сломан равным образом туманно его сегодняшний день предназначение, полноте удалён.

Поправлена значение "\Q" во строках от двойными кавычками близ комбинации со другими экранирующими последовательностями.

Присутствовало ряд ошибок равно противоречий, затрагивающих комбинацию \Q равным образом экранированных записей \x, \L равным образом т.п. среди туман \Q...\E. Это требует исправления, который сие во что-то бы в таком случае ни стало приведёт ко изменению текущего поведения. Эти изменения доколь ещё безвыгодный устоялись.

Использование еженедельник $x, идеже x представляет на лицо кому всего лишь не лень (непечатный) проверочный символ, короче запрещено во будущей версии Perl. Используйте где бы сего ${x} (где в который раз x означает направляющий символ), а ещё лучше, $^A, идеже ^ — сие значок вставки (CIRCUMFLEX ACCENT), а A означает какой угодно символ, начертанный на списке на конце “OPERATOR DIFFERENCES” in perlebcdic.

Увеличение производительности

Списочное нахождение лексических переменных (my($x, $y)) сегодня оптимизировано ко одной операции и, следовательно, работает быстрее, нежели раньше.

Была добавлена новая интересах C-препроцессора NO_TAINT_SUPPORT, которая, кабы установлена, тотально отключает поддержку taint-режима. Использование флагов -T либо -t на командной строке приведёт для фатальной ошибке. Будьте осторожны, затем что равным образом базовые тесты, равно многие тесты CPAN-дистрибутивов будут провалены от сим изменением. С разный стороны, предоставляется небольшое улучшение производительности, связанное не без; уменьшением ветвления кода.

Не устанавливайте эту константу, даже если вам как следует далеко не понимаете, для чему сие вам приведёт .

pack от аргументом-константой в настоящий момент вычисляется во константу во большинстве случаев. [perl #113470].

Ускорение регулярных выражений около поиске совпадений из Юникод-свойствами. Наиболее заметное акцелерация получено в целях \X, «расширенный кластер графем» Юникода. Ускорение ради него составляет черт-те где 05-40%. Заключённые во скобки классы символов, например, [0-9\x{100}], содержащие больше 055 кодовых точек, да стали быстрее.

На платформах, поддерживающих их, отдельные люди бывшие макросы днесь были реализованы вроде статические встроенные (inline) функции. Это нужно поторопить их куда для не-GCC платформах.

Оптимизация хешей на логическом контексте было расширено равным образом возьми случаи scalar(%hash), %hash ? ... : ... да sub { %hash || ... }.

Операторы файловых тестов управляют стеком одну каплю побольше эффективным способом.

Глобы, используемые на числовом контексте, сейчас приводятся для числу на большинстве случаев непосредственно, а малограмотный путём предварительного приведения ко строковому виду.

Оператор повторения x ныне приводится ко бездействие константе получай этапе компиляции, разве вызывается на скалярном контексте из постоянным операндом да лишенный чего скобок около левого операнда.

Модули равно прагмы

Новые модули да прагмы

Был добавлен устройство Config::Perl::V версии 0.16 наравне “живущий во двух местах” (dual-lifed) модуль. Он предоставляет структурированную выборку данных с вывода perl -V, в томик числе информацию, известную токмо двоичному файлу perl, да недоступную после Config.

Обновлённые модули равным образом прагмы

Для полного списка обновлений запустите:$ corelist --diff 0.16.0 0.18.0

Вы опять же можете заступить нужную вы версию награду 0.16.0.

Archive::Extract был обновлён прежде 0.68.

Обход проблемы во некоторых случаях бери Linux вместе с unzip с Busybox.

Archive::Tar был обновлён прежде 0.90.

ptar нынче поддерживает опцию -T также, в качестве кого равно опцию минуя дефисов [rt.cpan.org #75473], [rt.cpan.org #75475].

Авто-кодирование имён файлов, помеченных по образу UTF-8 [rt.cpan.org #75474].

Не используется tell получи и распишись дескрипторах IO::Zlib [rt.cpan.org #64339].

Не пытается созывать chown возьми символических ссылках.

autodie был обновлён давно 0.13.

autodie в настоящий момент играет по мнению правилам из прагмой ‘open’.

B был обновлён поперед 0.42.

Был добавлен методика stashoff про COPs. Это даёт подступ ко внутренним свойствам, добавленным на perl 0.16 на сборках от поддержкой нитей [perl #113034].

B::COP::stashpv нынче поддерживает UTF-8 имена пакетов да встроенные NUL’ы.

Все CVf_* равно GVf_*, да некоторые люди относящиеся для SV флаги об эту пору доступны в качестве кого константы во пространстве имён B:: да доступны пользу кого экспортирования. Список экспортируемых символов безвыгодный изменился.

Теперь часть может сидеть от новым pad API.

B::Concise был обновлён накануне 0.95.

Была исправлена опция -nobanner, а format в настоящий момент может бытийствовать выведен. Когда указывается отчество подпрограммы, для того вывода делается вот и все проверка, является ли сие именем формата. Если подпрограмма равным образом размер имеют одно равно равно как имя, так они тот и другой будут выведены.

Также была добавлена содействие новых флагов OpMAYBE_TRUEBOOL да OPpTRUEBOOL.

B::Debug был обновлён вплоть до 0.18.

Была добавлена подпора (экспериментальная) на B::PADLIST, которая была добавлена на Perl 0.17.4.

B::Deparse был обновлён до самого 0.20.

Убраны предупреждения, даже если запускается по-под perl -w.

Теперь симпатия разбирает управляющие конструкции циклов на правильном порядке да множественные операции во format-строке нынче и разбираются правильно.

В этом выпуске подавляются точки со запятой во конце журнал формата.

В этом выпуске добавлена пробка для того разбора лексических подпрограмм.

Он в большинстве случаев невыгодный падает возле разборе sort вне аргументов. Теперь возлюбленный корректно опускает запятые во system $prog @args равно exec $prog

bignum, bigint да bigrat были обновлены по 0.33.

Переопределение ради hex равно oct было переписано, решая порядком проблем да внося одно несовместимое изменение:

Прежде, кой бы с модулей use bigint либо — либо use bigrat невыгодный был скомпилирован позже, возлюбленный брал первенство надо другими, приводя для тому, ась? hex да oct безграмотный учитывали маневр других прагм на данной области видимости.

Использование любых с сих трёх прагм приводило для тому, что-то hex да oct изумительный всех других местах программы обрабатывали приманка доводы на списочном контексте равно препятствовали работе вместе с $_, когда-когда вызывались вне аргументов.

Использование все в одинаковой степени кто с сих трёх прагм заставляло oct("1234") возвращать 0234 (для любого числа, неграмотный начинающегося из 0) во любом месте программы. Теперь “1234” транслируются изо восьмеричного ко десятичному, самобытно ото того, находится ли оно во области видимости прагмы либо нет.

Глобальное переопределение, которое устанавливает лексическое употребление hex равно oct, в эту пору учитывает любые существующие переопределения, которые действовали перед включения нового переопределения, возвращая их вовне поведение области поведение use bignum.

use bignum "hex", use bignum "oct" равным образом подобные вызовы чтобы bigint равным образом bigrat об эту пору экспортируют функции hex тож oct наместо создания глобального переопределения.

Carp был обновлён перед 0.29.

Carp более неграмотный приходит во замешательство, ежели caller возвращает undef про пакета, что был удалён.

Функции longmess() равным образом shortmess() в настоящий момент задокументированы.

CGI был обновлён по 0.63.

Нераспознаваемые экранирующие последовательности HTML ныне обрабатываются лучше, проблемные завершающие переводы строк в большинстве случаев никак не вставляются за тегов <form> функциями startform() иначе start_form(), да ложное отведение “Insecure Dependency” (небезопасная зависимость) сверху некоторых версиях perl сейчас обходится.

Class::Struct был обновлён перед 0.64.

Конструктор нынче учитывает переопределённый манера доступа [perl #29230].

Compress::Raw::Bzip2 был обновлён до самого 0.060.

Неправильное употребление «магического» API Perl было исправлено.

Compress::Raw::Zlib был обновлён впредь до 0.060.

Была обновлена поставляемая вместе с модулем читальня zlib вплоть до версии 0.2.7

Были исправлены ошибки сборки получай Irix, Solaris равно Win32, а в свой черед монтаж со использованием C++ [rt.cpan.org #69985], [rt.cpan.org #77030], [rt.cpan.org #75222].

Неправильное приложение «магического» API Perl было исправлено.

compress(), uncompress(), memGzip() да memGunzip() были ускорены из-за счёт больше эффективной проверки параметров.

CPAN::Meta::Requirements был обновлён по 0.122.

Обрабатываются undef-зависимости во from_string_hash что 0 (с предупреждением).

Добавлен средство requirements_for_module.

CPANPLUS был обновлён поперед 0.9135.

Разрешено присовокуплять blib/script для PATH.

Сохраняется предание среди запусками командной строки.

Лучше поддерживаются множественные доводы в целях makemakerargs равным образом makeflags.

Исправлены проблемы из SQLite-движком.

Data::Dumper был обновлён вплоть до 0.145.

Было оптимизировано работа хеша еще обработанных скаляров исключительно близ необходимости, тем самым много значит повышена натиск сериализации.

Были добавлены дополнительные тесты для того улучшения покрытия операторов, веток, условий да подпрограмм. По данным анализа покрытия, кое-какие ливер Dumper.pm были переработаны. Почти весь методы днесь задокументированы.

DB_File был обновлён вплоть до 0.827.

Основной Perl-модуль сильнее безграмотный использует конструкцию

Devel::Peek был обновлён до самого 0.11.

Были исправлены реальность сборки компилятором C++ равно работы от новым pad API.

Digest::MD5 был обновлён накануне 0.52.

Исправлен откат получай Digest::Perl::MD5 на ОО-интерфейсе [rt.cpan.org #66634].

Digest::SHA был обновлён поперед 0.84.

Исправлена просчет из двойным освобождением памяти, которая могла повергать для уязвимости на некоторых случаях.

DynaLoader был обновлён накануне 0.18.

Сделано небольшое коррекция во XS пользу кого VMS-реализации.

Исправлено предсказание об использовании секции CODE без участия секции OUTPUT.

Encode был обновлён накануне 0.49.

Был добавлен алиас x-mac-ce про Mac равно исправлены ошибки во Encode::Unicode, Encode::UTF7 да Encode::GSM0338.

Env был обновлён до самого 0.04.

Его проведение в жизнь SPLICE сильнее далеко не ведёт себя патологически во списочном контексте.

ExtUtils::CBuilder был обновлён поперед 0.280210.

Файлы манифестов об эту пору корректно встраиваются в целях тех версий VC++, которые используют их. [perl #111782, #111798].

Список экспортируемых символов может состоять передан на link() получай Windows, где-то но по образу да бери других ОС [perl #115100].

ExtUtils::ParseXS был обновлён накануне 0.18.

Генерируемый C-код днесь избегает ненужного увеличения PL_amagic_generation бери версиях Perl, идеже сие делается автопилотом (или держи текущем Perl, идеже аргумент хлеще безвыгодный существует).

Это устраняет ложное предсказание об инициализированном XSUB сверх параметров [perl #112776].

File::Copy был обновлён поперед 0.26.

copy() лишше отнюдь не обнуляет файлы около копировании во оный но индекс равным образом в настоящее время завершается не без; ошибкой (как сие было давным-давно задокументировано), эпизодически пытается имитировать обложка на самого себя.

File::DosGlob был обновлён предварительно 0.10.

Внутренний кэш имён файлов, кой возлюбленный поддерживает пользу кого каждого вызывающего, сегодня освобождается, когда-когда освобождается смелый код. Это означает, что-нибудь на use File::DosGlob "glob"; eval "scalar <*>" сильнее невыгодный утекает память.

File::Fetch был обновлён по 0.38.

Добавлена опция ‘file_default’ пользу кого URL, которые далеко не имеют файловой составляющей.

Используйте File::HomeDir, ежели доступно, равным образом выставляйте PERL5_CPANPLUS_HOME пользу кого замены автоопределения.

Всегда запрашивает CHECKSUMS, буде установлен fetchdir.

File::Find был обновлён впредь до 0.23.

Была исправлена несовместимая отделка unix-путей держи VMS.

Выборочные файлы об эту пору могут указываться на списках директорий интересах поиска [perl #59750].

File::Glob был обновлён накануне 0.20.

В File::Glob произведено так но исправление, который равным образом во File::DosGlob. Поскольку то есть его использует принадлежащий хирург glob (кроме VMS), сие означает, в чем дело? во eval "scalar <*>" чище перевелся утечки.

Список разделённых пробелом шаблонов, возвращающий длительный ведомость результатов, значительнее малограмотный приводит ко повреждению памяти иначе аварийному завершению. Эта осложнение появилась на Perl 0.16.0. [perl #114984]

File::Spec::Unix был обновлён до самого 0.40.

abs2rel может следовательно невежливый результат, буде получает двойка относительных пути alias двум корневых директории [perl #111510].

File::stat был обновлён впредь до 0.07.

File::stat игнорирует прагму filetest равно предупреждает, разве используется во комбинации со ней. Но предупреждения неграмотный выдавалась близ использовании -r. Это было исправлено [perl #111640].

-p сегодня работает равным образом отнюдь не возвращает измышления ради каналов [perl #111638].

Ранее перегруженные операторы -x равно -X изо File::stat малограмотный давали правильных результатов на директорий другими словами исполнимых файлов, неравно были запущены из правами root. Они рассматривали монополия исполнения интересах root в свой черед вроде да чтобы всех других пользователей, выполняя проверку вхождения во группу на файлов, далеко не принадлежащих root. Теперь они следуют правильному поведению на Unix — чтобы директорий они издревле истинны, а для того файла, ежели каждый с трёх битов разрешения запуска установлен, они сообщают, сколько root может пустить файл. Встроенные операторы -x да -X денно и нощно работали правильно.

File::Temp был обновлён вплоть до 0.23

Исправлены неодинаковые ошибки, связанные со удалением директорий. Откладывается исключение временных файлов, когда первоначальное смахивание завершаются неудачей, сие исправляет проблемы получай NFS.

GDBM_File был обновлён впредь до 0.15.

Недокументированный добровольный пятый параметр для TIEHASH был удалён. Он задумывался для того предоставления контроля по-над колбэком, используемым функциями gdbm* во случае фатальных ошибок (такие по образу проблемы файловой системы), так безвыгодный работал (и вовеки далеко не работал). Ни одинокий устройство в CPAN даже если безвыгодный предпринимал попыток его использования. Колбэк сегодня во всякое время согласно умолчанию croak. Были решены проблемы не без; тем, вроде получи и распишись некоторых платформах вызывается C-функция croak.

Hash::Util был обновлён по 0.15.

hash_unlocked равно hashref_unlocked об эту пору возвращают истину, коли хеш разблокирован, на смену того, с целью неумолчно возвращать неточность [perl #112126].

hash_unlocked, hashref_unlocked, lock_hash_recurse равным образом unlock_hash_recurse в эту пору доступны на экспорта [perl #112126].

Были добавлены двум новые функции: hash_locked равно hashref_locked. Как сие ни странно, обе сих функции уж экспортировались вопреки получи то, ась? они неграмотный существовали [perl #112126].

HTTP::Tiny был обновлён накануне 0.025.

Добавлены внутренние резервы проверки SSL [github #6], [github #9].

Включается заключительный URL во хеш-ссылку ответа.

Добавлена опция local_address.

Улучшена подпора SSL.

IO был обновлён давно 0.28.

sync() сейчас дозволяется возбуждать получи и распишись доступных всего лишь сверху редакция файловых дескрипторах [perl #64772].

IO::Socket пытается полегче кэшировать или — или на противном случае выудить информацию с сокета.

IPC::Cmd был обновлён перед 0.80.

Используется POSIX::_exit взамен exit во run_forked [rt.cpan.org #76901].

IPC::Open3 был обновлён давно 0.13.

Функция open3() свыше малограмотный использует POSIX::close() в целях закрытия файлового дескриптора, приблизительно как бы сие ломает подсчёт ссылок файловых дескрипторов, что ведёт PerlIO во случаях, когда файловые дескрипторы разделены потоками PerlIO, в чем дело? приводит для попыткам закрытия файлового дескриптора нет слов дальнейший раз, при случае все равняется кто изо подобных PerlIO потоков закрывается позже.

Locale::Codes был обновлён давно 0.25.

Он заключает отдельные люди новые коды.

Memoize был обновлён прежде 0.03.

Исправлена опция кэша MERGE.

Module::Build был обновлён по 0.4003.

Исправлена проблема, в отдельных случаях модули без участия $VERSION могли заключать версию ‘0’, указанную во метаданных ‘provides’, которая короче отклоняться на PAUSE.

Исправлена засада на PodParser к разрешения цифр на именах модулей.

Исправлена проблема, когда-никогда повторное инструкция аргументов приводит ко тому, который они становятся массивами, приводящее ко тому, что-нибудь пути установки превращались на подобное ARRAY(0xdeadbeef)/lib/Foo.pm.

Небольшая засада была исправлена, позволяя эксплуатнуть разметку около начального “Name” во строке POD “abstract”, равным образом было выполнено изрядно улучшений на документации.

Module::CoreList был обновлён накануне 0.90

Информация что касается версии сейчас сохраняются на виде дельт, что-нибудь много сбавляет размер файла CoreList.pm.

Восстановлена совместность со старыми версиями perl равно подчищены документация списка базовых пакетов для того различных модулей.

Module::Load::Conditional был обновлён накануне 0.54.

Исправлено эксплуатация requires на perl, установленного во пути, содержащем пробелы.

Различные улучшения, в томище числе эксплуатация нового модуля Module::Metadata.

Module::Metadata был обновлён накануне 0.000011.

Создание объекта Module::Metadata для того типичного файла модуля ускорено будто в 00%, равно отдельный ложные предупреждения что до $VERSION были подавлены.

Module::Pluggable был обновлён по 0.7.

В ряду других изменений об эту пору разрешено контрафакция триггеров для событиях, которое даёт старшие потенциал по части изменению поведения.

Net::Ping был обновлён впредь до 0.41.

Исправлено до некоторой степени падающих тестов для Windows.

Opcode был обновлён перед 0.25.

Отражено исключение опкода boolkeys да добавка опкодов clonecv, introcv равным образом padcv.

overload был обновлён по 0.22.

no overload днесь предупреждает об ошибочных аргументах, наравне да use overload.

PerlIO::encoding был обновлён вплоть до 0.16.

Это модуль, какой-никакой реализует интеллигенция “:encoding(…)” ввода/вывода. Он значительнее малограмотный повреждает мнема да никак не падает, разве кодирующий шифр опять выделяет жопень не так — не то возвращает typeglob либо — либо разделяемый бесспиновый разъяснение хеша.

PerlIO::scalar был обновлён давно 0.16.

Передаваемый скаляр сиськи в настоящий момент может довольствовать токмо кодовые точки 0xFF иначе ниже. [perl #109828]

Perl::OSType был обновлён прежде 0.003.

Исправлена оплошность определения операционной системы VOS.

Pod::Html был обновлён впредь до 0.18.

Была восстановлена опция --libpods. Она устарела, равным образом её употребление околесица никак не делает, не считая выдачи предупреждения, сколько симпатия отнюдь не поддерживается.

Так во вкусе HTML-файлы генерируются от через pod2html, кой уверяет, который использует кодировку UTF-8, учет файлов идёт от использованием UTF-8 [perl #111446].

Pod::Simple был обновлён давно 0.28.

Несколько улучшений было уже во основном во Pod::Simple::XHTML, каковой вот и все имеет совместимое изменение: опция codes_in_verbatim отключена до умолчанию. Смотрите целое детали на cpan/Pod-Simple/ChangeLog.

re был обновлён перед 0.23

Односимвольные классы символов, наравне /[s]/ либо — либо /[s]/i сейчас оптимизируются, что неравно бы они да отнюдь не имели скобок, т.е. /s/ или — или /s/i.

Смотрите критика насчёт op_comp во секции “Внутренние изменения” ниже.

Safe был обновлён поперед 0.35.

Исправлено сольватация из Devel::Cover.

Не выполняется eval стих рядом действии no strict.

Scalar::Util был обновлён накануне 0.27.

Исправлена предмет внимания от sum.

first да reduce сейчас проверяет первоначально колбэк (таким образом &first(1) днесь невыгодный позволяется).

Исправлен tainted получай магических значениях [rt.cpan.org #55763].

Исправлен sum нате вперед магических значениях [rt.cpan.org #61118].

Исправлено прочитывание следовать пределами фиксированного титьки [rt.cpan.org #72700].

Search::Dict был обновлён впредь до 0.07.

Больше неграмотный надо stat бери файловых дескрипторах.

Используйте fc на приведения ко одному регистру.

Socket был обновлён вплоть до 0.009.

Были добавлены константы да функции, требуемые интересах членства во исходных группах IP мультискаста.

unpack_sockaddr_in() да unpack_sockaddr_in6() днесь возвращает всего лишь IP-адрес на скалярном контексте, равным образом inet_ntop() днесь защищён ото некорректной длины скаляра, передаваемого ему.

Исправлено прочтение неинициализированной памяти.

Storable был обновлён до самого 0.41.

Изменение $_[0] в середине STORABLE_freeze значительнее безвыгодный приводит ко краху [perl #112358].

Объект, чей-нибудь жанр реализует STORABLE_attach, сейчас размораживается лишь сам раз, в некоторых случаях присутствуют серия ссылок в него на структуре, которая размораживается [perl #111918].

Ограниченные хеши далеко не завсегда размораживались корректно [perl #73972].

Storable хорош обнаруживать ошибку около замораживании благословенной ссылки объекта из методом STORABLE_freeze() [perl #113880].

Теперь симпатия может тормозить да размораживать корректно vstrings. Это приводит ко незначительному несовместимому изменению на формате хранения, посему трансформирование формата была увеличена до самого 0.9.

Также содержатся непохожие исправления, включающие исправления совместимости со ранними версиями Perl да обработки vstring.

Sys::Syslog был обновлён перед 0.32.

Содержится серия исправлений ошибок, связанных со getservbyname(), setlogsock() да уровнями логов во syslog(), вместе из исправлениями для того Windows, Haiku-OS равно GNU/kFreeBSD. Смотрите целое детали во cpan/Sys-Syslog/Changes

Term::ANSIColor был обновлён прежде 0.02.

Добавлена крыша про курсива.

Улучшена манипуляция ошибок.

Term::ReadLine был обновлён по 0.10.

Было исправлено эксплуатация оболочек cpan равным образом cpanp держи Windows во случае, кабы этот снаряд охватывает обложка \\dev\\tty .

Test::Harness был обновлён по 0.26.

Исправлена значение glob в Win32 [rt.cpan.org #49732].

Не используется Win32::GetShortPathName около вызове perl [rt.cpan.org #47890].

Игнорируется -T быть чтении шебанга [rt.cpan.org #64404].

Более роскошно обрабатывается случай, при случае наша сестра безвыгодный знаем статуса wait теста.

Реализована достижимость переопределения строчки отчёта теста ‘ok’, равным образом видоизменение её на плагине, в надежде произвести умозаключение prove неизменным.

Не запускаются файлы, доступные интересах ежедневник ради всех.

Text::Tabs равно Text::Wrap были обновлены до самого 0012.0818.

В что один была добавлена поддержание комбинированных символов Юникода.

threads::shared был обновлён вплоть до 0.31.

Добавлена опция, которая предупреждает alias игнорирует попытки клонировать структуры, которые малограмотный могут оказываться клонированы, возмещение безусловного падения во таких случаях.

Добавлена опора переменных от двойным значением, создаваемые из через Scalar::Util::dualvar.

Tie::StdHandle был обновлён накануне 0.3.

READ об эту пору учитывает соображение отступа во read [perl #112826].

Time::Local был обновлён накануне 0.2300.

Значения секунд сильнее 09, так в меньшей степени 00 лишше далеко не приводят ко ошибкам во timegm() да timelocal().

Unicode::UCD был обновлён по 0.53.

Была добавлена связка all_casefolds(), которая возвращает всегда случаи регистрового изменения.

Win32 был обновлён накануне 0.47.

Новые API были добавлены чтобы получения равно установки текущей кодовой страницы.

Удалённые модули равно прагмы

Version::Requirements был удалён с базового дистрибутива. Теперь дьявол доступен почти другим именем: CPAN::Meta::Requirements.

Документация

Изменения во существующей документации

perlcheat

perlcheat был реорганизован равным образом было добавлено сколько-нибудь новых секций.

perldata

Теперь откровенно документировано действия инициализации хеша списком, какой включает дублирующие ключи.

perldiag

Объяснение, с какой радости символические ссылки запрещены быть “strict refs”, пока что безграмотный предполагает, что такое? пользователь наслышан со тем, аюшки? представляют лицом символические ссылки.

perlfaq

perlfaq был синхронизирован не без; версией 0.0150040 для CPAN.

perlfunc

Возвращаемое ценность pipe в эту пору задокументировано.

Прояснена данные our.

perlop

Команды управления циклом (dump, goto, next, last да redo) постоянно имели оный но приоритет, ась? равным образом операторы присвоения, хотя сие никак не было задокументировано прежде сего времени.

Диагностика

Следующие дополнения тож изменения были сделаны во диагностическом выводе, начиная предупреждения сиречь сведения насчёт фатальных ошибках. Для полного списка диагностических изменений как вам угодно на perldiag.

Новая проверка

Новые ошибки

Unterminated delimiter for here document

Это извещение пока что появляется, если пятно встроенного документа имеет первоначальный примета цитирования, так таки да нет завершающий.

Это замещает некорректное извещение об ошибке, почто отнюдь не найдена самочки метина [perl #114104].

panic: child pseudo-process was never scheduled

Эта опечатка выводится, рано или поздно порождённый псевдо-процесс на ithreads реализации получи и распишись Windows безвыгодный был запланирован из-за возможный промежуток времени равно таким образом неграмотный дым присутствовать инициализирован корректно [perl #88840].

Group name must start with a non-digit word character in regex; marked by <– HERE in m/%s/

Эта погрешность была добавлена в целях (?&0), которая некорректна. Раньше выводилось непонятное уведомление об ошибке [perl #101666].

[Can’t use an undefined value as a subroutine reference](http://search.cpan.org/perldoc?perldiag#Can’t use an undefined value as %s reference)

Вызов неопределённого значения во вкусе подпрограммы сейчас выводит данное передача об ошибке. Раньше оно присутствовало, однако нечаянно было отключено спервоначала во Perl 0.004 на немагических переменных, спустя время на Perl v5.14 ради магических (например, связанных) переменных. Теперь оно было восстановлено. На протяжении сего времени undef рассматривался вроде бесплодная абзац [perl #113576].

[Experimental “%s” subs not enabled](http://search.cpan.org/perldoc?perldiag#Experimental “%s” subs not enabled)

Для использования лексических подпрограмм ваша милость должны сперва заключить их:no warnings "experimental::lexical_subs"; use feature "lexical_subs"; my sub foo { ... }

Новые предупреждения

‘Strings with code points over 0xFF may not be mapped into in-memory file handles’

[‘%s’ resolved to ‘\o{%s}%d’](http://search.cpan.org/perldoc?perldiag#‘%s’ resolved to ‘\o{%s}%d’)

‘Trailing white-space in a charnames alias definition is deprecated’

‘A sequence of multiple spaces in a charnames alias definition is deprecated’

[‘Passing malformed UTF-8 to “%s” is deprecated’](http://search.cpan.org/perldoc?perldiag#Passing malformed UTF-8 to “%s” is deprecated)

[Subroutine “&%s” is not available](http://search.cpan.org/perldoc?perldiag#Subroutine “&%s” is not available)

(Категория closure) Во минута компиляции внутренняя именованная подпрограмма не в таком случае — не то eval пытаются проэксплуатировать внешнюю лексическую подпрограмму, которая недоступна во настоящий момент. Это может проистекать соответственно две причинам. Во-первых, лексическая подпрограмма могла состоять объявлена умереть и никак не встать внешней анонимной подпрограмме, которая ещё безвыгодный была создана. (Помните, сколько именованные подпрограммы создаются держи этапе компиляции, на так минута наравне анонимные подпрограммы создаются изумительный времена выполнения). Например:sub { my sub a {...} sub f { \&a } }

Ко времени, в некоторых случаях создаётся f, возлюбленная малограмотный может обрести подступ для текущей подпрограмме “a”, беспричинно на правах анонимная подпрограмма ещё никак не была создана. И наоборот, следующее формулировка отнюдь не выдаст предупреждение, этак на правах анонимная подпрограмма еще была создана равно доступна:sub { my sub a {...} eval "sub f { \&a }" }->();

Вторая обстоятельства вызвана функцией eval, которая обращается для переменной, которая еще ушла изо области видимости, например:sub f { my sub a {...} sub { eval "\&a" } } f()->();

Здесь, нет-нет да и \\&a в утробе eval компилируется, f() во настоящий минута безвыгодный выполняется равным образом следственно его &a невыгодный доступна.

[“%s” subroutine &%s masks earlier declaration in same %s](http://search.cpan.org/perldoc?perldiag#“%s” subroutine &%s masks earlier declaration in same %s)

(Категория misc) Подпрограмма “my” другими словами “state” была снова объявлена на текущей области видимости либо — либо операторе, уничтожая дорога для предыдущему экземпляру. Это прагматично век опечатка. Обратите внимание, аюшки? ранняя подпрограмма как и прежде хорошенького понемножку водиться вплоть до завершения текущей области видимости тож непостоянно по сию пору замыкания, ссылающиеся сверху неё, невыгодный будут уничтожены.

The %s feature is experimental

(Категория experimental) Это предсказание выводится, если ваша милость подключаете экспериментальные внутренние резервы от через use feature. Просто подавляйте предупреждение, кабы вас хотите пустить в дело эту возможность, а делая так, ваша сестра берёте получи себя риски использования экспериментальной возможности, которая может видоизмениться сиречь хорошенького понемножку удалена на будущей версии Perl:no warnings "experimental::lexical_subs"; use feature "lexical_subs";

sleep(%u) too large

(Категория overflow) Вы вызвали sleep со числом, которое больше, нежели возлюбленный может надёжно принять, да sleep, вероятно, довольно уснуть меньшее время, нежели было запрошено.

Wide character in setenv

Попытки пристроить широкие символы во переменные окружения сквозь %ENV в эту пору выдают подобное предупреждение.

“Invalid negative number (%s) in chr”

chr() в эту пору предупреждает, эпизодически ему передаётся отрицательное ценность [perl #83048].

“Integer overflow in srand”

srand() нынче предупреждает, разве переданное роль никак не помещается на UV (так что достоинство хорошенького понемножку обрезано да малограмотный произойдёт переполнения) [perl #40605].

“-i used with no filenames on the command line, reading from STDIN”

Запуск perl со ключом -i сегодня выводит предупреждение, неравно безвыгодный было подмеченно ни одного входного файла на командной строке [perl #113410].

Изменения во существующией диагностике

$\* is no longer supported

Предупреждение что касается том, зачем приложение $* да $# вяще невыгодный поддерживается, днесь выводится пользу кого каждого участка кода, тот или другой ссылается сверху них. Раньше оно безграмотный выводилось, кабы другая переменная, использовавшая таковский а typeglob, обнаруживалась вперед (например, @* предварительно $*), а тоже безвыгодный выводилось следующий равно последующих записей. (Достаточно горестно починить ошибку вывода предупреждения вообще, минуя того, дабы далеко не изгонять сие предсказание отдельный раз, да предсказание произвольный единовременно согласуется не без; предупреждением, которое выводится с целью $[).

Были добавлены предупреждения для того \b{ равно \B{. Это предупреждения об устаревших конструкциях, которые должны обесточиваться до выключению данной категории. Теперь безвыгодный нельзя не вот и все элиминировать предупреждения регулярных выражений, ради выхлопотать их отключения.

Constant(%s): Call to &{$^H{%s}} did not return a defined value

Перегрузка константы, которая возвращает undef приводит ко подобному сообщению об ошибке. Для числовых констант когда-то выводилось “Constant(undef)”. “undef” был заменён самим числом.

Ошибка, которая выводится, эпизодически устройство отнюдь не может существовать загружен, в эту пору заключает подсказку, кой узел надо ко установке: “Can’t locate hopping.pm in @INC (you may need to install the hopping module) (@INC contains: …)”

vector argument not supported with alpha versions

Это извещение безвыгодный подавлялось пусть даже подле помощи no warnings. Теперь его не возбраняется подавить, равно оно было перемещено изо категории “internal” во категорию “printf”.

Can"t do {n,m} with n > m in regex; marked by <-- HERE in m/%s/

Эта фатальная заблуждение была превращена на предупреждение, которое читается так:

[Quantifier {n,m} with n > m can’t match in regex ](http://search.cpan.org/perldoc?perldiag#Quantifier {n,m} with n > m can’t match in regex)

(Категория regexp) Минимальное роль необходимо оказываться поменьше alias в равной степени максимальному. Если ваш брат всерьёз хотите извлечь тожество 0 раз, без труда задайте {0}.

Предупреждение относительно “Runaway prototype”, которое возникает во редких ситуациях, было удалено по вине бесполезности равным образом противоречивости.

Ошибка “Not a format reference” была удалена беспричинно равно как лишь случай, на котором симпатия выводилось, являлось внутренней ошибкой.

Ошибка “Unable to create sub named %s” была удалена до праздник но причине.

Ошибка ‘Can’t use “my %s” in sort comparison’ была понижена прежде предупреждения ‘“my %s” used in sort comparison’ (со ‘state’ за ‘my’ интересах случая переменных состояния). В дополнение, эмпирия про угадывания, какая изо лексических a равным образом л равным образом b были патологически использованы, была улучшена к снижения количества ложных срабатываний. Лексические a равно b хлеще безграмотный запрещены, буде они выше блока sort. Также именованный единственный другими словами перечневый диспетчер в утробе блока sort пуще далеко не приводит ко игнорированию a равным образом л равным образом b [perl #86136].

Изменения во утилитах

h2xs

h2xs пуще никак не выдаёт неверный адрес интересах пустых определений [perl #20636]

Конфигурация равным образом составление

Добавлена опция useversionedarchname во Configure

Если возлюбленная установлена, в таком случае во ‘archname’ включается авторитет ‘api_versionstring’. Например, x86_64-linux-5.13.6-thread-multi. Она выключена по мнению умолчанию.

Эта мочь была запрошена Тимом Бансом (Tim Bunce), кто заметил, что-нибудь INSTALL_BASE создаёт структуру библиотеки, которая отнюдь не зависит с версии perl. Вместо этого, спирт помещает архитектурно-зависимые файлы на “ i n s t a l l _ b a s e / l i b / p e r l 0/archname”. Это затрудняет пользование общего INSTALL_BASE пути библиотеки из разными версиями perl.

Устанавливая -Duseversionedarchname, $archname бросьте выдаваться по мнению архитектуре and в соответствии с версии API, позволяя смешанное приложение INSTALL_BASE.

Добавлена опция PERL_NO_INLINE_FUNCTIONS.

Если определена PERL_NO_INLINE_FUNCTIONS, так малограмотный включается аншлаг “inline.h”.

Это позволяет порождать код, включающий perl-заголовки пользу кого определений, помимо создания зависимости держи библиотеку perl быть компоновке (которая ещё может малограмотный существовать).

Configure учитывает внешнюю переменную окружения MAILDOMAIN, если бы возлюбленная установлена.

installman более отнюдь не игнорирует опцию тишины.

Оба файла META.yml равным образом META.json ныне включаются во дистрибутив.

Configure днесь корректно определяет isblank() близ сборке не без; через компилятора C++.

Обнаружение утилиты постраничного вывода на Configure было улучшено да позволяет выделять опции затем имени программы, например, /usr/bin/less -R , неравно читатель принимает роль в области умолчанию. Это позволяет perldoc подле обработке ANSI-экранирования [perl #72156].

Тестирование

Тестовый подборка ныне включает секцию тестов, которые требуют ужас большого количества памяти. Эти тесты безграмотный запускаются соответственно умолчанию; они могут фигурировать включены установкой переменной окружения PERL_TEST_MEMORY со значением количества гибибайт памяти, которое может присутствовать невредно использовано.

Поддержка платформ

Более неподдерживаемые платформы

BeOS

BeOS была операционной системой чтобы персональных компьютеров, разрабатываемой Be Inc, спермоначально пользу кого их аппаратной платформы BeBox. ОС Haiku была создана во вкусе возмещение вместе с открытыми исходниками с целью продолжения развития BeOS равно его perl-порт получай сей секунда по полной обойме поддерживается.

UTS Global

Поддерживающий код, характеризующий для UTS global, был удалён. UTS являлся версией System V интересах мейнфреймов, созданной Amdahl, а кроме проданной UTS Global. К порту безграмотный притрагивались, начиная со Perl v5.8.0, равным образом UTS Global бери этот минута неграмотный функционирует.

VM/ESA

Поддержка с целью VM/ESA была удалена. Порт был протестирован получи 0.3.0, какой-никакой перестал поддерживаться IBM не без; марта 0002. Для 0.4.0 завершилось прислуживание на июне 0003 равно было заменено получи и распишись Z/VM. Текущая разночтение Z/VM V6.2.0 да запланирована для окончанию поддержки для 0015/04/30.

MPE/IX

Поддержка ради MPE/IX была удалена.

EPOC

Поддерживающий шифр в целях EPOC был удалён. EPOC являлся семейством операционных систем, разрабатываемых во Psion ради мобильных устройств. Он являлся предшественником Symbian. Порт концевой однова был обновлён во апреле 0002.

Rhapsody

Поддержка на Rhapsody была удалена.

Платформо-специфичные критика

AIX

Configure нынче всякий раз добавляет -qlanglvl=extc99 во CC флаги получи AIX, ежели используется xlC. Это позволяет опошлить сборку XS модулей, которые предполагают C99 [perl #113778].

clang++

Теперь присутствует обходное резолюция интересах ошибки на компиляторе, которая препятствовала сборке вместе с использованием clang++ начиная вместе с Perl v5.15.7 [perl #112786].

C++

При сборке ядра Perl равно как C++ (что едва немного поддерживается), математические функции компилируются как бы extern "C", к гарантированной бинарной совместимости. (Однако, бинарная противоречивость во общем случае никак не гарантируется во любом случае на ситуациях, идеже бы сие имело значение).

Darwin

Убрано жёстко заданное компенсация ко 0-байтовым границам к исправления сборки вместе с использованием -Dusemorebits.

Haiku

Perl в настоящий момент надо трудиться изо коробки для Haiku R1 Alpha 0.

MidnightBSD

libc_r был удалён во последних версиях MidnightBSD, а поздние версии отличается как небо с земли работают вместе с pthread. Многопоточноть днесь включается вместе с использованием pthread, который исправляет сборочные ошибки быть сборке от включённой многопоточностью держи 0.4-CURRENT.

Solaris

Configure избегает запуска команды sed от флагами, которые невыгодный поддерживаются бери Solaris.

VMS

Где возможно, медиум имён файлов равно аргументов командной строки в настоящий момент сохраняется вслед за счёт включения возможностей CRTL DECC$EFS_CASE_PRESERVE равно DECC$ARGV_PARSE_STYLE около запуске. Последний действует лишь коли уширенный анализ включён на процессе, с которого запускается Perl.

Набор символов в целях расширенного файлового синтаксиса (EFS) сейчас включается в соответствии с умолчанию бери VMS. Среди прочего сие даёт лучшую обработку точек на именах директорий, нескольких точек во именах файлов да пробелах на файловых именах. Чтобы надергать минувшее поведение, установите логическое прозвание DECC$EFS_CHARSET во достоинство DISABLE.

Исправлена компонование сверху сборках, сконфигурированных из -Dusemymalloc=y.

Экспериментальная поддержание сборки Perl от через компилятора HP C++ доступна быть конфигурации из -Dusecxx.

Все заголовочные файлы C изо верхней директории дистрибутива в настоящее время устанавливаются получи и распишись VMS, согласованно вместе с устоявшейся эмпирически держи других платформах. Ранее устанавливалась токмо часть, что-нибудь ломало сборку внешних расширений в целях расширений, которые зависят через отсутствующих заголовочных файлов.

Цитирование удалено с командных слов (но безвыгодный изо параметров) на команд, вызываемых чрез system, обратные кавычки иначе open от перенаправлением. Раньше кавычки нате командах пропускались от DCL, который-нибудь был в силах неграмотный разнюхать команду. Также, кабы главенство сие на действительности траектория ко образу не так — не то командной процедуре получи томе ODS-5, цитирование нынче позволяет проэксплуатировать пути, содержащие пробелы.

Сборка a2p была исправлена ради компилятора HP C++ бери OpenVMS.

Win32

Perl ныне может состоять собран не без; использованием компилятора Visual C++ 0012 Microsoft рядом указании CCTYPE=MSVC110 (или MSVC110FREE, неравно ваша сестра используете бесплатную Express-версию с целью десктопа Windows) во win32/Makefile.

Опция для того сборки без участия USE_SOCKETS_AS_HANDLES была удалена.

Исправлена проблема, когда-когда perl был в силах валиться близ очистке нитей (включая главную нить) во сборках со многопоточностью равно отладочными символами для Win32 и, возможно, держи других платформах [perl #114496].

Редкая наворот гонки, которая приводит ко тому, который sleep занимает значительнее времени, нежели запрошено равным образом что хоть зависает, в эту пору была исправлена [perl #33096].

link для Win32 об эту пору пытается определить $! во больше уместное значение, основанное в коде ошибки Win32 API [perl #112272].

Perl значительнее далеко не портит устройство окружения, возьмем около запуске нового подпроцесса, когда-когда слои заключает не-ASCII символы. Однако, известные проблемы старым порядком остаются, если бы общество заключает символы кроме текущей кодовой таблицы ANSI (например, как вам угодно установка в области Юникоду на %ENV на http://perl5.git.perl.org/perl.git/blob/HEAD:/Porting/todo.pod). [perl #113536]

Сборка perl некоторыми Windows-компиляторами сначала завершалась ошибкой за проблем со оператором glob во miniperl (который использует программу perlglob), удалявшими переменную окружения PATH [perl #113798].

Была добавлена новая опция про Windows makefile’ов USE_64_BIT_INT. Установите её во авторитет “define” быть сборке 02-битного perl, кабы ваша сестра хотите, воеже некто использовал 04-битные целые.

Уменьшение размера машинного кода, которое сейчас было сделано чтобы DLL XS-модулей на Perl v5.17.2, днесь было расширенно равным образом получи DLL самого perl.

Сборка со через VC++ 0.0 была по нечаянности сломана во Perl v5.17.2, так нынче была восстановлена.

WinCE

Сборка получай WinCE нынче сызнова стала возможна, всё же хлеще работы надобно чтобы полного восстановления чистой сборки.

Внутренние изменения

Были созданы синонимы пользу кого вводящего во заблуждения имени av_len(): av_top_index() да av_tindex. Все три возвращают самый старший указатель во массиве, а невыгодный сумма элементов, что возлюбленный содержит.

SvUPGRADE() лишше неграмотный является выражением. Изначально текущий макрос (и используемая на нём назначение sv_upgrade()) был задокументирован по образу логический, ежели и во реальности они вечно падали сверху ошибках да в жизнь не отнюдь не возвращали ложное значение. В 0005 факты была обновлена от указанием, зачем возвращается нескладица значение, да на обратной совместимости SvUPGRADE() во всякое время возвращал 0. Теперь сие было удалено, равным образом SvUPGRADE() в настоящий момент является оператором, какой безвыгодный возвращает никакого значения.

Таким образом, сие в настоящий момент синтаксическая ошибка:if (!SvUPGRADE(sv)) { croak(...); }

Если у вам убирать похожий код, не мудрствуя лукаво замените его наSvUPGRADE(sv);

alias пользу кого избежания предупреждения компилятора со старыми версиями perl возможно(void)SvUPGRADE(sv);

Perl имеет новейший прибор копирования-при-записи, тот или иной позволяет любым SvPOK-скалярам оказываться улучшенным предварительно скаляра, копируемого-при-записи. Число ссылок сверху ягодицы строки сохраняется во самом буфере строки. Эта способ невыгодный включена соответственно умолчанию .

Он может состоять включён на сборке perl быть помощи запуска Configure из флагом -Accflags=-DPERL_NEW_COPY_ON_WRITE , равно автор сих строк призываем XS-авторов отведать частный шифр для perl, собранным подобном образом, да отослать приманка отзывы. К сожалению, все еще в отлучке хорошего руководства в целях обновления XS-кода для того работы вместе с COW. Пока таковский документация недоступен, обращайтесь следовать консультациями во почтовый перечень рассылки perl5-porters.

Он ломает кое-какие XS-модули, позволяя копируемым-при-записи скалярам возникать на коде, идеже шишка на ровном месте первоначально безвыгодный ожидал их видеть.

Копирование-при-записи лишше никак не использует флаги SvFAKE да SvREADONLY. Следовательно, SvREADONLY нынче показывает со всей серьезностью доступные всего только получай зачитывание SV.

Используйте SvIsCOW макрос (как да раньше) чтобы идентификации скаляров, копируемых-при-записи.

PL_glob_index исчез.

Приватный Perl_croak_no_modify лишился параметра своего контекста. Теперь у него незначащий прототип. Пользователи публичного API croak_no_modify остаются незатронутыми.

Копируемые-при-записи (разделяемый контролька хеша) скаляры пуще безвыгодный помечаются на правах доступные только лишь для того чтения. SvREADONLY возвращает неправда для подобных SV, только SvIsCOW по старинке возвращает истину.

Появился свежеиспеченный вид операций OP_PADRANGE. Оптимизатор perl, идеже возможно, заменит сверху одиночную операцию padrange операцию pushmark не без; последующей одной другими словами несколькими pad-операциями, и, возможно, пропуская операции list равным образом nextstate. В дополнение, деятельность может схватить задачу, связанную не без; RHS присвоения my(...)=@_, дабы сии операции да могли являться оптимизированы.

Регистро-независимое сопоставление в утробе заключённых на скобки символьных классов от многосимвольной формой лишше невыгодный исключает одну с возможностей на случаях, от случая к случаю оно используется не ась? иное интересах сего [perl #89774].

PL_formfeed был удалён.

Движок регулярных выражений пуще отнюдь не читает единолично байт за конца целевой строки. Для всех морально корректно сформированных скаляров сие отродясь никак не было проблемой, сие видоизменение упрощает практика хитрых трюков со буферами строк на CPAN-модулях [perl #73542].

Внутри блока BEGIN PL_compcv сейчас указывает нате компилируемую во известный минута подпрограмму, а отнюдь не возьми самостоятельно содружество BEGIN.

mg_length устарела.

sv_len в настоящий момент век возвращает день байт, а sv_len_utf8 численность символов. Ранее sv_len равно sv_len_utf8 обе были сломанными да от времени до времени возвращали наличность байт, а от времени до времени цифра символов. sv_len_utf8 в большинстве случаев никак не считает, что-нибудь её резон на кодировке UTF-8. Никто изо них свыше безграмотный создаёт UTF-8-кэши чтобы связанных тож перегруженных значений иначе про не-PV.

sv_mortalcopy пока что копирует строковые буферы скаляров разделяемых ключей хеша, нет-нет да и вызывается изо XS модулей [perl #79824].

RXf_SPLIT равно RXf_SKIPWHITE значительнее безграмотный используются. Сейчас они определены по образу 0.

Новый флюгарка RXf_MODIFIES_VARS может оказываться установлен во произвольном движке регулярных выражений с целью указания, в чем дело? пуск регулярного выражения может родить у изменению переменных. Это позволяет s/// знать, в некоторых случаях нужно не замечать определённые оптимизации. Собственный указатель регулярных выражений устанавливает нынешний знак с целью специальных команд прохода от возвратом, которые устанавливают R E G M A R K да REGERROR.

API в целях доступа ко лексическим pad’ам было вопрос жизни и смерти изменено.

PADLIST хлеще безвыгодный является AV, а имеет частный приватный тип. PADLIST нынче охватывает PAD, а PADNAMELIST состоит с PADNAME, а безграмотный AV для того pad равно списка pad-имён. PAD, PADNAMELIST равным образом PADNAME доступны, соответственно, путем появившееся новое pad API, наместо прямого AV равным образом SV API. Смотрите perlapi на подробностей.

В API регулярных выражений функции-колбэки пронумерованных захватов передают индекс, указывающий, ко который переменной осуществлён доступ. Существуют специальные индексные значения для того переменных $, $&, $&. Раньше такие а три значения использовались тоже интересах получения ${^PREMATCH}, ${^MATCH}, ${^POSTMATCH}, хотя они в настоящий момент получили три отдельных значения. Смотрите “Numbered capture callbacks” in perlreapi.

PL_sawampersand прежде был логическим значением, которое указывало, в чем дело? любые с $, $&, $&` были видимы; об эту пору симпатия охватывает три однобитных флага, указывающих получи существование первый встречный с переменных индивидуально.

CV * typemap пока что поддерживает &{} перегрузку равно typeglob’ы, опять же вроде равным образом &{...} [perl #96872].

Флаг SVf_AMAGIC, демонстрирующий возьми перегрузку об эту пору во стэше, а безвыгодный во объекте. Теперь дьявол устанавливается автоматом возле изменении метода сиречь @ISA, приближенно зачем его суть сейчас изменился также. Теперь дьявол означает “потенциально перегружен”. Когда рассчитывается ведомость перегрузок, полотнище бессознательно выключается, когда слыхом не слыхать перегрузка, вследствие чего заметного замедления нет.

Устаревание таблицы перегрузок в настоящее время проверяется, в отдельных случаях вызывается перемещенный метод, а безвыгодный умереть и отнюдь не встать промежуток времени bless.

Магический “A” исчез. Изменения во обработке флага SVf_AMAGIC устранили потребность во нём.

PL_amagic_generation был удалён равно лишше неграмотный нужен. Для XS-модулей сие пока что макрос-псевдоним ко PL_na.

Установка откат-перегрузки сейчас сохраняется на дневной журнал стэша особняком ото самой перегруженности.

Код обработки символов был там и сям подчищен. Изменения должны являться невидимы возьми практике.

Функция study была сделана бездейственной на v5.16. Она была безыскусственно выключена вставкой оператора return; шифр но оставался возьми месте. Теперь сохраняющий код, каковой использовался на study, сполна был удалён.

В perl от поддержкой нитей сильнее не имеется отдельного PV, выделенного к каждого COP к хранения имени его пакета (cop->stashpv). Вместо сего питаться освобождение (cop->stashoff) на новоизобретённый скопление PL_stashpad, тот или иной хранит указатели стэша.

В расширяемом API регулярных выражений строй regexp_engine получила новое край op_comp, которое во настоящий минута используется только лишь ради внутренних целей perl равно достоит взяться инициализировано во NULL другими модулями расширения регулярных выражений.

Новая выражение alloccopstash была добавлена во API, же возлюбленная рассматривается в качестве кого экспериментальная. Смотрите perlapi.

Раньше во Perl было реализовано приобретение магии способом, от времени до времени скрывавшим ошибки на коде, который-нибудь был способным требовать mg_get() ультра- несть единожды для магические значения. Такого сокрытия ошибок более неграмотный происходит, этак что-то давние ошибки ныне могут конституция заметными. Если ваша милость видите относящиеся ко магии ошибки на XS-коде, проверьте, воеже бытовать уверенными, купно вместе с другими Perl API-функциями, которые его используют, сколько вызовы mg_get() происходят лишь только безраздельно однова получи SvGMAGICAL() значения.

Выделение OP пользу кого CV сейчас использует slab-выделение. Это упрощает орган памятью к OP, выделенных интересах CV, почему очистка позже ошибок компиляции попроще равным образом больше безопасна [perl #111462][perl #112312].

PERL_DEBUG_READONLY_OPS был переписан на работы со новым slab-распределителем, позволяя завладевать хлеще нарушений, нежели раньше.

Старый slab-распределитель на OP, тот или другой включался лишь чтобы PERL_IMPLICIT_SYS равно PERL_DEBUG_READONLY_OPS, был удалён.

Выборочные исправления ошибок

Ограничители встроенной документации лишше далеко не требуют звершающего символа новой строки, если бы находятся во конце файла. Это еще было приблизительно во конце строки, выполняемой сквозь eval [perl #65838].

Сборка из -DPERL_GLOBAL_STRUCT в настоящее время освобождает глобальную структуру по прошествии того, равно как закончит эксплуатнуть её.

Завершающий ‘/’ на путях во @INC в большинстве случаев неграмотный дополняется ещё одним ‘/’.

Слой :crlf в настоящее время работает, при случае возвращаемые документация отнюдь не вмещаются на особенный приватный жопа [perl #112244].

ungetc() об эту пору поддерживает данные, кодированные во UTF-8 [perl #116322].

Ошибка на базовых typemap привела ко тому, что-нибудь любые C-типы, которые соответствуют базовому T_BOOL typemap-элементу невыгодный устанавливаются, никак не обновляются равно далеко не модифицируются, при случае T_BOOL-переменная используется во OUTPUT: секции со исключением чтобы RETVAL. T_BOOL во INPUT: секции неграмотный затронуты. Использование возвращаемого будто T_BOOL на XSUB (RETVAL) далеко не было затронуто. Побочным эффектом исправления этой ошибки отсюда следует то, ась? когда T_BOOL указан во секции OUTPUT: (что до тех пор ни ложки безвыгодный меняло с целью SV) равным образом передаётся вразумительный исключительно интересах чтения SV (литерал) во XSUB, происходит заблуждение вида Modification of a read-only value attempted" [perl #115796].

На многих платформах направление имени директории в качестве кого имени скрипта приводило ко тому, что такое? perl безвыгодный делал ни аза равным образом сообщал об успешном запуске. Сейчас некто денно и нощно долженствует извещать об ошибке да увенчиваться вместе с ненулевым кодом возврата [perl #61362].

sort {undef} ... присутствие действии фатальных предупреждений чище безвыгодный падает. Он начал грохнуться во Perl v5.16.

Стэши, благословлённые доброжелатель на друге (bless \%Foo::, "Bar"; bless \%Bar::, "Foo"), пуще безвыгодный приводят для двойному освобождению. Эта задача стала просыпаться на Perl v5.16.

Несколько утечек памяти было исправлено, большая делянка затрагивает фатальные предупреждения равно синтаксические ошибки.

Некоторые несовпавшие регулярные выражения, такие равно как "f"=~ /http://pragmaticperl.com/g, безвыгодный сбрасывали pos. Кроме того, “совпавшие-лишь-раз” шаблоны (m?...?g) неграмотный сбрасывали его также, при случае вызывались следующий однова [perl #23180].

Несколько ошибок, включающие local *ISA равным образом local *Foo::, приводившие для устареванию MRO кэшей, были исправлены.

Определение подпрограммы, от случая к случаю на её typeglob был задан псевдоним, хлеще отнюдь не приводит для устареванию кэшей методов. Эта грех появилась на Perl v5.10.

Локализация typeglob’а, содержащего подпрограмму, если пачка typeglob’а был удалён изо своего родительского стэша, свыше далеко не приводит ко ошибке. Эта оплошность появилась на Perl v5.14.

В некоторых ситуациях local *method=... был в состоянии отнюдь не рождать кэши методов быть выходе с области видимости.

/[.foo.]/ более отнюдь не является ошибкой, же выводит наука (как да раньше) равным образом рассматривается во вкусе /[.fo]/ [perl #115818].

goto $tied_var об эту пору вызывает FETCH прежде тем по образу решит какого в виде оный goto (подпрограмма иначе метка).

Переименование пакетов вследствие присвоение glob (*Foo::=*Bar::; *Bar::=*Baz::) во комбинации не без; m?...? да reset свыше безвыгодный приводит ко падению сборки не без; поддержкой нитей.

Некоторое численность ошибок, относящиеся ко присвоению списка хешу, было исправлено. Многие их них включают списки с повторяющихся ключей вида (1, 0, 0, 0).

Выражение scalar(%h=(1, 0, 0, 0)) об эту пору возвращает 0, а безграмотный 0.

Возвращаемое важность %h=(1, 0, 0) на списочном контексте было неправильным. Раньше возвращало (1, undef, 0), в настоящее время возвращает (1, undef).

Теперь Perl выдаёт такое а предварение для того ($s, %h)=(1, {}), какое симпатия выдаёт пользу кого (%h)=({}), “Reference found where even-sized list expected” (“Найдена удаление там, идеже ожидался опись вместе с чётным в количестве элементов”).

Несколько дополнительных краевых случаев на присвоении списков хешу было исправлено. Для дополнительных деталей постойте коммит 03b7025ebc.

С атрибутами, присвоенными лексическим переменным, пуще безвыгодный утекает кэш [perl #114764].

dump, goto, last, next, redo либо — либо require вместе с последующим тривиальным одно слово (bareword) тож версией равно дале идущим инфиксным оператором свыше далеко не является синтаксической ошибкой. Раньше в такой мере было для того некоторых инфиксных операторов (вроде +), которые имеют другое взаимопонимание того, идеже предвидится звено [perl #105924].

require a::b . 0 равно require a::b + 0 лишше отнюдь не выдаёт ошибочное предсказание что касается двусмысленности [perl #107002].

Вызов метода класса нынче запрещено для того первый встречный строки, а отнюдь не всего строки, начинающейся не без; буквенно-цифрового символа [perl #105922].

Пустой шаблон, сфабрикованный со через qr//, используемый на m///, свыше далеко не вызывает поведения “пустой обычай вторично использует финальный шаблон” [perl #96230].

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

Освобождение связанного хеша закачаешься времена итерации хлеще далеко не приводит ко утечкам памяти.

Присвоение списка связанному массиву иначе хешу, тот или другой умирает подле операции STORE, хлеще никак не приводит ко утечке памяти.

Если хинт-хеш (%^H) является связанным, составляющая области видимости в эпоха компиляции (который копирует хинт-хеш) чище неграмотный теряет память, кабы умирает извещение FETCH [perl #107000].

Вычисление констант вяще неграмотный вызывает неуместное специальное обычай split " " [perl #94490].

defined scalar(@array), defined do { &foo } да однородные конструкции пока что рассматривают довод ко defined по образу аляповатый скаляр [perl #97466].

Запуск отладчика, некоторый неграмотный определяет глоб *DB::DB другими словами невыгодный предоставляет подпрограмму заглушку интересах &DB::DB, лишше никак не приводит для краху, а выдаёт отчёт об ошибке [perl #114990].

reset "" пока что соответствует своей документации. reset сбрасывает всего-навсего лекало m?...? присутствие запуске не принимая во внимание аргумента. Пустая черта во аргументе сейчас безграмотный делает ничего. (Раньше сие рассматривалось по образу лишение аргумента) [perl #97958].

printf вместе с аргументом, возвращающим несерьёзный список, значительнее отнюдь не читает ужотко конца стека, приводившего для ошибочному поведению [perl #77094].

--subname вяще далеко не выдаёт ошибочных неясных предупреждений [perl #77240].

v10 пока что доступна в духе признак сиречь кличка пакета. Это было по нечаянности сломано, нет-нет да и v-строки были добавлены во Perl v5.6 [perl #56880].

length, pos, substr равным образом sprintf могут взяться сбиты от толку связываниями, ссылками да typeglob’ами, коли выходец из могилы их ко строковому виду меняет внутреннее мнение во тож с UTF-8 [perl #114410].

utf8::encode сегодня вызывает FETCH равно STORE сверху связанных переменных. utf8::decode об эту пору вызывает STORE (FETCH ранее был вызван).

$tied=~ s/$non_utf8/$utf8/ вяще отнюдь не зацикливается на вечный цикл, неравно связанная аргумент возвращает строку во Latin-1, разделяемый скаляр ключа хеша, сиречь ссылку, alias typeglob, каковой приводится для строковому виду во вкусе ASCII либо — либо Latin-1. Это была регрессия, начиная вместе с v5.12.

s/// вне /e в настоящее время отличается как небо ото земли определяет, при случае нельзя не слышать не захотеть через определённых оптимизаций, исправляя другие ошибочные ситуации:

Совпадение вместе с переменными на определённых конструкциях (&&, ||, .. равно другие) на части замены; например, s/(.)/$l{$a||$1}/g. [perl #26986]

Псевдонимы возле поиске соответствия переменным на части замещения.

$REGERROR не так — не то $REGMARK на замещении [perl #49190].

Пустой маска (s//$foo/), некоторый приводит для тому, что-нибудь используется заключительный успешно совпавший шаблон, во случае разве штамп заключает кодовый блок, какой изменяет переменные во замещении.

Заражённость замещаемой строки сильнее отнюдь не влияет сверху заражённость возвращаемого значения s///e.

Переменная автоматического сброса буферов $| создаётся возьми лету рядом необходимости. Если сие происходило (например, неравно симпатия была упомянута на модуле иначе говоря на eval), когда-никогда хлещущий выделенный файловый дескриптор был typeglob со пустым IO слотом, вначале сие приводило ко краху [perl #115206].

Номера строк во конце eval строки значительнее невыгодный удлиняются в единицу [perl #114658].

Фильтры @INC (подпрограммы возвращаемые подпрограммами во @INC), которые устанавливают $_ во копируемый-при-записи скаляр, в большинстве случаев неграмотный заставляют парсер пересмотреть данный строковой гидробуфер получи месте.

length($object) хлеще невыгодный возвращает неопределённое значение, даже если предмет имеет перегрузку строки, которая возвращает undef [perl #115260].

Было восстановлено контрафакция PL_stashcache, кэша стэша используемого про поиска имён на вызова методов.

Коммит da6b625f78f5f133 на августе 0011 неожиданно сломал код, какой-никакой получал значения на PL_stashcache. Так на правах сие всего лишь кэш, всё корректно работало равно лишенный чего него.

Ошибка “Can’t localize through a reference” (“Не могу локализировать вследствие ссылку”) исчезла во v5.16.0, когда-никогда local %$ref появлялось бери последней строке lvalue подпрограммы. Эта неловкость исчезла пользу кого \local %$ref во perl v5.8.1. Сейчас возлюбленная была восстановлена,

Разбор встроенной документации был вопрос жизни и смерти улучшен, исправляя небольшую толику ошибок разбора, падений да одной прибыль памяти, а тоже корректируя неверную прогрессия номеров строк подле определённых условиях.

Внутри eval депеша об ошибке интересах нетерминированных встроенных документах свыше далеко не имеет переноса ряд на середине [perl #70836].

Замещение в утробе замещающего шаблона (s/${s|||}//) хлеще малограмотный смущает парсер.

Возможно безвыгодный адски правильное поле с целью разрешения комментариев, же s//"" # hello/e спокон века работало, лишь буде малограмотный было null символа на пороге первым #. Теперь сие работает инда быть наличии null.

Неправильный широта на tr/// тож y/// чище малограмотный приводит для утечке памяти.

Строковой eval пуще отнюдь не рассматривает врач цитирования из точкой запятой на качестве ограничителя на конце строки (eval "q;;") в духе синтаксическую ошибку.

warn {$_=> 0} + 0 сильнее малограмотный является синтаксической ошибкой. Раньше парсер сбивался около определённых списочных операторах не без; последующим анонимным хешем равно подальше идущим инфиксным оператором, каковой разделяет свою форму не без; унарным оператором.

(caller $n)[6] (который возвращает шрифт с eval) до тех пор возвращал острый гидробуфер парсера. Изменение которого могло навести ко краху. Теперь некто спокон века возвращает копию. Возвращаемая ряд более неграмотный включает “\n;” прикреплённый для концу. Возвращаемый формулировка в свою очередь охватывает встроенную документацию, которая сначала пропускалась.

Кэш позиции UTF-8 ныне сбрасывается, около доступе для магическим переменным пользу кого избежания рассинхронизации строкового яички равно кэша позиции UTF-8 [perl #114410].

Были исправлены неодинаковые случаи двухкратного получения магии про магических строк UTF-8.

Этот адрес (когда бог миловал $&)$_="x" x 0_000_000; 1 while /(.)/;

до тех пор пропускал повторение титьки до причине производительности, а страдал сим близ изменении $1, даже если оригинальная линия менялась. Теперь сие было исправлено.

Perl сегодня более невыгодный использует PerlIO про сведения об отсутствии памяти, приблизительно наравне PerlIO может попробовать выдвинуть в центральный план ещё памяти.

В регулярных выражениях, коли что-либо подсчитывается не без; через {n,m}, идеже n > m, малограмотный может родить для совпадению. Раньше сие приводило ко фатальной ошибке, хотя в ту же минуту сие не мудрствуя лукаво предостережение (что что-нибудь невыгодный сможет совпасть) [perl #82954].

Раньше была шанс в целях форматов, определённых во подпрограммах, которые по времени становились неопределёнными да заново определялись, запираться на переменных во неправильном pad (вновь определённая окружающая подпрограмма), сколько приводило ко краху иначе ошибкам “Странная копия”.

Переопределение XSUB вот момент работы могло производить ограждение от неправильным номером строки.

Формат %vd sprintf неграмотный поддерживает предмет версии интересах альфа-версий. Раньше дьявол выводил самолично параметры (%vd), при случае принимал альфа-версию равным образом равным образом выдавал предварение “Invalid conversion in printf” (“Неверный трансляция на printf”). Больше сего малограмотный происходит, а выдаёт пустую строку получи и распишись выходе. Также симпатия хлеще безвыгодный теряет реминисценция на этом случае.

Вызов $obj->SUPER::method на главном пакете может невыгодный удаться, неравно SUPER-пакет сделано был вызван другими средствами.

Создание псевдонима стэша (*foo::=*bar::) хлеще невыгодный приводит ко тому, что-нибудь картель SUPER игнорирует изменения на методах, либо @ISA, не в таком случае — не то на использует гяур пакет.

Вызов метода во пакетах, имена которых заканчиваются в ::SUPER, чище невыгодный рассматриваются равно как картель метода SUPER, почто приводило ко ошибкам поиска метода. Кроме того, атрибуция подпрограмм на подобных пакетах значительнее отнюдь не приводит для их поиску вызовом метода SUPER для обеспечивающий их депеша [perl #114924].

\w сейчас совпадает со кодами U+200C (ZERO WIDTH NON-JOINER) равным образом U+200D (ZERO WIDTH JOINER). \W хлеще безвыгодный совпадает вместе с ними. Это модифицирование связано вместе с коррекцией во определении Юникода, от нежели приходится соглашаться \w.

dump LABEL пуще малограмотный приводит для утечке этой метки.

Вычисление констант пуще никак не меняет действия функций stat() равным образом truncate(), которые могут нести протоколы и заботы по образу от именами файлов, беспричинно изо дескрипторами файлов. stat 0 ? foo : bar в настоящее время рассматривает принадлежащий энтимема равно как прозвание файла (так равно как сие произвольное выражение), а безвыгодный вроде дескриптор “foo”.

truncate FOO, $len пуще безграмотный откатывается для рассмотрению “FOO” вроде фамилия файла, разве файловый дескриптор был удалён. Это было сломано на Perl v5.16.0.

Переопределение подпрограммы потом присвоения подпрограммы на глоб равным образом глоб во глоб более невыгодный приводит ко двойному освобождению памяти alias паническим сообщениям.

s/// пока что превращает v-строки во обычные строки, эпизодически делает подстановку, даже если ежели результирующая абзац та но самая (s/a/a/).

Предупреждение что касается несовпадающем прототипе значительнее неграмотный рассматривает подпрограммы-константы равно как отнюдь не имеющие прототипа, между тем что они сверху самом деле имеют “”.

Подпрограммы-константы да упреждающая известие пуще малограмотный препятствует предупреждениям что касается несовпадающем прототипе выпускать наименование подпрограммы.

undef держи подпрограмму сейчас очищает проверку вызова.

Оператор ref стал разоряться кэш сверху благословенных объектах во Perl v5.16.0. Это было исправлено [perl #114340].

use более далеко не пытается исследовать домашние доводы как бы оператор, делая use constant { () }; синтаксической ошибкой [perl #114222].

В сборках от отладочными символами, предупреждения “неинициализированности” в глубине форматов хлеще никак не приводят ко ошибкам утверждения.

В сборках не без; отладочными символами, подпрограммы вложенные в середине форматов более никак не приводят ко ошибкам утверждения [perl #78550].

Форматы равно операторы use об эту пору разрешены в глубине форматов.

print $x равным образом sub { print $x }->() в настоящее время вечно выдают одноименный вывод. Для последнего было возможен абдикация во замыкании $x, коли аргумент была неактивна; т.е. когда симпатия была определена кроме текущей запущенной именованной подпрограммы.

Точно приблизительно но print $x да print eval "$x" в настоящий момент выводят одинакий вывод. Это в свою очередь позволяет понимать “my $x if 0” переменные на отладчике [perl #114018].

Форматы, вызываемые рекурсивно, неграмотный затрагивают своих лексических переменных, а любой рекурсивный требование имеет близкий принадлежащий сверток лексических переменных.

Попытка уволить данный мера иначе дескриптор, сцепленный вместе с ним, в большинстве случаев безграмотный приводит ко краху.

Разбор формата более безвыгодный сбивается нате фигурных скобках, точках не без; запятой равным образом низкоприоритетных операторах. Раньше было как будто эксплуатнуть скобки вроде разделители формата (вместо=и .), же только лишь иногда. Точка вместе с запятой равно низкоприоритетные операторы на аргументах строк формата сильнее невыгодный заставляют парсер плюнуть возвращаемое спица в колеснице строки. В строках аргумента формата фигурные скобки могут составлять использованы чтобы анонимных хешей, взамен того, ради вечно восприниматься по образу do блоки.

Форматы могут взяться в настоящее время вложенными в утробе кодовых блоков регулярных выражений равно других цитирующих конструкций (/(?{...})/ равно qq/${...}/) [perl #114040].

Форматы в большинстве случаев далеко не создаются позднее ошибок компиляции.

В сборках не без; отладочными символами опция командной строки -DA приводила для краху Perl, начиная не без; v5.16.0. Это было исправлено [perl #114368].

Потенциальный план взаимной блокировки, включающий преждевременное подавление дочернего процесса, запущенного помощью псевдо-fork на сборках держи Windows из поддержкой нитей, был исправлен. Это решает общую проблему зависания теста t/op/fork.t получи и распишись Windows [perl #88840].

Код, кой генерирует ошибки через require(), потенциально был способным перелистывать единолично иначе двуха байта по старта имени файла к файловых имён длиной больше трёх байт равно завершающихся возьми /\.p?\z/. Теперь сие было исправлено. Обратите внимание, который сие во любом случае отроду малограмотный происходило со именами модулей, переданных во use() сиречь require().

Обработка путей модулей, переданных на require(), стала безопасна на многопоточных приложениях бери VMS.

Неблокирующиеся сокеты исправлены получи VMS.

Документация POD об эту пору может рости в недрах кода, расположенного на цитированной конструкции кроме строки eval. Это работает только лишь в недрах eval-строк [perl #114040].

goto "" в настоящий момент проверяет в пустые метки, выдавая сведения об ошибке “goto must have label” (“goto потребно владеть метку”) заместо выхода с программы [perl #111794].

goto "\0" сейчас умирает от сообщением “Can’t find label” (“Не могу отыскать метку”), возмещение “goto must have label” (“goto долженствует у кого есть метку”).

C-функция hv_store сначала приводила для краху, в отдельных случаях использовалась получай %^H [perl #111000].

Проверяющий шифр вызова, притороченный ко прототипу замыкания сквозь cv_set_call_checker, сейчас копируется во замыкание, склонированное изо него. Таким образом, cv_set_call_checker об эту пору работает в середине обработчика атрибута замыкания.

Запись на $^N до тех пор неграмотный имела никакого эффекта. Теперь в соответствии с умолчанию происходит грех “Modification of a read-only value” (“Изменение значения доступного всего-навсего к чтения”), так сие может бытийствовать переопределено во специальном движке регулярных выражений, во вкусе да не без; $1 [perl #112184].

undef сверху глоб управляющего символа (undef *^H) более неграмотный выдаёт ошибочного предупреждения по части неопределённости [perl #112456].

Ради эффективности многие операторы равным образом встроенные функции возвращают единственный да оный но скаляр произвольный раз. Lvalue-подпрограммы равным образом подпрограммы на пространстве имён CORE:: на подобной детали реализации допускали сквозную утечку. Подобное происходило от lvalue-подпрограммами, возвращающими спица в колеснице uc. Теперь авторитет копируется во подобных ситуациях.

Синтаксис method {} от пустым блоком сиречь блоком, возвращающим неважный список, когда-то приводил ко краху или — или использовал случайное роль во стеке вызывавшего. Теперь спирт выдаёт ошибку.

vec ныне работает из экстремальными отступами (>2 GB) [perl #111730].

Изменения чтобы перегрузки настроек пока что начинают воздействовать немедленно, во вкусе да начинают воздействовать изменения во наследовании, которые затрагивают перегрузку. Раньше они начинали сказываться всего только позднее bless.

Объекты, которые были созданы предварительно того по образу разряд имел какую-либо перегрузку, оставались попервоначалу неперегруженными хоть ежели классы получали перегрузку посредством use overload alias модифицирование во @ISA, да инда со временем bless. Это было исправлено [perl #112708].

Классы от перегрузкой могут ныне наследовать значения отката.

Перегрузка малограмотный учитывала значимость отката 0, когда перегруженные объекты были в обеих сторонах оператора присвоения, равно как пример +=[perl #111856].

pos сейчас завершается от ошибкой не без; хешем иначе говоря массивом во качестве аргумента, где бы вывода ошибочного предупреждения.

while(each %h) сейчас подразумевает while(defined($_=each %h)), по образу readline равным образом readdir.

Подпрограммы на пространстве имён CORE:: в большинстве случаев малограмотный падают впоследствии undef *_, нет-нет да и вызываются минус списка аргументов (&CORE::time без участия скобок).

unpack лишше малограмотный выдаёт ошибку “‘/’ must follow a numeric type in unpack” (“‘/’ принуждён что-то обуславливаться чем-то из-за числовым типом во unpack”), при случае предлог во данных, которые некорректны [perl #60204].

join да "@array" в настоящий момент вызывают FETCH исключительно раз как-то быть связанном $" [perl #8931].

Некоторые вызовы подпрограмм, сгенерированные компиляцией базовых операций, затронутые переопределением CORE::GLOBAL, делают проверку операций дважды. Проверка издревле неизменна пользу кого чистого Perl-кода, да двойная пересмотр может заключать значение, когда-когда затронуты определённые пользователем проверки вызовов.

Условие гонки присутствовало до тех пор во fork, которое могло повергнуть для отправке сигнала во папашенька равно обработано да во родителе, равно на дочернем процессе. Сигналы в настоящее время кратковременно блокируются округ fork, чтоб устранить сие [perl #82580].

Реализация блоков заключение во регулярных выражениях, таких равно как (?{}) да (??{}), была усиленно переработана для того удаления целого болота ошибок. Основные заметные пользователю изменения:

Блоки заключение в глубине шаблонов в настоящий момент разбираются во оный но проход, зачем да окружающий код; в отдельности приходится отметить, почто в большинстве случаев невыгодный надобно угождать скобки — сегодня сие работает:/(?{ $x="{" })/

Это означает, в чем дело? сие оповещение об ошибке сильнее далеко не выводится:Sequence (?{...}) not terminated or not {}-balanced in regex (Последовательность (?{...}) нетерминированна не ведь — не то несбалансированы {} в регулярном выражении)

же не запрещается узнать новую ошибку:Sequence (?{...}) not terminated with ")" (Последовательность (?{...}) нетерминированна символом ")" )

Также литеральные блоки заключение в середине шаблонов закачаешься промежуток времени выполнения компилируются всего нераздельно в один из дней возле компиляции perl-кода:for my $p (...) { # оный содружество стих "FOO" компилируется только лишь безраздельно раз, # на так а время, что такое? да окружающий круг "for" /$p{(?{FOO;})/; }

Лексические переменные сейчас нормальные на плане поведения на области видимости, рекурсии равно замыканиях. В частности, /A(?{B})C/ ведёт себя (с точки зрения замыкания) во точности в качестве кого /A/ && do { B } && /C/, во в таком случае срок по образу qr/A(?{B})C/ таковский но во вкусе sub {/A/ && do { B } && /C/}. Таким образом, известный адрес работает приближенно как бы вам ожидаете, образуя три регулярных выражения, которые совпадают от 0, 0 да 0:for my $i (0..2) { push @r, qr/^(??{$i})$/; } "1"=~ $r[1]; # совпадает

Прагма use re "eval" об эту пору надобно лишь только интересах блоков кода, определённых закачаешься промежуток времени исполнения; на частности во следующем, телекс шаблона $r согласно прежнему интерпретируется во новом шаблоне да перекомпилируется, так индивидуальные скомпилированные блоки стих в середке $r используются кряду возмещение повторной компиляции, да use re "eval" свыше безвыгодный требуется:my $r=qr/abc(?{....})def/; /xyz$r/;

Операторы управления побежка выполнения заключение сильнее никак не приводят ко краху. Каждый устройство заключение запускается на новой динамической области видимости, потому-то next да т.д. невыгодный видят каждый видный цикл. return возвращает значительность с блока кода, а малограмотный окружающей подпрограммы.

Perl обыкновенно кэширует компиляцию шаблонов времени выполнения равно малограмотный перекомпилирует, буде модель далеко не меняется, только сие в настоящий момент отключается, коли сие нельзя не ради корректного поведения на замыканиях. Например:my $code="(??{$x})"; for my $x (1..3) { # перекомпиляция, чтоб примечать новее роль $x с головы единовременно $x=~ /$code/; }

/msix равно (?msix) да накипь флаги днесь применяются на возвращаемое значительность изо (??{}); в настоящее время сие работает:"AB"=~ /a(??{"b"})/i;

Предупреждения равно ошибки будут возникать с окружающего заключение (или, для того блоков стих времени выполнения, с eval), а никак не с re_eval:use re "eval"; $c="(?{ warn "foo" })"; /$c/; /(?{ warn "foo" })/;

прежде выдавало:foo at (re_eval 0) line 0. foo at (re_eval 0) line 0.

а днесь выдаёт:foo at (eval 0) line 0. foo at /some/prog line 0.

Perl нынче может взяться собран вместе с использованием какой приглянется версии Юникода. В v5.16, сие работало интересах Юникода 0.0 равным образом 0.1, же существовали отличаются как небо и земля ошибки, разве использовались сильнее ранние выпуски; равно нежели постарше эмиссия тем пуще было проблем.

vec лишше неграмотный выводит предупреждений по части “неинициализированности” на lvalue-контексте [perl #9423].

Оптимизация, включающая фиксированные строки во регулярных выражениях, могла призывать некоторое регресс производительности во краевых условиях. Это было исправлено [perl #76546].

В некоторых случаях введение пустых подшаблонов в утробе регулярного выражения (такие как бы (?:) тож (?:|) могут отключить определённые оптимизации. Это было исправлено.

Сообщение “Can’t find an opnumber” (“Не могу отыскать боец операции”), которое выдаёт prototype, если передана стих вида “CORE::nonexistent_keyword”, днесь пропускает UTF-8 равно встроенные NUL помимо изменений [perl #97478].

prototype в эту пору обрабатывает магические переменные, такие на правах $1 приблизительно же, наравне да немагические переменные быть проверке префикса CORE::, а далеко не рассматривает их по образу имена подпрограмм.

В сборках perl вместе с поддержкой нитей агрегат кода, исполняющийся на регулярном выражении, был в состоянии исковеркать кличка пакета, сохранённое на дереве операций, приводя для ошибочному чтению во caller да что ко краху [perl #113060].

Ссылка получай оригинал замыкания (\&{$_[1]} на обработчике атрибута интересах замыкания) свыше неграмотный приводит для копированию подпрограммы (или ошибкам утверждения получай сборках не без; отладочной информацией).

eval "__PACKAGE__" пока что возвращает исправный отклик получай сборках из поддержкой нитей, коли будничный пакетец был переименован (как во *ThisPackage::=*ThatPackage::) [perl #78742].

Если блок удалён кодом, кто спирт вызвал, возможно, что-то caller увидит стековый фрейм, присущий удалённому пакету. caller может упасть, если бы адресочек памяти стэша стал применяться скаляром, а воздаяние происходила на волюм а скаляре [perl #113486].

UNIVERSAL::can сильнее далеко не рассматривает особый узловой энтимема когда как на зависимости с того, черта либо — либо закидон некто внутренне.

open из <& используется в целях проверки режима, является ли беспристрастный энтимема числом, с целью решить, принимать во внимание ли его наравне файловый дескриптор иначе говоря равно как кличка дескриптора. Магические переменные, такие наравне $1, завсегда проваливали проверку нате состав равно рассматривались в качестве кого имена дескрипторов.

Обработка во warn магических переменных ($1, связывания) претерпела ряд исправлений. FETCH вызывается всего только одинокий раз в год по обещанию теперь ради связанного аргумента другими словами связанной $@ [perl #97480]. Связанные переменные, возвращающие объекты, которые имеют строковое воззрение “”, значительнее никак не игнорируются. Связанная $@, которая возвращала ссылку подле предыдущем использовании, более безвыгодный игнорируется.

warn "" сейчас рассматривает $@ от в количестве в утробе также, свободно с того в духе оно задано $@=3 сиречь Раньше игнорировался главнейший вариант. Теперь дьявол добавляет “\t…caught”, в духе сие спокон века было из

Числовые операторы сверху магических переменных (например, $1 + 1) заранее использовали операции от плавающей запятой, хоть когда целочисленные операции были побольше подходящими, приводя для невыгода точности в 04-битных платформах [perl #109542].

Унарное негация пуще безграмотный рассматривает строку вроде число, кабы абзац используется равно как количество во определённый момент. Поэтому, когда $x охватывает строку “dogs”, в таком случае -$x вернёт “-dogs”, ажно неравно хорошенького понемножку зафиксировано в духе $y=0+$x.

В Perl v5.14, -"-10" было исправлено возвращать “10”, а безграмотный “+10”. Но магические переменные ($1, связанные) отнюдь не были исправлены давно текущего момента [perl #57706].

Унарное запирательство в настоящее время рассматривает строки согласованно, самостоятельно через внутреннего флага UTF8.

Была исправлена регрессия, появившаяся на Perl v5.16.0, затрагивающая tr/_СПИСОКПОИСКА_/_СПИСОКЗАМЕНЫ_/. Только главнейший индивидуум имел смысл, когда обозначение появлялся больше одного раза на _СПИСОКПОИСКА_. В некоторых случаях, крайний оттиск переопределял безвыездно предыдущие [perl #113584].

Регулярные выражения, такие наравне qr/\87/, попервоначалу безмолвно вставляли NUL-символ, таково равно как разве бы оно было зафиксировано в духе qr/\00087/. Теперь оно полноте делать отыскивание равно как разве бы было фиксировано как бы qr/87/, не без; сообщением по части том, что-нибудь постоянство "\8" невыгодный распознаётся.

__SUB__ пока что работает на специальных блоках (BEGIN, END равным образом т.д.).

Создание нитей держи Windows могло умозрительно ввергать ко краху, кабы выполнялось в утробе блока BEGIN. Оно по мнению прежнему малограмотный работает правильно, же за здорово мере малограмотный падает [perl #111610].

\&{""} (с полый строкой) пока что механично создаёт заглушку равно как равным образом интересах любого другого имени подпрограммы да пуще невыгодный выводит ошибку “Unable to create sub” (“Не могу образовать подпрограмму”) [perl #94476].

В v5.14.0 появилась регрессия, которая была без дальних слов исправлена, во которой кое-кто вызовы модуля re приводили для порче содержимого $_ [perl #113750].

do FILE в настоящий момент спокон века устанавливает не в таком случае — не то очищает $@, аж неравно обложка малограмотный может фигурировать прочитан. Это гарантирует, в чем дело? первоначальное отладка $@ (как да рекомендуется на документации) издревле возвращает корректные результаты.

Итерация по мнению массиву, используемая на конструкции each @array ныне корректно сбрасывается, при случае @array очищается [perl #75596]. Это происходит, например, от случая к случаю сосредоточение повсеместно присваивается, что во а никак не в некоторых случаях его значениям происходит присваивание. В определениях XS API сие означает, что такое? av_clear() в настоящее время сбрасывает итератор.

Это копирует нрав итератора хеша, если хеш очищается.

$class->can, $class->isa равным образом $class->DOES в настоящее время возвращают корректные результаты беспричинно ото того, существует ли пакет, получи какой-никакой ссылается $class [perl #47113].

Приходящие сигналы более никак не очищают $@ [perl #45173].

Разрешено формулировка my () вместе с пустым списком переменных [perl #113554].

При разборе синтаксиса подпрограммы, определённые затем ошибок, чище далеко не оставляют заглушек [perl #113712].

Замыкания, безвыгодный содержащие строковых eval, более малограмотный зависают во содержащихся на них подпрограммах, позволяя переменным, замкнутых на них изо внешних подпрограмм, бытийствовать освобождёнными, рано или поздно внешняя подпрограмма освобождается, пусть даже неравно внутренняя подпрограмма так же существует [perl #89544].

Удвоение дескрипторов файлов, находящихся на оперативной памяти, из помошью режимов открытия “<&=” сиречь “>&=” перестало трудиться по чести во v5.16.0. Оно приводило ко созданию нового дескриптора, ссылающегося возьми другую скалярную переменную. Это было исправлено [perl #113764].

Выражения qr// лишше отнюдь не падают от теми движками регулярных выражений, которые никак не устанавливают offs закачаешься минута компиляции регулярного выражения [perl #112962].

delete local вяще безграмотный приводит для краху из определёнными магическими массивами да хешами [perl #112966].

local нате основы определённых магических массивов равно хешей заранее безвыгодный приводил на метода удалённые слои присутствие выходе с области видимости, даже если даже если простейшие положения отнюдь не существовали вплоть до local.

scalar(write) свыше безвыгодный возвращает серия элементов [perl #73690].

Конвертация строк во значения со плавающей запятой свыше отнюдь не разбирает нечисто кой-какие строки присутствие действии use locale [perl #109318].

Фильтры @INC, которые умирают, хлеще безвыгодный приводят ко утечкам памяти [perl #92252].

Реализация перегруженных операций в эту пору вызывается на правильном контексте. Это, без участия прочего, позволяет корректно переопределять <> [perl #47119].

Указание всего fallback-ключа быть вызове use overload в настоящее время ведёт себя безошибочно [perl #113010].

sub foo { my $a=0; while ($a) { ... } } да sub foo { while (0) { ... } } сейчас возвращают одно да как и [perl #73618].

Отрицание строки ведёт себя приближенно а рядом действии use integer;, вроде равно безо неё [perl #113012].

chr в настоящее время возвращает эмблема Юникода “Замена символа” (U+FFFD) про -1 самобытно с внутреннего представления. -1 вначале скрывался, буде переменная являлся связанным или — или был представлен внутренно строкой.

Использование format позднее того, что включающая его подпрограмма была освобождена, приводило ко краху, начиная не без; perl v5.12.0, ежели бери объем ссылалась лексическая аргумент изо внешней подпрограммы.

Использование format со временем того, во вкусе включающей его подпрограмме было присвоено неопределённое значение, приводило ко краху, начиная не без; perl v5.10.0, неравно получай параметры ссылалась лексическая аргумент с внешней подпрограммы.

Использование format, определённого в недрах замыкания, получай какой ссылаются лексические переменные с вне, вовеки в действительности неграмотный работало, даже если всего только повестка write малограмотный находился в середке замыкания. В 0.10.0 сие ажно возникновение повергать для краху. Теперь воспроизведение сего замыкания подле из самым верхами стека вызовов ныне используется в целях поиска сих переменных.

Форматы, которые замыкают переменные на специальных блоках, более далеко не приводят для краху, неравно существует заглушина из тем а именем, который равно у специального блока давно того, по образу специально предназначенный объединение скомпилирован.

Парсер пуще малограмотный путается, рассматривая eval foo () на правах синтаксическую ошибку, буде ей предшествовала отметка print; [perl #16249].

Возвращаемое syscall достоинство лишше неграмотный обрезается бери 04-битных платформах [perl #113980].

Вычисление констант сильнее малограмотный приводит ко тому, аюшки? print 0 ? FOO : BAR печатает во файловый дескриптор FOO [perl #78064].

do subname в эту пору вызывает именованную подпрограмму равно использует наименование файла, которое симпатия возвращает, взамен открытия файла со именем “subname”.

Поиск подпрограмм от через проверочных хуков rv2cv (зарегистрированных XS-модулем) об эту пору учитываются возле определении является ли foo bar вызовом подпрограммы foo(bar) или — или вызовом метода "bar"->foo.

CORE::foo::bar в большинстве случаев малограмотный обрабатывается специально, допуская непосредственный затребование глобального переопределения посредством CORE::GLOBAL::uc(...) [perl #113016].

Вызов неопределённой подпрограммы, чей-нибудь typeglob был установлен во неопределённое значение, в настоящее время выдаёт привычную ошибку “Undefined subroutine called” (“Вызвана неопределённая подпрограмма”) взамен “Not a CODE reference” (“Не кодовая ссылка”).

Две ошибки, затрагивающие @ISA, были исправлены. *ISA=*glob_without_array равным образом undef *ISA; @{*ISA} предотвратят будущие изменения на @ISA с обновления внутреннего кэша, используемого на поиска методов. Случай со *glob_without_array являлся регрессией из Perl v5.12.

Оптимизация регулярных выражений когда приводит ко тому, зачем $ не без; /m неграмотный совпадает не так — не то даёт неверные совпадения [perl #114068].

__SUB__ в настоящее время работает во блоке sort, нет-нет да и включающая его подпрограмма предекларирована из через синтаксиса sub foo; [perl #113710].

Свойства Юникода применяются лишь для кодам Юникода, сколько приводит для некоторым тонкостям, эпизодически регулярное отражение совпадает не без; такими кодовыми точками. Генерируется предупреждение, с тем прилакомить ваше подчеркнуть что ко этому факту. Однако, сие предсказание по временам по сути дела неуместным, как бы возле синтаксическом анализе программы. Не-юникодные сравнения, такие по образу \w равным образом [:word:], малограмотный должны заключать предупреждения, в такой мере как бы их означивание малограмотный ограничивает их служба только лишь для кодам Юникода. Теперь известие генерируется всего только рано или поздно происходит сличение вместе с \p{} да \P{}. Пока остаётся заморочка [perl #114148], к жуть небольшого числа свойств Юникода, которые совпадают только лишь из одной кодовой точкой. Предупреждение невыгодный генерируется, разве они совпадают из подобный кодовой точкой Юникода.

Предупреждения что касается неинициализированности, упоминающие слои хеша, будут перечислять лишь только фамилия элемента, разве спирт находится никак не во первой цепочке хеша, с подачи ошибки превышения/занижения для единицу (off-by-one).

Ошибка во оптимизаторе регулярного выражения может ввергать ко тому, в чем дело? многострочный “^” ведет себя некорректно на присутствии переносов строк, например, во таком выражении "/\n\n"=~ m#\A(?:^/$)#im, которое далеко не совпадёт [perl #115242].

Неудавшийся fork во списочном контексте вяще никак не приводит ко повреждению стека. @a=(1, 0, fork, 0) когда-то поглощал 0 да присваивал (1, undef, 0), когда затребование fork завершался неудачно.

Различные прибыль памяти были исправлены, на основном затрагивающие связанные переменные, которые умирают, классы символов регулярных выражений равным образом блоков кода, а вдобавок синтаксические ошибки.

Присвоение регулярного выражения (${qr//}) переменной, которая охватывает сумма из плавающей точкой, более далеко не вызывает ошибок утверждения держи сборках от отладочной информацией.

Присвоение регулярного выражения скаляру, содержащему число, лишше безвыгодный вызывает последующего приведения для числовому значению, создающему произвольное число.

Присвоение регулярного выражения магической переменной пуще никак не стирает магию. Это являлось регрессией, начиная не без; v5.10.

Присвоение регулярного выражения благословлённому скаляру лишше невыгодный приводит ко краху. Это вдобавок являлось регрессией от v5.10.

Регулярное речение может сегодня бытийствовать присвоено связанному хешу равным образом элементу сосредоточение не без; привидением для строковому виду.

Приведение регулярного выражения ко числу более далеко не приводит ко выводу предупреждения по части неинициализированном значении.

Отрицательные индексы массива свыше невыгодный приводят ко тому, что-нибудь методы EXISTS связанной переменной игнорировались. Это являлось регрессией от v5.12.

Отрицательные индексы массива сильнее никак не приводят ко краху получай массивах, связанными со не-объектами.

$byte_overload .=$utf8 чище далеко не приводит для двойному кодированию UTF-8, разве скаляр от левой стороны создал UTF-8 строку близ последнем вызове операции перегрузки.

goto &sub нынче использует текущее значительность @_ где бы использования массива, со которым на первый взгляд была вызвана подпрограмма. Это означает, ась? local goto &sub сейчас работает [perl #43077].

Если настройщик вызывается рекурсивно, ведь дьявол чище никак не портит домашние собственные лексические переменные. Раньше быть рекурсии всё-таки вызовы разделяли равный настройка лексических переменных [perl #115742].

*_{ARRAY}, возвращённый изо подпрограммы, сильнее малограмотный становится случайно пустым.

Известные проблемы

Строки из UTF8-флагом на %ENV возьми HP-UX 01.00 глючат.

Взаимодействие строк вместе с UTF8-флагом равно %ENV держи HP-UX 01.00 для сей минута куда хитрое во некоторых отнюдь не прежде конца диагностированных случаях. Ожидаемы ошибки на тесте t/op/magic.t, вместе с непредсказуемым поведением подле сохранении широких символов на переменных окружения.

Некролог

Ходжанг Юн (Hojung Yoon) (AMORETTE), 04 года, Сеул, Южная Корея, отправился во принадлежащий концевой конец 0 мая 0013 со статуэткой ламы да карточкой, подписанной TIMTOADY. Это был образцовый зеленый кракер Perl 0 равно 0 равным образом преданный принимающий участие Seoul.pm. Он программировал возьми Perl, говорил по части Perl, ел Perl равно любил Perl. Мы верим, что-то возлюбленный все еще эдак программирует бери Perl нате своём сломанном ноутбуке IBM. Его достаточно невыгодный давать волю рукам нам.

Acknowledgements

Perl v5.18.0 представляет с лица к примеру 02 месяцев разработки, начиная со Perl v5.16.0, равно охватывает эскизно 000,000 изменённых строк середи 0,100 файлов через 013 авторов.

Perl продолжает страстно развертываться на своей третьей декаде вследствие активному сообществу пользователей равным образом разработчиков. Известно, что-то следующие человек содействовали на улучшении того, ась? отсюда следует Perl 0.18.0:

Aaron Crane, Aaron Trevena, Abhijit Menon-Sen, Adrian M. Enache, Alan Haggai Alavi, Alexandr Ciornii, Andrew Tam, Andy Dougherty, Anton Nikishaev, Aristotle Pagaltzis, Augustina Blair, Bob Ernst, Brad Gilbert, Breno G. de Oliveira, Brian Carlson, Brian Fraser, Charlie Gonzalez, Chip Salzenberg, Chris ‘BinGOs’ Williams, Christian Hansen, Colin Kuskie, Craig A. Berry, Dagfinn Ilmari Mannsåker, Daniel Dragan, Daniel Perrett, Darin McBride, Dave Rolsky, David Golden, David Leadbeater, David Mitchell, David Nicol, Dominic Hargreaves, E. Choroba, Eric Brine, Evan Miller, Father Chrysostomos, Florian Ragwitz, François Perrad, George Greer, Goro Fuji, H.Merijn Brand, Herbert Breunung, Hugo van der Sanden, Igor Zaytsev, James E Keenan, Jan Dubois, Jasmine Ahuja, Jerry D. Hedden, Jess Robinson, Jesse Luehrs, Joaquin Ferrero, Joel Berger, John Goodyear, John Peacock, Karen Etheridge, Karl Williamson, Karthik Rajagopalan, Kent Fredric, Leon Timmermans, Lucas Holt, Lukas Mai, Marcus Holland-Moritz, Markus Jansen, Martin Hasch, Matthew Horsfall, Max Maischein, Michael G Schwern, Michael Schroeder, Moritz Lenz, Nicholas Clark, Niko Tyni, Oleg Nesterov, Patrik Hägglund, Paul Green, Paul Johnson, Paul Marquess, Peter Martini, Rafael Garcia-Suarez, Reini Urban, Renee Baecker, Rhesa Rozendaal, Ricardo Signes, Robin Barker, Ronald J. Kimball, Ruslan Zakirov, Salvador Fandiño, Sawyer X, Scott Lanning, Sergey Alekseev, Shawn M Moore, Shirakata Kentaro, Shlomi Fish, Sisyphus, Smylers, Steffen Müller, Steve Hay, Steve Peters, Steven Schubiger, Sullivan Beck, Sven Strickroth, Sébastien Aperghis-Tramoni, Thomas Sibley, Tobias Leich, Tom Wyant, Tony Cook, Vadim Konovalov, Vincent Pit, Volker Schatz, Walt Mankowski, Yves Orton, Zefram.

Список выше, конечно, неполон, эдак на правах был механично сгенерирован изо истории системы контроля версий. В частности, дьявол невыгодный содержит имена (очень пискляво ценимых) помощников, которые сообщали относительно проблемах во Perl баг-трекер.

Множество изменений, включённых во эту версию, идут через CPAN-модулей, включённых во костяк Perl. Мы благодарны всему CPAN-сообществу после подмога во развитии Perl.

Полный роспись всех принимавших причастность на разработке во истории Perl смотри не в службу во файле AUTHORS во дистрибутиве исходного заключение Perl.

Сообщения об ошибках

Если ваша сестра найдёте то, что, как бы ваша сестра считаете, является ошибкой, ваша милость можете испытать перед этим опубликованные статьи во новостной группе comp.lang.perl.misc равным образом базе ошибок perl для http://rt.perl.org/perlbug/. Также может состоять данные бери http://www.perl.org/, домашней странице Perl.

Если вам уверены, ась? у вам ещё никем малограмотный сообщённая ошибка, христа ради запустите программу perlbug, включённую на ваш релиз. Убедитесь, который вас привели максимально краткий, хотя яркий пример, интересах воспроизведения проблемы. Ваш отчёт соответственно ошибке, купно из выводом perl -V, полноте отправлен в домицилий с целью анализа командой портирования Perl.

Если ошибка, относительно которой ваша милость сообщаете, имеет аспект для безопасности, что-то делает ее неуместным пользу кого отправки на публичную архивируемую почтовую рассылку, покорнейше отправьте его получи и распишись Это неархивируемая почтовая распространение со закрытой подпиской, которая заключает всех главных коммитеров да позволит привести в соответствие выход патча для того смягчения или — или исправления проблемы нате всех платформах, бери которых поддерживается Perl. Пожалуйста используйте сей приветствие всего только интересах проблем безопасности на базовом Perl, а отнюдь не для того модулей, которые распространяются сверху CPAN.

Смотрите в свою очередь

Файл Changes чтобы просмотра исчерпывающей информации об том, в чем дело? изменилось.

Файл INSTALL касательно том, по образу приумножать Perl.

Файл README на общей информации.

Файлы Artistic равным образом Copying для того информации объединение правам.

Вава Леттиев (перев.)

Обзор CPAN вслед май 0013 г.

Рубрика не без; обзором интересных новинок CPAN из-за прошлый месяц.

После успеха кампании в соответствии с сбору средств к проекта Pinto, во этом месяце появилось аж неудовлетворительно новых проекта в соответствии с созданию собственного CPAN-архива: Escort равным образом OrePAN2, а вот и все вышел свежеиспеченный релиз WorePAN.

В знакомства из выходом нового стабильного релиза Perl 0.18.0, на котором серьёзно изменилась действие функции хеширования да произошла хэширование что-то около следования ключей хеша, кое-кто модули CPAN оказались сломаны за сего изменения. Поэтому обновления части модулей во этом месяце содержат припутывание об исправлениях совместимости из новой версией Perl.

Статистика

Новых дистрибутивов — 067

Новых выпусков — 086

Новые модули

Web-Dash Модуль, некоторый предоставляет веб-интерфейс для Unity Dash, позволяя утилизировать небо и земля его возможности: топический подыскание (приложения, документы, музыка, видео равно т.д.), розыск внешних ресурсов, исчерпывание различных «линз» Unity Dash равно т.д.

Geo::IP2Location Модуль к быстрого получения различной геоинформации в области ip-адресу. Используются файлы баз данных ip2location.com, имеющих определённые ограничения интересах бесплатного использования.

GeoIP2 Perl API про доступа ко новому веб-сервису геоинформации GeoIP2 компании MaxMind.

Parse::PMFile Модуль позволяет отметелить .pm-файлы модулей приблизительно же, как бы сие делает PAUSE. Модуль может существовать полезен интересах выполнения проверки вашего дистрибутива до отправкой на PAUSE, в надежде предварительно вкусить возможные проблемы.

Magpie Фреймворк чтобы быстрой разработки веб-приложений, реализованный во виде слоя Plack::Middleware. Основной парадигмой разработки является ресурсно-ориентированное программирование, подразумевающее произведение RESTful веб-сервисов.

Mail::DMARC Perl-реализация спецификации DMARC ради идентификации почтовых сообщений принимающими серверами не без; использованием SPF равным образом DKIM. Основное функция модуля — просачивание фишинговых равно спам-сообщений.

Escape::Houdini Perl API ко библиотеке Houdini про экранирования символов во HTML/XML/JS/URI-документах равным образом строках.

UAV::Pilot Модуль равным образом утилиты интересах управления беспилотными воздушными моделями дронов. Модуль позволяет посылать объединение Wi-Fi подключению команды в целях дрона, обеспечивая отдел полётом.

match::smart С выходом Perl 0.18 команда умного сравнения ~~ был объявлен экспериментальным. В данном модуле создана альтернативная осуществление умного сравнения во виде инфиксного оператора |M|.

Image::WebP Интерфейс ко библиотеке libwebp Google. Позволяет брать информацию об изображении, а в свой черед преобразовать снимок изо формата webp во сверток данных RGB равно обратно.

Linux::ACL Perl-расширение с целью чтения равно склерозник ACL (списки контроля доступа) файлов от через библиотеки libacl.

JSON-MaybeXS Модуль охватывает утилизация Cpanel::JSON::XS иначе говоря откатывается, во случае его отсутствия, получи и распишись JSON::PP. Таким образом, некто является альтернативой модуля JSON от пирушка просто-напросто разницей, что такое? чем основного бэкенда JSON::XS используется его форк — Cpanel::JSON::XS. Форк отличается наличием метода binary, позволяющего отключать автоматическое детектирование кодировки UTF-8 во строках да испытывать их в духе последовательности байт, а в свой черед наличием поддержки Perl 0.6.2.

App::cpanchanges Утилита, которая позволяет бегло извлечь наличность последних изменений (ChangeLog) любого модуля не ведь — не то дистрибутива CPAN.

experimental Модуль, позволяющий несложно задействовать новые экспериментальные потенциал (и заглушить соответствующие предупреждения).

Обновлённые модули

Tickit 0.33 Обновился устройство для того создания интерактивных консольных интерфейсов.

HTML::TreeBuilder::LibXML 0.23 Вышло реновация модуля, являющегося совместимой из HTML::TreeBuilder да XPath реализацией держи основе библиотеки libxml. Добавлены мало-мальски методов, необходимых в целях работы модуля Web::Query::LibXML.

XML::RSS 0.52 Модуль на создания RSS-лент. В новой версии исправлены ошибки модуля присутствие работе получи новой версии Perl 0.18.0.

Sys::Virt 0.0.5 Модуль интересах управления виртуальными машинами после библиотеку libvirt. В новой версии добавлена крыша libvirt API 0.0.5.

Smart::Match 0.007 Модуль со множеством полезных функций на умного сравнения. В новой версии отключаются предупреждения об экспериментальном характере оператора умного сравнения получи версиях Perl >=5.17.11.

Mojolicious 0.09 Вышел новоиспеченный бравурный релиз веб-фреймворка Mojolicious. В данной версии произведено огромное количество изменений, включительно несовместимые, равно добавлены новые возможности. Исправлена совместность со версиями Perl >=5.17.11.

JSON::XS 0.34 Обновлён узел JSON::XS. Исправлен диагностика интересах работы бери Perl 0.18.0, а в свой черед изменена логика отделения памяти возле сортировке ключей получи утилизация кучи заместо стека на больших хешей.

GraphViz2 0.09 Модуль-обёртка для того Graphviz об эту пору требует с целью работы версию Perl никак не внизу 0.14.

Володя Леттиев

Интервью со Андреем Шитовым

Андрэ Шитов — парторг большинства Perl-мероприятий получи территории СНГ да бывшего СССР. За его плечами воршкопы Perl Today, May Perl, Saint Perl, BY Perl, BG Perl, Perl Mova, конференции YAPC::Russia равно YAPC::Europe 0011. А впереди киевская YAPC::Europe 0013.

Как равным образом если начал прослеживать программирование?

Когда ваш покорный слуга начинал расследовать программирование, компьютеров вновь безвыгодный было :-) Я в круглых цифрах прочитал оборона школьный алгоритмический квакало (и 0С о ту пору безвыгодный было) равным образом пытался хоть сколько-нибудь нарисовать, перемещая курсор. Потом появился котировка информатики на школе (но отнюдь не во нашей, тама компьютеров равным образом малограмотный было, а на соседней). Там стояли Синклеры от Бейсиком. Через годок компьютеры завезли да во нашу школу, хотя сие были такие дивайсы подина названием «Корвет», выпускаемые центром ЭЛЕКС ГКВТИ. Интерфейс был русский, следственно рядом загрузке получи мониторе (монохромном, кстати) было написано: «Загрузка ОС». Мне сии осы далеко не понравились, да наша сестра не без; одноклассником попросились подвигаться получи уроки во соседнюю школу.

В университете аз многогрешный впитывал всю литературу, которую был в состоянии найти: в духе минимум, помню для MS-DOS, паскаль, ассемблер, C++, пролог, фортран да Java. Это самообучение во чистом виде, вследствие чего что-то путь программирования был до боли скромным, равно нераздельно с преподавателей ходил ко ми спрашивать совета согласно C++. А не без; Java меня познакомил моего ученый руководитель: некто принес одну изо первых книг (если не вдаваясь в подробности никак не первую) сверху русском языке об этом языке.

Кстати, ваш покорный слуга учился малограмотный лишь программированию, так да тому, наравне об этом пишут. Как, например, несложно из сего следует чертить оборона ассемблер у Питера Нортона (и с какой радости у самого околесица безвыгодный следовательно от первого раза). Или по части том, на правах А. Архангельский может записывать тысячестраничные книги относительно первый встречный недавний изделие Борланда. Лучшей книгой об языке программирования моя персона вплоть до этих пор считаю «Turbo C++: шлепалка да его применение» Цимбала, Майорова равным образом Козодаева.

Какой вычитчик используешь?

Долгое период пользовался Komodo Edit, только они никак не сумели своевременно подключиться перед ретину, благодаря тому пришлось перебежать получи Sublime Text 0. (Одновременно автор открыл программу ExpanDrive, впоследствии зачем одно с двух редактора невыгодный упирался на знание мучиться из файлами по мнению SSH.) На втором месте идут vim равным образом редактор, вделанный на mc. Редактор ми нужен лишь как бы программа, на которой дозволяется писать; аз многогрешный ни в жизнь отнюдь не пользуюсь ни плагинами, ни возможностями пользу кого просмотра структуры стих другими словами рефакторинга.

Как да в отдельных случаях познакомился от Perl?

Где-то на 0000-м. Во-первых, Perl был получай обложках книг во магазине, которые мы снова безграмотный читал. Во-вторых, сам соотечественник рассказал мне, ась? симпатия до работе познакомился вместе с перлом, равно тама допускается вносить да так, да сяк, равным образом раком наперед, равным образом однако бросьте работать. Я решил малограмотный приотставать через моды.

С какими другими языками программирования нравиться работать?

Нежно люблю C++. Заинтересовался Go. Хотя ни получи том, ни получай другом отнюдь не пишу много. Go, средь прочим, аспидски нетрудно дается тем, который наслышан не без; перлом.

Когда-то посмотрел видеозаписи выступлений Дугласа Крокфорда да усиленно удивился, сколько пожалуйста конструкция JavaScript.

Думаю, было бы угодно заниматься вместе с Perl 0, но.

Какое, по-твоему, самое большое приоритет Perl?

У перла было невероятное преимущество: возлюбленный шел во комплекте не без; любым юниксом. Важная линия языка — лапидарность равно относительная синтаксическая свобода. В интернете глотать любопытный майндмап нате эту тему, компонованный три возраст отдавать Валерием Студенниковым про доклада возьми конференции May Perl во Москве.

Я отнюдь не думаю, зачем новые языки (в частности, динамические) усильно уступают перлу, же бессмысленность один раз ближе. Настолько близок, почто ми уймись беседовать что касается самых больших недостатках перла, нежели что до преимуществах :-) Немного для сие аз многогрешный рассказывал на недавнем подкасте YAPP № 07.

На перле спокойно борзо строчить прототипы любых сетевых приложений, да момент через времени разрабочики сие успешно демонстрируют.

И, без участия сомнения, промеж важных достоинств — регулярные выражения равным образом хорошая помочь юникода (хотя кое-когда да доводится жечь вместе с перекодировками равно попытками угадать, выставлен ли у строки utf8-флаг).

Какая, по-твоему, колляция сугубо важна ради языков будущего?

Возможность постановлять задачи, которые возникнут на будущем.

Скорее всего, потребуется пригодно равным образом без затей объяснять во программе работу вместе с распределенными (или даже если бы удаленными) ресурсами равно параллельность.

Важно, что такое? такие внутренние резервы должны являться заложены малограмотный только лишь во синтаксисе языка, же равным образом во самом компиляторе. Программа далеко не должна перевоплощаться на адрес держи ассемблере, до тютельки перечисляя постоянно шаги за работе вместе с распределенными данными тож кодом. Существенную значимость обязан производить компилятор.

В большинстве случаев супермикроэвм может раздать средства неизмеримо эффективнее, нежели сие нашел бы нормальный программист. Пример сего эффекта — ведение памятью. На перле заметно не задавайся основывать объекты, неграмотный задумываясь в отношении выделении памяти, нежели сие нужно делать, например, в C. Если язычишко требует ручной принимать память, сие сплошь и рядом приводит едва ко необходимости составлять сильнее внимательным, пускай бы урок возле этом решается со ошибками. Точно таково но языки будущего должны независимо печаловаться о всем, что-то связано не без; распределенной работой, прости-прощай сие мультипроцессорный пэвм или — или до некоторой степени компьютеров, подключенных ко интернету.

Как было устроено община Moscow.pm? Соответствует ли текущее разряд тому, сколько задумывалось?

Moscow.pm создал неграмотный я, а Руся Закиров. Он, например, основной встречался на Москве со Джонатаном Вортингтоном. Я как только увеличил численность подписчиков Moscow.pm сверху 05 000% равно начал предпринимать воркшопы равным образом конференции.

Кстати, уж пару полет труъ-домен сайта Moscow.pm — moscow.pm.

По поводу соответствия задумке: вернее да, нежели нет. В начале у меня было двум задачи. Во-первых, представить людей товарищ вместе с другом, во-вторых, распустить парочку мероприятий. Обе сии задачи выполнены совершенно успешно. Помимо сего заработала отправка Mocsow.pm, появились изрядно групп во других городах равно проводятся так например равным образом невыгодный регулярные, однако равным образом далеко не очень редкие офлайновые встречи.

Детального плана от датами сообразно развитию группы, разумеется, нет, потому-то весь опирается получи восторг людей, которые самочки хотят несколько сделать. Наличие Moscow.pm куда облегчает житьё таким людям, благодаря чего в чем дело? сие неплохая знак входа, с целью сообщить коллег что касается своих намерениях. Например, во этом году Павлик Щербинин предложил накоплять офлайновые технические встречи во офисе Mail.ru да хочет выработать их ежемесячными, согласен сызнова да от видеотрансляцией.

Что мотивирует тебя получай такую инициативность на организации Perl-мероприятий? Кому да нежели они могут фигурировать полезны?

Мне любопытно предаться власти других разработчиков, потому конференции ваш покорнейший слуга делал не кто иной так, с целью ми было любопытно тама придти. К тому а моя особа люблю путешествовать, потому-то появились конференции вслед за пределами Москвы.

Организация конференций — зверски интересное занятие само объединение себе. Когда ваш покорный слуга посещаю мероприятия, мы издревле обращаю почтение бери организационные детали равно стараюсь занять кое-что интересное да избежать чужих ошибок. Ну равным образом весь отсюда поподробней было бить рекорды безвыгодный токмо по части числу организованных мероприятий, а да в области числу охваченных стран.

Два лета автор этих строк ждал мероприятия кайфовый Владивостоке. Но в дальнейшем до этого времени срослось само собой, да автор сих строк провели дальше дальневосточный Perl-воркшоп, истинно уже да от зарубежным гостем, Джонатаном Вортингтоном (он самолично весть любит путешествия равно невыгодный боится ездить на плацкарте, того его решительно неграмотный нужно было упрашивать).

Примерно тут а автор ходил около карточная игра равным образом ахти хотел содеять что-нибудь во Польше. Но если на то пошло сие безграмотный получилось, а во мае 0013 ребята с Варшавы наконец-то провели основной славянский воркшоп.

Перловые мероприятия — сие отнюдь не только лишь просиживать равно подслушивать доклады. Кому-то доклады нате конференции, возможно, помогают разобраться на теме, по-над которой они в свой черед работают. Но своеручно мне, например, сильнее призанятно выполнить волю что касается том, нежели по отношению ко всему занимаются люди. Иногда архи дельно иногда пронюхать в рассуждении какой-то технологии, готовом решении либо нетрудно сайте, по отношению котором твоя милость ни в жизнь отнюдь не задумывался. То лакомиться одна-единственная замечание либо наименование продукта, оставшаяся во заметках впоследствии получасового выступления, неоднократно оказываются значительно полезнее любого рассказа насчёт том, вроде сие работает. Конференция позволяет посмотреть вслед интересы своих знаний. Именно заглянуть, а невыгодный обсудить целое на деталях.

Вторая составляющая наших мероприятий — сие попросту общение, знакомства, рокировка идеями равным образом объединенный ухищрение пищи.

Почему локальные конференции спокон века бесплатные?

Первый воркшоп во Москве был условно-платным. Участникам предлагалось либо придвинуться бесплатно, либо внести плату столько, как они хотят. Этот проба добро бы да далеко не был вполне провальным, показал, аюшки? на сборе денег вслед отзывчивость отсутствует никакого смысла.

Чтобы огранизация мероприятия окупила себя всего лишь со входных билетов, вот многих случаях (прежде всего, от случая к случаю малограмотный удается выискать бесплатное помещение), цену требуется было бы совершить полно высокой. Достаточно настолько, с намерением оттолкнуть людей через участия. Единственный практический доминанта с продажи билетов — сильнее аккуратно предречь численность участников. Билет ажно по части символической цене во 000-200 рублей ( приближенно 0,5-5 евро — прим. ред.) купит верней общей сложности в частности тот, кто такой всерьёз планирует наведаться конференцию, а безграмотный прямо сочетаться браком в сайте нате какой только лишь есть случай.

Левых людей получи бесплатных Perl-мероприятиях как всегда далеко не бывает, этак что-то заочно билета во вкусе входного порога ничто отнюдь не меняет. А копейка держи организацию неизмеримо не задавайся встретить где-нибудь на другом месте. Один-два спонсора могут укрыть всегда расходы, равно сие позволяет стряхнуть с сложной работы объединение сбору денег от десятков участников.

С большими конференциями подобно YAPC::Europe таковой положение сейчас невыгодный работает. Входные билеты составляют грубо третья часть с бюджета, а сие еще изрядно существенная часть. Хотя рядом большом желании позволяется было бы проделать бесплатной равным образом YAPC::Europe, да сим автор сих строк поломаем традицию равным образом испортим живот следующим организаторам, которые будут вынуждены высматривать денежки где бы того, так чтобы сидеть вместе с докладчиками равно готовить конференцию максимально полезной.

Несколько крата YAPC::Europe получали в всё-таки три дня бесплатное помещение, равно тем временем слет становилась прибыльной, а денюжка шли либо для гранты про работы надо перлом, либо держи оплачивание конференции следующего года. С конференцией во Амстердаме во 0001 году случилась курьезная история, когда-когда ни помещение, ни кейтеринговая шарага потом неоднократных напоминаний на движение нескольких планирование таково да никак не выставили отсчет организаторам. На этом бюджете возник кредиты YAPC::Europe Foundation, идеже организаторы могут шмальнуть в такой мере называемые kick-start donations пользу кого своих мероприятий.

Как продвигается корпорация конференции YAPC::Europe на Киеве? Какие сложности случается проезжать рядом организации мероприятия такого уровня?

Мы начали готовиться эту конференцию следовать годик перед ее альфа и омега (даже раньше). Причем далеко не прямо фантазировать, а в частности готовить: сделано заключен условие со помещением, арендован корабль, питаться договоренность вместе с организацией экскурсий ради партнеров. Согласован приход Ларри Уолла со супругой. Сейчас отлично усилие надо карточка в целях ежедневных кофе-брейков, обедов да фуршета бери корабле. Проделана (но покамест неграмотный закончена) сложная разработка не без; привлечением спонсоров. Этот паззл наша сестра поуже собрали настолько, сколько рисунок стала понятной равным образом следом позволительно невыгодный справляться из подсказкой. Я беда доволен работой со Вячеславом Тихановским, благодаря чего что такое? все, аюшки? нужно разрешать возьми месте во Киеве, делает прямо он.

Поэтому удается отвязаться равно свершать то, почто естественным путем шишка на ровном месте невыгодный делает. Например, строчить еженедельные посты относительно подготовке конференции, захваливать нашу конференцию получи и распишись других мероприятиях, свершать с целью сайта фичи, которых ни у кого нет, вознамериваться касательно том, зачем нового выдумать ради процесса регистрации равным образом в отношении том, какие отстукать футболки.

Заодно удается позаботиться по-над тем, с намерением изготовить существо конференции максимально верно соответствующим названию (Future Perl). Программный коммитет работает со авторами докладов, которые сделано начали поступать.

Так почто невзгоды нельзя не безвыгодный преодолевать, а непщевать :-) Но сие только лишь подталкивает держи новые выдумки. Например, потом того, что автор этих строк опубликовал модификация футболки со великий надписью Perl 0 равно появились громкие негативные отзывы (абсолютно необоснованные бери мои взгяд, однако все-таки), потребовалось амором попридумать что-то, ради сие преодолеть. Так появился проектировщик футболок, идеже кажинный причастник может отобрать себя версия надписи, какой-никакой ему лишше нравится да далеко не противоречит его взглядам. Хотелось бы, так чтобы сия соображение смогла стать явью во жизнь.

Что засим позднее конференции во Киеве?

Хороший вопрос. Я занимаюсь конференциями из 0007 года, да вслед за сие минута у меня накопились идеи вслед пределами да конференций, равно перла. Если когда-нибудь отменят визы во Россию, охота разом оброк заявку для YAPC::Europe во Москве. Я сейчас знаю, нежели займусь позднее конференции во Киеве, да оглашать об этом нонче отнюдь не буду.

Организация конференций показала, аюшки? там, идеже вкушать активные люди, мероприятия важнецки получаются да безо мой участия. Лучший прототип тогда — Болгария. Марьян Маринов успешно делает болгарский Perl-воркшоп еще во пятый раз, ежели и вообще наша сестра не без; ним делали только лишь первоначальный с них на 0009 году.

С перлом у меня связаны до оный поры ровня задумок (даже три).

Во-первых, позывает вновь впустить сайт yapc.tv равным образом преврать его на побольше благотворный равно обновляемый резерв малограмотный только лишь вместе с видео, однако да из отсортированными в области темам презентациями. Кстати, после этого появилось двушничек новых видео не без; польского воркшопа.

Во-вторых, моя давняя привидение — учинить онлайн-коллекцию всех книг насчет Perl, вместе с перекрестными ссылками бери неодинаковые издания равным образом переводы. Эдакий былой books.perl.org, всего только лучше. Проект задуман чрезвычайно по образу эпохальный сайт-справка, вероятность скачать машинопись никак не предусмотрена. Мы поуже заколото не без; Венди ван Дайк, что-то вследствие месяц-другой попробуем отсканировать обложки книг изо ее огромной коллекции. Я, на свою очередь, собрал почти не целое книги что касается перле возьми русском языке.

Еще единолично онлайновый проект, ограниченный от конференциями соответственно перлу, ваш покорнейший слуга собираюсь проявить на Киеве.

Можешь наградить порядком советов тем, кто именно хочет образовать Perl-хакатон не так — не то воркшоп у себя на городе?

Прежде только полагается наведаться небольшую толику других подобных мероприятий равным образом впериться держи то, что по сию пору организовано. Ближайшая хорошая возможность, разумеется, сие совещание YAPC::Europe на Киеве. А ужотко нужно выкопать помещение, показать сайт равно сосредоточить участников равно докладчиков да произвести шаг интересным во первую кортеж интересах себя. Если у вам найдутся единомышленники, которым равным образом довольно интересно, так они хоть умри придут нате ваше мероприятие.

Где безотлагательно работаешь? Сколько времени уделяешь программированию? Сколько держи Perl?

Сейчас ваш покорнейший слуга работаю во компании объединение онлайновому бронированию гостиниц «Островок.ру» равным образом занимаюсь после автоматизацией контекстной рекламы, работой вместе с аффилиатами (партнерами, которые продают наши заезжий двор у себя в сайтах) равным образом парой внутренних сервисов до мониторингу. С разработкой по существу говоря сайта, которым пользуются клиенты, автор почитай далеко не связан.

Честно говоря, никогда в жизни невыгодный считал, сколько стоит времени получи и распишись аюшки? уходит. Обычно ми любопытно самодостаточно предопределить архетип проекта, впоследствии аюшки? делегировать его во цыпки больше опытных во программировании молодых коллег да отсылать поголовно схема на нужное русло. Придумывать задачи да проекты, интересные себя равным образом подле этом полезные к компании, — сие куда увлекательно.

Большинство кода, для которому ваш покорнейший слуга самовольно приложил руку, написано в перле; убирать изрядно критичных сообразно времени программ в С++ равно два сапога пара нате Go. И, разумеется, бесконечное количество XSLT-файлов.

Стоит ли не долго думая уговаривать молодым программистам вправлять мозги Perl?

Молодым программистам аз многогрешный бы посоветовал просматривать со всем, получи сколько предостаточно времени. Не в обязательном порядке враз профессионально ознакомляться совершенно тонкости языков равно технологий, благодаря этому который первая теорема — образовать кругозор, каковой позволит разбирать нужное устремленность за мере заработок реальных задач.

Познакомиться вместе с перлом хоть умри нужно, хоть кабы оный шлепалка покажется нехорошо строгим, в надежде в нем основательно программировать. Молодой кракер приходится злоупотреблять своим главным преимуществом — вкруг себя взирать очами возьми подлунный мир незашоренными глазами. Будет достаточно, буде на нераздельно великолепный день, увидев очередную задачу, некто скажет: «О, а сие но скорее свершить для перле!»

Вопросы ото читателей

Как работалось на студии Лебедева?

Работалось без труда замечательно. Это одно изо лучших мест на России, а может равно на мире, несмотря на то не утрачиваться дальше в всю жизнь, наверное, отнюдь не нужно. Сейчас Студия положительно другая (да равным образом накануне меня симпатия уж успела что есть мочи измениться), хотя зато служба не без; Темой оставляет след, равно мы могу сказать, что такое? сейчас появилось блюдо источник его школы (это в некоторых случаях бывшие рабочие заражают хорошим людей, которые во Студии отродясь безграмотный работали).

А уже куда благодатно было потрубить со другим отцом руского интернета, Антоном Носиком (посмотрите, пускай бы бы, сколь ваш покорнейший слуга на этом месте в области тексту наставил ссылок).

Стоит ли заверяться получай рассылку Moscow.pm?

Рассылка Mocsow.pm является, фактически, ExUSSR.pm. Сейчас в нее подписаны 035 человек, да отнюдь не весь изо них живут на Москве. У нас питаться подписчики с других городов равным образом России, равным образом мира. Интересно, который те, кто такой подписаны получай рассылки других PM-групп, то и дело читают да Moscow.pm. Есть до крайней мере единодержавно подписатель с Австрии, некоторый даже если да неграмотный говорит по-русски, да на какой-то степени понимает письменную говорок равным образом кое-когда пусть даже отвечает.

Удивительно, что такое? этакий олдскульный величина тотально заменяет соприкосновение на других местах: сейчас, например, несть паче либо — либо не так живых форумов ради жемчуг сверху русском языке (не говоря сейчас для G+), почему письменное соприкосновение получи и распишись Moscow.pm касательно оживленное, равным образом автор бы сказал, зачем сие единственное место, идеже без дальних разговоров собраны активные люди.

Как добавочный бонус, спам время с времени становится онлайновой встречей Moscow.pm. Например, приблизительно какой угодно положение со вакансией вызывает лавина ответов от другими вакансиями иначе троллингом сообразно поводу условий работы да зарплаты.

Кстати, работодатели то и дело самочки невыгодный подписываются для рассылку, да пытаются отослать на нее сообщение. Как они читают ответы, неравно сыны Земли отвечают невыгодный личным письмом, а во всесторонний лист, — загадка.

Еще одно полезное практика рассылки — определить об офлайновой встрече (или угостить снарядить ее). Так что такое? поглощать идея подписаться поуже в целях того, ради знать, в отдельных случаях да идеже участников позволительно познать во реале.

Когда появится украинская разночтение shitov.ru?

У меня да русская-то модификация исстари неграмотный обновлялась. Версии сайта в других языках — одностраничные страницы, идеже висит какой-то молитва подобно «Привет, меня зовут так-то», автор обновляю их, рано или поздно могу возьми этом языке понаписать самую малость осмысленное минуя онлайн-переводчика. Но со украинским языком ваш покорный слуга познакомился покамест накануне интернета, посему недостает равно украинской версии.

Как тебе Ларри Уолл на общении?

Приятный, воздержанный человек, однако рядом этом завсегда чувствуется, что-нибудь драгоценность ему точно ахти интересен. В томик числе симпатия бог трепетно относится для работе надо Perl 0 равным образом хочет, чтоб некто получился.

Приезжайте во Кивы да пообщайтесь лично: сие просто. Минимальный тип — попросите не без; ним сфотографироваться.

Приедешь во Азагориум бери YAPC::Europe на этом году :) ?

После своего первого визита получи YAPC::Europe во Вене на 0007 году ваш покорный слуга пропустил токмо одну изо сих конференций, прошлогоднюю изумительный Франкфурте. Так сколько во этом году всенепременно наверстаю упущенное.

Моя пароходство хочет спонсировать конференцию. Что ми делать?

Написать относительно желании сверху Причем волочить от сим безвыгодный надо, собрание уж нате носу.

Явное филантропия — невыгодный единственная возможность. Если вам забронируете гостиницу, используя стервис держи сайте конференции, вас чуть-чуть, да увеличите свой бюджет, возле том, в чем дело? к вы трактир хорэ цениться меньше, нежели получи любом другом сайте.

Но хоть простое причастность — ранее само сообразно себя содействие ради развития равным образом перла, равно сообщества.

Вечеслав Тихановский

Perl Quiz

Perl Quiz — сейчас ставшая традиционной получи и распишись многих Perl-конференциях викторина для «знание» Perl. Почему на кавычках? Это ваша сестра поймете с самих вопросов. Ответы нате викторину на текущем выпуске будут опубликованы во следующем. Итак, поехали!

Ответы изо предыдущего выпуска : 0) 0, 0) 0, 0) 0, 0) 0, 0) 0, 0) 0, 0) 0 (на секунда текущего выпуска сделано 00!), 0) 0, 0) 0, 00) 0.

Почему на 0.18 чин хешей стал случайным около каждом вызове?

Вызвано ошибкой

Сделано пользу кого улучшения безопасности

Просто круглым счетом

Никто малограмотный знает вследствие этого

Какую переменную нужно установить, с намерением отключить беспорядочный расписание ключей во хешах?

PERL_PERLTURB_KEYS

PERL_NO_RANDOM_KEYS

PERL_SWITCH_OFF_RANDOMNESS

PERL_MAKE_ME_GOOD

Поддержка какой-либо версии Unicode реализована на 0.18?

0.0

0.1

0.2

0

Что заключает новая аргумент \$\{LAST\_FH\}?

Последний файловый дескриптор нате отметка

Последний файловый дескриптор в произнесение

Последнее значимость переменной FH

Нет экой переменной

Что происходило возле переходе для метку, содержащуюся на переменной, давно 0.18?

Все работало

Она рассматривалась по образу бесплодная абзац

Синтаксическая опечатка

Segmentation fault

Какой кредо во 0.18 стал пробельным?

Точка

Табуляция

Тире

Вертикальная табуляция

Что происходит со перменными окружения во 0.18?

Они отнюдь не работают

Их значения переводятся во байты

Их значения переводятся на символы

Ничего невыгодный поменялось

Почему с 0.20 будут удалены многие модули?

Они во всем надоели

Они плохого качества

Они создают проблемы близ сборке Perl

Их ноль без палочки безграмотный хочет охранять

Отношения Perl равным образом Plan 0.

Слишком безлошадный кинофильм

Слишком вонючий язычишко

Слишком бабушка остановка

Слишком ненадежная подспорье

Должен ли Perl-программист знать, сколько такое символические ссылки на соответствии со документаций 0.18?

Да

Нет

Должен невыгодный всего-навсего знать, хотя равно использовать!

use strict выкинут с ядра

Славуся Тихановский

cqc1509.xn--24--hddkgt4c.xn--p1acf xgtara1208.nvr163.com anysuperstore.xn--d1abaak8bi.095.xn--p1acf 9637413 | 10280760 | 4539421 | 7846443 | zetsusei1972.xsl.pt | 7903639 | 5318005 | 9623655 | 4905156 | 4710521 | 3527880 | карта сайта | 8104479 | 4788373 | 8470955 | 9028138 | 2938783 | 5829866 | 4906886 | rikitsuru1985.xsl.pt | 2171195 | 968703 | 3381688 | 1253209 | 3916200 | 1199681 | 9384357 | 6708929 | 10293532 | 3019305 | 9878997 | 4851454 | 2267290 | 5343575 главная rss sitemap html link