АнглийскийФранцузскийИспанский

Значок OnWorks

perl5200delta - Интернет в облаке

Запустите perl5200delta в бесплатном хостинг-провайдере OnWorks через Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS

Это команда perl5200delta, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

ПРОГРАММА:

ИМЯ


perl5200delta - что нового в perl v5.20.0

ОПИСАНИЕ


В этом документе описаны различия между выпуском 5.18.0 и выпуском 5.20.0.

Если вы обновляетесь с более ранней версии, такой как 5.16.0, сначала прочтите perl5180delta,
который описывает различия между 5.16.0 и 5.18.0.

Основные Улучшения


Экспериментальный подпрограмма подписей
Декларативный синтаксис для развертывания списка аргументов в лексические переменные. "sub foo ($a,$b)
{...}" проверяет количество аргументов и помещает аргументы в лексические переменные.
Сигнатуры не эквивалентны существующей идиоме «sub foo { my($a,$b) = @_; ... }».
Подписи доступны только при включении функции, отличной от умолчанию, и генерации предупреждений.
об экспериментаторстве. Синтаксическое противоречие с прототипами устраняется путем отключения
краткий синтаксис прототипа, когда подписи включены.

Подробности смотрите в разделе «Подписи» в perlsub.

"суб" сейчас взять a "прототип" атрибут
При объявлении или определении «подчинителя» прототип теперь можно указать внутри
Атрибут «прототип» вместо скобок после имени.

Например, «sub foo($$){}» можно переписать как «sub foo :prototype($$){}».

Ещё последовательный прототип разбор
Множественные точки с запятой в прототипах подпрограмм долгое время допускались и рассматривались как
одна точка с запятой. Был один случай, когда этого не произошло. Подпрограмма, чья
прототип начинается с "*" или ";*" может повлиять на то, будет ли голое слово считаться методом.
имя или дополнительный вызов. Теперь это относится и к ";;;*".

Пробелы уже давно разрешены внутри прототипов подпрограмм, поэтому «sub( $ $ )»
эквивалентно «sub($$)», но до сих пор оно удалялось при анализе подпрограммы.
Следовательно, пробелы были разрешено в прототипах, установленных «Scalar::Util::set_prototype». Сейчас
это разрешено, и анализатор больше не удаляет пробелы. Это означает «прототип
&mysub" возвращает исходный прототип, пробелы и все такое.

"ранд" сейчас использования a последовательный случайный номер генератор
Раньше Perl использовал генератор случайных чисел для конкретной платформы, варьирующийся между
Libc Rand (), случайный () or drand48 ().

Это означало, что качество случайных чисел Perl будет варьироваться от платформы к платформе.
из 15 бит Rand () в Windows до 48-битных на платформах POSIX, таких как Linux, с
drand48 ().

Perl теперь использует свою собственную внутреннюю drand48 () реализация на всех платформах. Это не
сделать "rand" Perl криптографически безопасным. [перл #115928]

Создать кусочек синтаксис
Новый синтаксис %hash{...} и %array[...] возвращает список ключей/значений (или индексов/значений).
пары. См. «Фрагменты хеша ключа/значения» в perldata.

Экспериментальный постфикс Разыменование
Когда действует функция «postderef», устанавливаются следующие синтаксические эквиваленты:
до:

$sref->$*; # то же, что ${ $sref } # интерполирует
$aref->@*; # то же, что @{ $aref } # интерполирует
$ href ->% *; # то же, что и% {$ href}
$ cref -> & *; # то же, что и & {$ cref}
$ gref -> **; # то же, что и * {$ gref}

$ aref -> $ # *; # то же, что и $ # {$ aref}

$gref->*{$slot }; # то же, что *{ $gref }{ $slot }

$aref->@[ ... ]; # то же, что @$aref[ ... ] # интерполирует
$href->@{ ... }; # то же, что @$href{ ... } # интерполирует
$ aref ->% [...]; # то же, что и% $ aref [...]
$ href ->% {...}; # то же, что и% $ href {...}

Те, которые помечены как интерполирующие, интерполируются только в том случае, если соответствующая функция «postderef_qq»
также включен. Эта функция экспериментальный и вызовет
Предупреждения категории «experimental::postderef» при использовании, если они не подавлены.

Для получения дополнительной информации обратитесь к разделу Perlref «Синтаксис разыменования Postfix».

Unicode 6.3 сейчас поддержал
Perl теперь поддерживает и поставляется с Unicode 6.3 (хотя Perl можно перекомпилировать с любым
также предыдущий выпуск Unicode). Подробный список изменений Unicode 6.3 можно найти по адресу
<http://www.unicode.org/versions/Unicode6.3.0/>.

Создать "\ p {Unicode}" регулярный выражение описания собственность
Это синоним «\p{Any}» и соответствует набору кодовых точек, определенных в Юникоде: 0 –
0x10FFFF.

Лучшая 64-бит поддержка
На 64-битных платформах функции внутренних массивов теперь используют 64-битные смещения, что позволяет Perl
массивы для хранения более 2**31 элементов, если у вас есть доступная память.

Механизм регулярных выражений теперь поддерживает строки длиной более 2**31 символа. [перл
#112790, #116907]

Функции PerlIO_get_bufsiz, PerlIO_get_cnt, PerlIO_set_cnt и PerlIO_set_ptrcnt теперь
имеют SSize_t, а не int, возвращающие значения и параметры.

"использовать locale " сейчас работает on UTF-8 местный
До этого выпуска поддерживались только однобайтовые локали, такие как серия ISO 8859.
Теперь также поддерживаются все более распространенные многобайтовые локали UTF-8. Локаль UTF-8.
это тот, в котором набор символов — Unicode, а кодировка — UTF-8. POSIX
Операции категории «LC_CTYPE» (изменение регистра (например, «lc()», «\U») и символов
классификация ("\w", "\D", "qr/[[:punct:]]/")) в такой локали работает так же, как если бы не
в соответствии с локалью, но вместо этого, как если бы в разделе «использовать функцию 'unicode_strings'», за исключением правил искажения
соблюдаются. В этом выпуске сортировка по порядку кодовых точек сохраняется. [перл № 56820].

"использовать locale " сейчас компилирует on системы без местный способность
Ранее это приводило к тому, что программа не компилировалась. В рамках своей программы программа
ведет себя так, как будто в локали «C». Таким образом, программы, написанные для платформ, поддерживающих локали.
может работать на платформах без локали без изменений. Попытки изменить локаль с
локаль «C», конечно, не сработает.

Ещё местный инициализация отступление кредита
Если во время запуска Perl возникала ошибка с локалями, он немедленно сдавался и пробовал
использовать локаль «C». Теперь он сначала пытается использовать другие локали, заданные средой.
переменные, как описано в разделе «ОКРУЖАЮЩАЯ СРЕДА» в perllocale. Например, если «LC_ALL» и
Оба параметра «LANG» установлены, и использование локали «LC_ALL» не удается, Perl теперь попытается использовать «LANG».
локаль, и только если это не удастся, он вернется к «C». На машинах с Windows Perl будет
попробуйте, прежде чем использовать «C», локаль системы по умолчанию, если все локали заданы средой
переменные не работают.

"-ДЛ" время выполнения вариант сейчас добавленный для трассировка местный установка
Это предназначено для разработчиков ядра Perl, чтобы помочь в отладке ошибок, связанных с
местный.

-F сейчас подразумевает -a и -a подразумевает -n
предварительно -F без -a был бездействующим, и -a без -n or -p было бездействовать, с этим
изменить, если вы предоставите -F тогда оба -a и -n подразумеваются, и если вы предоставите -a тогда -n is
подразумеваемых.

Вы все еще можете использовать -p за его дополнительное поведение. [перл #116190]

$a и $b предупреждение из прогибиционистского
Специальные переменные $a и $b, используемые при сортировке, теперь освобождены от предупреждений об использовании один раз.
даже там, где «сортировка» не используется. Это упрощает предоставление функций модулям CPAN.
используя $a и $b для аналогичных целей. [перл #120462]

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


Избежать возможное читать of свободно()d Память в течение разбор
Возможно, что свободно()d память могла быть прочитана во время синтаксического анализа в необычном
обстоятельство, что программа Perl заканчивается heredoc и последней строкой файла на
диск не имеет завершающего символа новой строки. Теперь это исправлено.

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


"делать" нет дольше be использовал в призывают подпрограммы
Форма «do SUBROUTINE(LIST)» приводила к предупреждению об устаревании, начиная с Perl v5.0.0,
и теперь это синтаксическая ошибка.

Как цитата бежать изменения
Символ после "\c" в строке, заключенной в двойные кавычки ("..." или qq(...)) или в обычной строке.
выражение теперь должно быть печатным символом и не может быть "{".

Литерал "{" после "\B" или "\b" теперь является фатальным.

Они устарели в Perl v5.14.0.

Порча происходит недооценивают ее больше обстоятельства; сейчас Удовлетворяет в документации
Это влияет на сопоставление регулярных выражений и изменение регистра строки («lc», «\U»,
и т.д.) в рамках «использовать локаль». Результат теперь испорчен в зависимости от операции,
независимо от содержимого строки, как указано в документации (perlsec, "SECURITY"
в perllocale) указывает, что так и должно быть. Ранее для операции изменения регистра, если
строка не содержала символов, на изменение регистра которых могла повлиять локаль,
результат не будет испорчен. Например, результат «uc()» для пустой строки или одной
содержащий только кодовые точки выше Latin1, теперь испорчен, чего не было раньше. Это ведет к
более стабильные результаты порчи. Шаблоны регулярных выражений портят их небинарность.
результаты (например, $&, $2) тогда и только тогда, когда шаблон содержит элементы, сопоставление которых зависит
в текущей (потенциально испорченной) локали. Как и в случае с функциями изменения регистра, фактическое
содержимое сопоставляемой строки теперь не имеет значения, тогда как раньше это имело значение. Для
Например, если шаблон содержит «\w», результаты будут испорчены, даже если совпадение имело место.
не обязательно использовать эту часть шаблона для успеха или неудачи, потому что что такое "\w"
совпадения зависят от локали. Однако, например, "." в шаблоне не будет включено
испорчено, потому что точка соответствует любому отдельному символу и текущей локали.
никак не меняется, что совпадает, а что нет.

"\п{}", "\П{}" согласование и менялась для не-Юникод код пунктов.
"\p{}" и "\P{}" определяются в Юникоде только для кодовых точек, определенных в Юникоде ("U+0000"
через «U+10FFFF»). Их поведение при сопоставлении этих допустимых кодовых точек Unicode
без изменений, но есть изменения для кодовых точек 0x110000 и выше. Раньше Перл
обрабатывал результат сопоставления "\p{}" и "\P{}" с ними как "undef", что
переводится как «ложь». Для "\P{}" это затем было дополнено до "true". Предупреждение
должен был быть поднят, когда это произошло. Однако различные оптимизации могут
предотвратить предупреждение, и результаты часто были нелогичными, как с совпадением, так и с
его кажущееся дополнение ложно. Теперь все кодовые точки, отличные от Unicode, рассматриваются как
типичные неназначенные кодовые точки Юникода. Обычно это больше похоже на принцип «Делай то, что я имею в виду». Предупреждение
возникает только в том случае, если результаты явно отличаются от строгого подхода Unicode, и
от того, что раньше делал Perl. Код, который должен быть строго совместимым с Unicode, может сделать это
предупреждение фатально, и тогда Perl всегда выдает предупреждение.

Подробности см. в разделе «За пределами кодовых точек Unicode» в perlunicode.

"\ p {Все}" и было расширенный в совпадение ВСЕ возможное код пунктов
Определенный в Perl элемент шаблона регулярного выражения "\p{All}", не используемый в CPAN, используется для
сопоставлять только кодовые точки Unicode; теперь он соответствует всем возможным точкам кода; то есть, это
эквивалентно «qr/./s». Таким образом, «\p{All}» больше не является синонимом «\p{Any}», что
продолжает соответствовать только точкам кода Юникода, как и требует Юникод.

Данные::Dumper's выходной май изменение
В зависимости от сбрасываемых структур данных и настроек, установленных для Data::Dumper, сброшенные
вывод мог измениться по сравнению с предыдущими версиями.

Если у вас есть тесты, которые зависят от точных результатов Data::Dumper, они могут завершиться неудачно.

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

Место действия десятичная дробь точка персонаж нет дольше утечки внешнюю of "использовать locale " сфера
На самом деле это исправление ошибки, но некоторый код стал полагаться на наличие ошибки, поэтому
это изменение указано здесь. Текущая локаль, под которой работает программа, не является
Предполагается, что код Perl будет виден, за исключением случаев, когда указано «использовать локаль». Однако,
до сих пор при определенных обстоятельствах символ, используемый для десятичной точки (часто
запятая) вытекла за рамки. Если это изменение затронуло ваш код, просто добавьте
«использовать локаль».

Задания of Windows розетки ошибка Коды в $! сейчас предпочитать errno.h ценности за
WSAGetLastError () ценности
В предыдущих версиях Perl коды ошибок сокетов Windows возвращались WSAGetLastError ()
были присвоены $!, а некоторые константы, такие как ECONNABORTED, отсутствуют в errno.h в VС++ (или
различные порты gcc для Windows) были определены с соответствующими значениями WSAE*, чтобы разрешить использование $!
для проверки на соответствие константам E*, экспортированным Errno и POSIX.

Это работало хорошо до VC++ 2010 и более поздних версий, в которых были представлены новые константы E* со значениями.
> 100 в errno.h, в том числе некоторые из них (пере) определены Perl в значения WSAE*. Это вызвало
проблемы при связывании кода XS с другими библиотеками, которые использовали исходные определения
of errno.h константы.

Чтобы избежать этой несовместимости, Perl теперь сопоставляет коды ошибок WSAE* со значениями E*, где
возможно, и присваивает эти значения $!. Константы E*, экспортируемые Errno и POSIX.
обновляются в соответствии с тестом $! против них, где это возможно ранее, будет
продолжают работать должным образом, и все константы E*, найденные в errno.h теперь экспортируются из
эти модули с их оригинальными errno.h значения.

Чтобы избежать поломок существующего кода Perl, который присваивает значения WSAE* переменной $!, perl
теперь перехватывает присваивание и выполняет то же сопоставление со значениями E*, что и при использовании
внутренне при назначении $! сам.

Однако остается одна обратная несовместимость: существующий код Perl, который сравнивает $!
против числовых значений кодов ошибок WSAE*, которые ранее были присвоены $!
теперь будет нарушено в тех случаях, когда было присвоено соответствующее значение E*
вместо. Это проблема только для тех значений E* < 100, которые всегда экспортировались из
Errno и POSIX с их оригиналом errno.h значения и, следовательно, не могут быть использованы для
Тесты кода ошибки WSAE* (например, WSAEINVAL — 10022, но соответствующий EINVAL — 22). (Е*
значения > 100, если они присутствуют, в любом случае были переопределены на значения WSAE*, поэтому совместимость может быть обеспечена.
достигается за счет использования констант E*, которые будут работать как до, так и после этого изменения,
хотя и используют разные числовые значения под капотом.)

функции "PerlIO_vsprintf" и "PerlIO_sprintf" встали на сторону было удаленный
Эти две функции, недокументированные, неиспользуемые в CPAN и проблемные, были удалены.

Устаревание


Команда "/\С/" персонаж класс
Класс символов регулярного выражения «/\C/» устарел. Начиная с Perl 5.22 и далее, это
сгенерирует предупреждение, и начиная с Perl 5.24 это будет регулярное выражение
ошибка компилятора. Если вам нужно изучить отдельные байты, составляющие кодировку UTF8,
символ, затем сначала используйте «utf8::encode()» для строки (или ее копии).

буквальный контроль символы in переменная имена
Это прекращение поддержки затрагивает такие вещи, как $\cT, где \cT — это буквальный элемент управления (например, «NAK»
или символ «ОТРИЦАТЕЛЬНОЕ ПОДТВЕРЖДЕНИЕ») в исходном коде. Удивительно, но оказывается, что
изначально это было задумано как канонический способ доступа к таким переменным, как $^T, с
форма каретки добавляется только в качестве альтернативы.

Буквальная форма управления устарела по двум основным причинам. Он имеет то, что, вероятно,
неисправимые ошибки, такие как $\cI, не работающий в качестве псевдонима для $^I, и их использование не
переносимость на платформы, отличные от ASCII: хотя $^T будет работать везде, \cT — это пробел в
EBCDIC. [перл #119123]

Рекомендации в нецелые числа и неположительный целые in $/
Установка $/ для ссылки на ноль или ссылки на отрицательное целое число теперь устарело.
и будет вести себя точно, как будто для него установлено значение «undef». Если вы хотите, чтобы поведение чавкания было установлено
$/ в «undef» явно.

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

Характер согласование процедуры in POSIX
Использование любой из этих функций в модуле «POSIX» больше не рекомендуется: «isalnum»,
"isalpha", "iscntrl", "isdigit", "isgraph", "islower", "isprint", "ispunct", "isspace",
«isupper» и «isxdigit». Функции содержат ошибки и не работают в кодировке UTF-8.
струны. Дополнительную информацию смотрите в их записях в POSIX.

Предупреждение выдается при первом вызове любого из них из каждого места кода, в котором они находятся.
называются. (Следовательно, повторение оператора в цикле вызовет только одно предупреждение.)

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

Использование потоков на основе интерпретатора в Perl официально не рекомендуется.

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

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

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

CGI и связанные с ним пакеты CGI::
вкл::последний
Пакет::Константы
Module :: Build и связанный с ним Module :: Build :: packages

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

найти2perl
s2p
A2P

эффективности Улучшения


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

Эта функция уже была доступна в версии 5.18.0, но по умолчанию она не была включена. Это
по умолчанию, и вам больше не нужна сборка Perl с помощью Настроить Аргумент:

-Accflags = -DPERL_NEW_COPY_ON_WRITE

Его можно отключить (на данный момент) в Perl-сборке с помощью:

-Accflags=-DPERL_NO_COW

В некоторых операционных системах Perl можно скомпилировать таким образом, что любая попытка
изменение строковых буферов, общих для нескольких SV, приведет к сбою. Таким образом, авторы XS могут протестировать
что их модули правильно обрабатывают скаляры копирования при записи. См. «Копирование при записи» в
перлгутс за подробности.

· В Perl имеется оптимизатор шаблонов регулярных выражений. Он анализирует шаблон, чтобы
найти такие вещи, как минимальная длина строки, которой должна соответствовать, и т. д. Теперь это
лучше обрабатывает точки кода, находящиеся выше диапазона Latin1.

· Выполнение регулярного выражения, содержащего якорь «^» (или его вариант под флагом «/m»)
в ряде ситуаций было сделано намного быстрее.

· Предварительно вычисленные значения хеш-функции теперь используются в большем количестве мест при поиске метода.

· Поиск постоянных хеш-ключей ($hash{key} в отличие от $hash{$key}) уже давно
внутреннее хэш-значение, вычисляемое во время компиляции, для ускорения поиска. Эта оптимизация
только сейчас было применено и к срезам хэша.

· Комбинированные операторы «и» и «или» в пустом контексте, например, созданные для «если только
($a && $b)" и "if ($a || b)" теперь замыкаются непосредственно на конец оператора.
[perl # 120128]

· В определенных ситуациях, когда «return» является последним оператором в основной строке подпрограммы.
область видимости, она будет оптимизирована. Это означает такой код:

суббаз {вернуться $cat; }

теперь будет вести себя так:

суббаз {$cat; }

что заметно быстрее.

[perl # 120765]

· Код типа:

мой $x; # или @x, %x
мой $y;

теперь оптимизирован для:

мой ($x, $y);

В сочетании с оптимизацией диапазона Padrange, представленной в версии 5.18.0, это означает более длительную
неинициализированы, мои операторы переменных также оптимизированы, поэтому:

мой $x; мой @y; мой %z;

будет выглядеть так:

мой ($x, @y, %z);

[perl # 121077]

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

· Оптимизация для массивов, индексированных небольшим постоянным целым числом, теперь применяется для
целые числа в диапазоне -128..127, а не 0..255. Это должно ускорить код Perl
используя выражения типа $x[-1] за счет (предположительно гораздо более редкого) кода, использующего
выражения типа $x[200].

· Первая итерация по большому хешу (с использованием «ключей» или «каждого») теперь выполняется быстрее. Это
достигается за счет предварительного выделения внутреннего состояния итератора хеша, а не ленивого
создавая его при первой итерации хеша. (Для небольших хешей итератор по-прежнему
создается только тогда, когда это необходимо. Предполагается, что небольшие хеши с большей вероятностью
использоваться как объекты и, следовательно, никогда не выделяться. Для больших хэшей это меньше
скорее всего, это правда, и стоимость выделения итератора перекрывается стоимостью
выделение места для самого хеша.)

· При выполнении глобального регулярного выражения для строки, полученной из «readline» или «<>»
оператор, данные больше не копируются без необходимости. [перл #121259]

· Разыменование (как в «$obj->[0]» или «$obj->{k}») теперь происходит быстрее, если $obj является
экземпляр класса, который имеет перегруженные методы, но не перегружает ни один из
методы разыменования "@{}", "%{}" и т. д.

· Оптимизатор Perl больше не пропускает оптимизирующий код, следующий за определенным «eval {}».
выражения (в том числе с кажущимся бесконечным циклом).

· Реализация теперь лучше справляется с предотвращением бессмысленной работы во время выполнения.
Внутренние «нулевые» операции без эффектов (созданные как побочный эффект анализа Perl
программы) обычно удаляются во время компиляции. Это удаление теперь применяется в
некоторые ситуации, которые ранее не рассматривались.

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

Модули и Прагмата


Создать Модули и Прагмата
· В ядро ​​Perl добавлена ​​экспериментальная версия 0.007.

· IO::Socket::IP 0.29 был добавлен в ядро ​​Perl.

обновленный Модули и Прагмата
· Архив :: Tar обновлен с версии 1.90 до 1.96.

· arybase обновлена ​​с версии 0.06 до 0.07.

· Attribute :: Handlers обновлен с версии 0.94 до 0.96.

· Атрибуты обновлены с версии 0.21 до 0.22.

· autodie обновлен с версии 2.13 до 2.23.

· AutoLoader обновлен с версии 5.73 до 5.74.

· autouse обновлен с версии 1.07 до 1.08.

· B обновлен с версии 1.42 до 1.48.

· B :: Concise обновлен с версии 0.95 до 0.992.

· B :: Debug обновлен с версии 1.18 до 1.19.

· B :: Deparse обновлен с версии 1.20 до 1.26.

· Обновлена ​​база с версии 2.18 до 2.22.

· Бенчмарк обновлен с версии 1.15 до 1.18.

· Bignum обновлен с версии 0.33 до 0.37.

· Carp обновлен с версии 1.29 до 1.3301.

· CGI обновлен с версии 3.63 до 3.65. ПРИМЕЧАНИЕ. CGI устарел и может быть
удален из будущей версии Perl.

· имена символов обновлены с версии 1.36 до 1.40.

· Class::Struct обновлен с версии 0.64 до 0.65.

· Compress :: Raw :: Bzip2 был обновлен с версии 2.060 до 2.064.

· Compress :: Raw :: Zlib был обновлен с версии 2.060 до 2.065.

· Config :: Perl :: V обновлен с версии 0.17 до 0.20.

· Постоянная обновлена ​​с версии 1.27 до 1.31.

· CPAN обновлен с версии 2.00 до 2.05.

· CPAN::Meta обновлен с версии 2.120921 до 2.140640.

· CPAN::Meta::Requirements обновлен с версии 2.122 до 2.125.

· CPAN::Meta::YAML обновлен с версии 0.008 до 0.012.

· Data::Dumper обновлен с версии 2.145 до 2.151.

· БД обновлена ​​с версии 1.04 до 1.07.

· DB_File обновлен с версии 1.827 до 1.831.

· DBM_Filter обновлен с версии 0.05 до 0.06.

· deprecate обновлен с версии 0.02 до 0.03.

· Devel :: Peek обновлен с версии 1.11 до 1.16.

· Devel::PPPort обновлен с версии 3.20 до 3.21.

· Диагностика обновлена ​​с версии 1.31 до 1.34.

· Digest :: MD5 обновлен с версии 2.52 до 2.53.

· Digest :: SHA обновлен с версии 5.84 до 5.88.

· DynaLoader обновлен с версии 1.18 до 1.25.

· Encode обновлен с версии 2.49 до 2.60.

· кодировка обновлена ​​с версии 2.6_01 до 2.12.

· Английский язык обновлен с версии 1.06 до 1.09.

$OLD_PERL_VERSION был добавлен как псевдоним $].

· Errno обновлен с версии 1.18 до 1.20_03.

· Exporter обновлен с версии 5.68 до 5.70.

· ExtUtils :: CBuilder обновлен с версии 0.280210 до 0.280216.

· ExtUtils :: Command обновлен с версии 1.17 до 1.18.

· ExtUtils::Embed обновлен с версии 1.30 до 1.32.

· ExtUtils :: Install обновлен с версии 1.59 до 1.67.

· ExtUtils::MakeMaker обновлен с версии 6.66 до 6.98.

· ExtUtils::Miniperl обновлен с версии до 1.01.

· ExtUtils :: ParseXS обновлен с версии 3.18 до версии 3.24.

· ExtUtils::Typemaps обновлен с версии 3.19 до 3.24.

· ExtUtils::XSSymSet обновлен с версии 1.2 до 1.3.

· функция обновлена ​​с версии 1.32 до 1.36.

· поля обновлены с версии 2.16 до 2.17.

· File :: Basename был обновлен с версии 2.84 до 2.85.

· File :: Copy обновлен с версии 2.26 до 2.29.

· File :: DosGlob обновлен с версии 1.10 до 1.12.

· File :: Fetch был обновлен с версии 0.38 до 0.48.

· File :: Find обновлен с версии 1.23 до 1.27.

· File :: Glob обновлен с версии 1.20 до 1.23.

· File :: Spec был обновлен с версии 3.40 до 3.47.

· Файл::Temp обновлен с версии 0.23 до 0.2304.

· FileCache обновлен с версии 1.08 до 1.09.

· Filter :: Simple был обновлен с версии 0.89 до 0.91.

· Filter::Util::Call обновлен с версии 1.45 до 1.49.

· Getopt::Long обновлен с версии 2.39 до 2.42.

· Getopt::Std обновлен с версии 1.07 до 1.10.

· Hash :: Util :: FieldHash обновлен с версии 1.10 до 1.15.

· HTTP :: Tiny был обновлен с версии 0.025 до 0.043.

· I18N :: Langinfo был обновлен с версии 0.10 до 0.11.

· I18N::LangTags обновлен с версии 0.39 до 0.40.

· Если был обновлен с версии 0.0602 до 0.0603.

· Inc::latest обновлен с версии 0.4003 до 0.4205. ПРИМЕЧАНИЕ. Inc::latest
устарел и может быть удален из будущей версии Perl.

· целое число было обновлено с версии 1.00 до 1.01.

· IO обновлен с версии 1.28 до 1.31.

· IO::Compress::Gzip и его друзья были обновлены с версии 2.060 до 2.064.

· IPC :: Cmd был обновлен с версии 0.80 до 0.92.

· IPC :: Open3 был обновлен с версии 1.13 до 1.16.

· IPC :: SysV был обновлен с версии 2.03 до 2.04.

· JSON::PP обновлен с версии 2.27202 до 2.27203.

· List::Util обновлен с версии 1.27 до 1.38.

· локаль обновлена ​​с версии 1.02 до 1.03.

· Locale :: Codes обновлен с версии 3.25 до 3.30.

· Locale :: Maketext обновлен с версии 1.23 до 1.25.

· Math :: BigInt был обновлен с версии 1.9991 до 1.9993.

· Math :: BigInt :: FastCalc был обновлен с версии 0.30 до 0.31.

· Math :: BigRat был обновлен с версии 0.2604 до 0.2606.

· MIME::Base64 обновлен с версии 3.13 до 3.14.

· Модуль::Build обновлен с версии 0.4003 до 0.4205. ПРИМЕЧАНИЕ. Модуль::Build
устарел и может быть удален из будущей версии Perl.

· Module :: CoreList обновлен с версии 2.89 до 3.10.

· Module :: Load обновлен с версии 0.24 до 0.32.

· Module :: Load :: Conditional был обновлен с версии 0.54 до 0.62.

· Module :: Metadata обновлен с версии 1.000011 до 1.000019.

· mro обновлен с версии 1.11 до 1.16.

· Net :: Ping обновлен с версии 2.41 до 2.43.

· Opcode обновлен с версии 1.25 до 1.27.

· Пакет::Константы обновлен с версии 0.02 до 0.04. ПРИМЕЧАНИЕ:
Package::Constants устарел и может быть удален из будущей версии Perl.

· Params :: Check обновлен с версии 0.36 до 0.38.

· Родитель обновлен с версии 0.225 до 0.228.

· Parse :: CPAN :: Meta обновлен с версии 1.4404 до 1.4414.

· Perl::OSType обновлен с версии 1.003 до 1.007.

· perlfaq обновлен с версии 5.0150042 до 5.0150044.

· PerlIO обновлен с версии 1.07 до 1.09.

· PerlIO :: encoding была обновлена ​​с версии 0.16 до 0.18.

· PerlIO :: scalar был обновлен с версии 0.16 до 0.18.

· PerlIO :: via был обновлен с версии 0.12 до 0.14.

· Pod::Escapes обновлен с версии 1.04 до 1.06.

· Pod :: Functions обновлен с версии 1.06 до 1.08.

· Pod :: Html обновлен с версии 1.18 до 1.21.

· Pod::Parser обновлен с версии 1.60 до 1.62.

· Pod::Perldoc обновлен с версии 3.19 до 3.23.

· Pod::Usage обновлен с версии 1.61 до 1.63.

· POSIX был обновлен с версии 1.32 до 1.38_03.

· re обновлено с версии 0.23 до 0.26.

· Сейф обновлен с версии 2.35 до 2.37.

· Scalar::Util обновлен с версии 1.27 до 1.38.

· SDBM_File обновлен с версии 1.09 до 1.11.

· Socket обновлен с версии 2.009 до 2.013.

· Storable обновлен с версии 2.41 до 2.49.

· строгий обновлен с версии 1.07 до 1.08.

· сабы обновлены с версии 1.01 до 1.02.

· Sys :: Hostname был обновлен с версии 1.17 до 1.18.

· Sys :: Syslog обновлен с версии 0.32 до 0.33.

· Term::Cap обновлен с версии 1.13 до 1.15.

· Term :: ReadLine обновлен с версии 1.12 до 1.14.

· Test :: Harness обновлен с версии 3.26 до 3.30.

· Test :: Simple обновлен с версии 0.98 до 1.001002.

· Text::ParseWords обновлен с версии 3.28 до 3.29.

· Text::Tabs обновлен с версии 2012.0818 до 2013.0523.

· Text::Wrap обновлен с версии 2012.0818 до 2013.0523.

· Тема обновлена ​​с версии 3.02 до 3.04.

· Thread :: Queue был обновлен с версии 3.02 до 3.05.

· потоки обновлены с версии 1.86 до 1.93.

· Thread :: shared был обновлен с версии 1.43 до 1.46.

· Tie::Array обновлен с версии 1.05 до 1.06.

· Tie::File обновлен с версии 0.99 до 1.00.

· Tie :: Hash обновлен с версии 1.04 до 1.05.

· Tie::Scalar обновлен с версии 1.02 до 1.03.

· Tie::StdHandle обновлен с версии 4.3 до 4.4.

· Time::HiRes обновлен с версии 1.9725 до 1.9726.

· Time::Piece обновлен с версии 1.20_01 до 1.27.

· Unicode :: Collate был обновлен с версии 0.97 до 1.04.

· Unicode :: Normalize был обновлен с версии 1.16 до 1.17.

· Unicode :: UCD был обновлен с версии 0.51 до 0.57.

· utf8 обновлен с версии 1.10 до 1.13.

· Версия обновлена ​​с версии 0.9902 до 0.9908.

· vmsish обновлен с версии 1.03 до 1.04.

· Warnings обновлен с версии 1.18 до 1.23.

· Win32 обновлен с версии 0.47 до 0.49.

· XS :: Typemap был обновлен с версии 0.10 до 0.13.

· XSLoader обновлен с версии 0.16 до 0.17.

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


Создать Документация
Perlрепозиторий

Этот документ был удален (фактически переименован в perlgit и подвергнут серьезной переработке) в Perl.
v5.14, из-за чего на веб-сайтах документации Perl отображается устаревшая версия Perl.
v5.12 как последняя версия. Сейчас он восстановлен в виде заглушки, направляя читателей к
Текущая информация.

изменения в Существующий Документация
Perldata

· Добавлены новые разделы для документирования нового фрагмента массива индексов/значений и ключей/значений.
синтаксис фрагмента хеша.

Perldebguts

· Функции отладчика «DB::goto» и «DB::lsub» теперь документированы. [перл #77680]

недоумение

· «\s», соответствующий «\cK», помечен как экспериментальный.

· ithreads были приняты в версии 5.8.0 (но не рекомендуются, начиная с версии 5.20.0).

· Длинные дубли не считаются экспериментальными.

· Код в регулярных выражениях, команды возврата регулярных выражений и lvalue.
подпрограммы больше не указаны как экспериментальные. (Это также влияет на Perlre и
перлсуб.)

Perlfunc

· «chop» и «chomp» теперь отмечают, что они могут сбросить хэш-итератор.

· Обработка аргументов "exec" теперь более четко документирована.

· В «eval EXPR» теперь есть предостережения относительно расширения чисел с плавающей запятой в некоторых регионах.

· «goto EXPR» теперь документирован для обработки выражения, которое преобразуется в код
ссылка, как если бы это была «goto &$coderef». Этому поведению не менее десяти лет.

· Начиная с Perl версии 5.10, подпрограммы в @INC могут возвращать ссылку.
к скаляру, содержащему исходный исходный код для добавления в начало файла. Это - сейчас
документированы.

· Документация по «ref» обновлена ​​и теперь рекомендует использовать «blessed», «isa».
и «reftype» при работе со ссылками на благословенные объекты.

перлгутс

· Многочисленные незначительные изменения были внесены, чтобы отразить изменения, внесенные во внутренние компоненты Perl в
этот выпуск.

· Добавлены новые разделы «Значения только для чтения» и «Копирование при записи».

Perlhack

· Обновлен раздел «Суперкраткое руководство по исправлению».

perlhacktips

· Документация была обновлена ​​и теперь включает еще несколько примеров использования «gdb».

Perllexwarn

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

Perllocale

· В документации теперь упоминается ФК() и «\F», и включает множество пояснений и
исправления в целом.

перлоп

· Языковая конструкция Perl всегда требовала мономорфных операторов. Это - сейчас
упомянуто явно.

перлопентут

· «Открытое» руководство было полностью переписано Томом Кристиансеном и теперь фокусируется на
охватывая только основы, а не предоставляя исчерпывающую ссылку на все
вещи открывающиеся. Эта переработка стала результатом бурной дискуссии по поводу
Perl5-porters стартовал с набора улучшений, написанных Александром Хартмайером для
существующий перлопентут. «Больше, чем вы когда-либо хотели знать об «открытом» документе»
может следовать в последующих версиях Perl.

Perlre

· Тот факт, что механизм регулярных выражений не предпринимает никаких усилий для вызова конструкций (?{}) и (??{}).
любое указанное количество раз (хотя в случае успешного завершения в основном это будет DWIM).
совпадение) было задокументировано.

· Модификатор «/r» (для неразрушающей замены) теперь документирован. [перл #119151]

· Документация для "/x" и "(?# comment)" была расширена и уточнена.

перлрегутс

· Документация обновлена ​​с учетом недавних изменений в regcomp.c.

перлсуб

· Необходимость предварительного объявления рекурсивных функций с прототипами для того, чтобы прототип
возможность выполнения рекурсивного вызова теперь задокументирована. [перл #2726]

· Теперь включен список имен подпрограмм, используемых реализацией Perl. [перл
# 77680]

перлтрап

· Появился раздел JavaScript.

перлуникод

· Документация обновлена ​​с учетом изменений «Bidi_Class» в Unicode 6.3.

Perlvar

· Новый раздел, объясняющий проблемы производительности $`, $& и $', включая
добавлены обходные пути и изменения в разных версиях Perl.

· Три английских названия переменных, которые давно задокументированы, но на самом деле не существуют.
были удалены из документации. Это были $OLD_PERL_VERSION, $OFMT и
$ARRAY_BASE.

(Вообще-то "OLD_PERL_VERSION" приносит существуют, начиная с этой ревизии, но остались
недокументировано до Perl 5.22.0.)

Perlxs

· Исправлено несколько проблем в примере «MY_CXT».

Диагностика


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

Создать Диагностика
Создать ошибки

· Аргумент удаления — это срез массива индексов/значений, используйте срез массива

(F) Вы использовали синтаксис среза массива индексов / значений (% array [...]) в качестве аргумента для «удаления».
Вы, вероятно, имели в виду @array [...] вместо символа @.

· Аргумент удаления — это срез хэша ключ/значение, используйте срез хэша

(F) Вы использовали синтаксис хэш-фрагмента "ключ-значение" (% hash {...}) в качестве аргумента для "удаления".
Вы, вероятно, имели в виду @hash {...} вместо символа @.

· Константы магического списка не поддерживаются.

(F) Вы назначили магический массив элементу тайника, а затем попытались использовать
подпрограмма из того же слота. Вы просите Perl сделать что-то, чего он не может,
детали могут быть изменены между версиями Perl.

· Добавлена ​​настройка $/ для ссылки %s запрещена.

Создать Предупреждения

· %s по ссылке является экспериментальным:

Функция «автоматического разыменования» является экспериментальной.

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

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

нет, если $] >= 5.01908, предупреждения => "experimental::autoderef";

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

· Последовательность нескольких пробелов в определении псевдонима имен символов устарела.

Конечные пробелы в определении псевдонима имен символов устарели.

Эти два предупреждения об устаревании, связанные с «\N{...}», были реализованы неправильно. Они
не предупреждал по умолчанию (теперь предупреждает) и его нельзя было сделать фатальным с помощью «использовать предупреждения».
FATAL => 'устарело'» (теперь это возможно).

· Прототип атрибута (%s) отбрасывает более ранний атрибут прототипа в том же подпрограмме.

(W разное) Подпрограмма была объявлена ​​как «sub foo :prototype(A) :prototype(B){}», для
пример. Поскольку каждая подпрограмма может иметь только один прототип, более ранние объявления являются
отбрасывается, пока применяется последний.

· Недопустимый символ \0 в %s для %s: %s\0%s

(W syscalls) Встроенные символы \ 0 в имена путей или другие аргументы системного вызова
вывести предупреждение по состоянию на 5.20. Части после \ 0 ранее игнорировались системой
звонки.

· Соответствует кодовой точке 0x%X, отличной от Unicode, свойству Unicode; может быть непереносным.

Это заменяет сообщение «Кодовая точка 0x%X не является Unicode, все совпадения \p{} не выполняются; все
\P{} совпадения успешны".

· Отсутствует ']' в прототипе для %s: %s

(W незаконный протокол) Группировка была начата с "[", но никогда не завершалась с "]".

· Возможная проблема с приоритетом оператора потока управления.

(W-синтаксис) Возможная проблема со смешиванием оператора потока управления
(например, «возврат») и оператор с низким приоритетом, например «или». Учитывать:

sub {return $ a или $ b; }

Это разбирается как:

sub {(возврат $ a) или $ b; }

По сути, это просто:

sub {return $ a; }

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

Обратите внимание, что это также может сработать для таких конструкций, как:

sub {1 if die; }

· Разыменование Postfix является экспериментальным.

(S экспериментальный :: postderef) Это предупреждение выдается, если вы используете экспериментальный
синтаксис постфиксного разыменования. Просто подавите предупреждение, если вы хотите использовать
функции, но знайте, что при этом вы рискуете использовать экспериментальный
функция, которая может быть изменена или удалена в будущей версии Perl:

без предупреждений "экспериментальный :: postderef";
использовать функцию postderef, postderef_qq;
$ ref -> $ *;
$ aref -> @ *;
$ aref -> @ [@ индексы];
... так далее ...

· Прототип «%s» переопределен атрибутом «прототип(%s)» в %s.

(W prototype) Прототип был объявлен в скобках после суб-имени и
через атрибут прототипа. Прототип в скобках бесполезен, так как он будет
быть заменен прототипом из атрибута, прежде чем он когда-либо использовался.

· Скалярное значение @%s[%s] лучше записать как $%s[%s]

(Синтаксис W) В скалярном контексте вы использовали срез индекса / значения массива (обозначен%)
для выбора одного элемента массива. Вообще лучше попросить скаляр
значение (обозначено $). Разница в том, что $ foo [& bar] всегда ведет себя как
скаляр, как в возвращаемом значении, так и при оценке его аргумента, а
% foo [& bar] предоставляет контекст списка для своего нижнего индекса, который может делать странные вещи, если
вы ожидаете только один нижний индекс. При вызове в контексте списка он также возвращает
index (что возвращает & bar) в дополнение к значению.

· Скалярное значение @%s{%s} лучше записывать как $%s{%s}

(Синтаксис W) В скалярном контексте вы использовали хэш-срез ключ / значение (обозначенный%) для
выберите один элемент хеша. Обычно лучше запрашивать скалярное значение
(обозначено символом $). Разница в том, что $ foo {& bar} всегда ведет себя как скаляр,
как в возвращаемом значении, так и при оценке его аргумента, а @foo {& bar} и
предоставляет контекст списка для своего нижнего индекса, который может делать странные вещи, если вы
ожидая только одного нижнего индекса. При вызове в контексте списка он также возвращает ключ в
дополнение к стоимости.

· Установка $/ для ссылки на %s как форму slurp устарела и рассматривается как undef.

· Неожиданный выход %u

(S) Выход() был вызван или скрипт корректно завершился, когда
«PERL_EXIT_WARN» был установлен в «PL_exit_flags».

· Неожиданная ошибка выхода %d

(S) непойманный умереть () был вызван, когда "PERL_EXIT_WARN" был установлен в "PL_exit_flags".

· Использование буквальных управляющих символов в именах переменных устарело.

(D устарел) Использование буквальных управляющих символов в исходном коде для ссылки на ^FOO.
переменные, такие как $^X и ${^GLOBAL_PHASE}, теперь устарели. Это влияет только на код
например $\cT, где \cT — это элемент управления (например, «SOH») в исходном коде: ${"\cT"} и $^T
оставаться в силе.

· Бесполезное использование модификатора жадности

Это исправляет [Perl #42957].

изменения в Существующий Диагностика
· Предупреждения и ошибки механизма регулярных выражений теперь соответствуют UTF-8.

· Сообщение об ошибке «Неизвестное состояние переключения» претерпело некоторые незначительные изменения. Эта ошибка
срабатывает, когда в условном выражении "(?(foo))" присутствует неизвестное условие. Ошибка
сообщение, используемое для чтения:

Неизвестное условие переключения (?(%s в регулярном выражении;

Но каким мог быть %s, в основном зависело от удачи. Вместо "(?(foobar))" вы могли видеть
«фо» или «ф». Для символов Юникода вы обычно получаете поврежденную строку.
сообщение было изменено на следующее:

Неизвестное условие переключения (?(...)) в регулярном выражении;

Кроме того, маркер «<-- ЗДЕСЬ» в ошибке теперь будет указывать на правильное место в
регулярное выражение.

· Предупреждение «%s «\x%X» не соответствует Unicode» теперь корректно отображается как серьезная ошибка.
предупреждение, а не как фатальная ошибка.

· В редких случаях можно получить сообщение «Невозможно принудить REF только для чтения к строке».
вместо обычного «Модификация значения, доступного только для чтения». Эта альтернативная ошибка
сообщение удалено.

· «Неоднозначное использование * разрешено как оператор *»: это и подобные предупреждения о «%» и
«&» раньше возникал в некоторых случаях, когда не было оператора указанного типа,
так что предупреждение было совершенно неверным. Это исправлено [perl #117535, #76910].

· Предупреждения о некорректных прототипах подпрограмм теперь более согласованы в том, как
прототипы рендерятся. Некоторые из этих предупреждений будут обрезать прототипы, содержащие
нули. В других случаях одно предупреждение подавляло другое. Предупреждение о незаконном
символы в прототипах больше не говорят «после '_», если плохой символ был раньше.
подчеркивание.

· Правила свертки Perl не актуальны для 0x%X; пожалуйста, используйте утилиту perlbug для
отчет; в регулярном выражении; отмечено <-- ЗДЕСЬ в м/%s/

Это сообщение теперь находится только в категории регулярных выражений, а не в устаревшей категории.
Это по-прежнему предупреждение по умолчанию (то есть серьезное) [perl #89648].

· %%s[%s] в скалярном контексте лучше записывать как $%s[%s]

Это предупреждение теперь появляется для любого %array[$index] или %hash{key}, который, как известно, находится в скалярном формате.
контекст во время компиляции. Ранее это было сформулировано: «Скалярное значение %%s[%s] лучше».
записывается как $%s[%s]».

· Условие переключения не распознается в регулярном выражении; отмечено <-- ЗДЕСЬ в м/%s/:

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

· В сообщениях об ошибках для «my($a?$b$c)» и «my(do{})» теперь упоминается «условное
выражение» и «do Block» соответственно вместо «Невозможно объявить значение null».
операция в «моем».

· Когда «use re «debug»» выполняет регулярное выражение, содержащее обратную ссылку, отладочная
вывод теперь показывает, какая строка сопоставляется.

· Изменено ставшее фатальным сообщение об ошибке «Символ, следующий за «\c», должен быть ASCII».
поскольку «Символ, следующий за «\c», должен быть печатным ASCII», чтобы подчеркнуть, что в «\cX", X
должен быть версия для печати (неконтролируемый) ASCII-символ.

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


A2P

· Возможный сбой из-за ошибки отключения на единицу при попытке доступа до начала
буфера исправлено. [перл #120244]

bisect.pl

Инструмент git bisection Перенос / bisect.pl имело множество улучшений.

Он предоставляется как часть дистрибутива исходного кода, но не устанавливается, поскольку не
автономен, поскольку он запускается из git checkout. Обратите внимание также, что это
не пытается исправить тесты, исправить ошибки во время выполнения или сделать что-то полезное для установки -
его цель — внести минимальные изменения, чтобы получить любой исторический пересмотр, представляющий интерес для построения
и запускайте как можно ближе к «как было», тем самым упрощая использование «git bisect».

· При желании можно запустить тестовый пример с тайм-аутом.

· Теперь можно запускать на месте в чистой проверке git.

· Можно запустить тестовый пример под «valgrind».

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

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

найти2perl

· find2perl теперь обрабатывает "?" подстановочные знаки правильно. [перл #113054]

Perlbug

· Perlbug теперь есть опция «-p» для прикрепления патчей к отчету об ошибке.

· Perlbug был изменен, чтобы предоставить шаблон отчета с окончаниями строк CRLF на
Окна. [перл #121277 ]

· perlbug теперь делает как можно меньше предположений о кодировке отчета.
Вероятно, в будущем это изменится: по умолчанию будет использоваться UTF-8, но пользователь сможет
переопределить.

Конфигурация и Сборник


· The Makefile.PL для SDBM_File теперь генерирует лучший Makefile, что позволяет избежать гонки
условие во время параллельных сборок, что может привести к сбою сборки. Это
последняя известная проблема параллельного создания (на платформах *nix), поэтому мы считаем, что
Теперь параллельный make всегда должен быть безошибочным.

· установитьperl и установщикОбработка опций была переработана для использования Getopt::Long.
Оба используются Makefile "устанавливают" цели и не устанавливаются, поэтому эти
изменения, скорее всего, повлияют только на пользовательские сценарии установки.

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

· Неверные параметры теперь отклоняются.

· Аргументы командной строки, не являющиеся параметрами, теперь отклоняются.

· У каждого теперь есть опция «--help» для отображения сообщения об использовании.

Поведение всех допустимых документированных вызовов не меняется.

· Там, где это возможно, сборка теперь избегает рекурсивных вызовов сделать при построении чисто-
Расширения Perl, не удаляя из сборки никакого параллелизма. На данный момент около 80
расширения могут обрабатываться непосредственно make_ext.pl инструмент, а это означает, что 80
призывы сделать и 160 вызовов Miniperl больше не производятся.

· Система сборки теперь работает правильно при компиляции под GCC или Clang с использованием времени компоновки.
оптимизация включена (опция «-flto»). [перл #113022]

· Отличительные базовые имена библиотек с помощью «d_libname_unique».

При компиляции Perl с этой опцией файлы библиотеки для модулей XS называются
что-то «уникальное» — например, Hash/Util/Util.so становится
Hash/Util/PL_Hash__Util.so. Такое поведение похоже на то, что сейчас происходит на
VMS и служит основой для порта Android.

· Опция «sysroot» для указания логического корневого каталога в gcc и clang.

При сборке с этим набором опций и конфигурация, и компиляторы ищут все
заголовки и библиотеки под этим новым системным корнем вместо /.

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

· Обновлена ​​модель кросс-компиляции. Появилось несколько новых опций, и некоторые
обратно несовместимые изменения:

Теперь мы создаем двоичные файлы для miniperl иgenerate_uudmap, которые будут использоваться на хосте, а не
чем запускать каждый вызов miniperl на цели; это означает, что, если не считать «сделать тест»,
нам больше не нужен доступ к целевой системе после завершения настройки. Вы можете предоставить
уже созданные двоичные файлы с помощью опций «hostperl» и «hostgenerate» для настройки.

Кроме того, если вы ориентируетесь на платформу EBCDIC с хоста ASCII или наоборот, вы
необходимо запустить конфигурацию с "-Uhostgenerate", чтобы указать, чтоgenerate_uudmap должен
бежать по цели.

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

Несовместимые изменения включают отказ от использования xconfig.h, xlib или Cross.pm, поэтому
стандартные файлы конфигурации и файлы Makefile необходимо обновить.

· В связи с вышесказанным теперь есть способ указать местоположение sh (или
эквивалент) в целевой системе: «targetsh».

Например, в Android файл sh находится в /system/bin/sh, поэтому при кросс-компиляции из более
обычная система Unixy с sh в / Бен / ш, "targetsh" в конечном итоге будет выглядеть как /system/bin/sh, а
«ш» как /bin/sh.

· По умолчанию, GCC В версии 4.9 есть некоторые оптимизации, которые ломают Perl. -fwrapv вариант
отключает эти оптимизации (и, возможно, другие), поэтому для GCC 4.3 и более поздние версии (поскольку
аналогичные проблемы могут возникнуть и в старых версиях, но -fwrapv законопроект
сломан до 4.3, и оптимизации видимо никуда не денутся), Настроить теперь добавляет
-fwrapv если пользователь не попросит -fno-wrapv, который отключает -fwrapvэта информация поможет вам разобраться, почему Gamer’s Galaxy — ваш лучший выбор.
-fsanitize = undefined, что превращает переполнения -fwrapv игнорирует ошибки времени выполнения.
[перл #121505 ]

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


· Цель make "test.valgrind" теперь позволяет запускать тесты параллельно. Эта цель
позволяет запускать набор тестов Perl под управлением Valgrind, который обнаруживает определенные виды C
ошибки программирования, хотя и со значительными затратами времени работы. На подходящем оборудовании
разрешение параллельного выполнения компенсирует большую часть этих дополнительных затрат. [перл #121431]

· Различные тесты в т / портирование / больше не пропускаются, когда Perl .git каталог
вне дерева Perl и на него указывает $GIT_DIR. [перл #120505]

· Набор тестов больше не завершается сбоем, если интерактивная оболочка пользователя поддерживает $PWD.
переменная среды, но / Бен / ш используемый для запуска тестов, нет.

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


Создать Платформы
Android
Perl теперь можно собрать для Android либо в исходном виде, либо посредством кросс-компиляции.
все три доступные в настоящее время архитектуры (ARM, MIPS и x86) в широком диапазоне
версий.

Битриг
Добавлена ​​поддержка компиляции для Bitrig, ответвления OpenBSD.

FreeMiNT
Добавлена ​​поддержка FreeMiNT, бесплатной ОС с открытым исходным кодом для системы Atari ST и
его преемники, основанные на оригинальном MiNT, официально принятом Atari.

Synology
Synology поставляет свои NAS-устройства с экономичным дистрибутивом Linux (DSM) по относительно низкой цене.
Процессоры (например, Marvell Kirkwood mv6282 — ARMv5tel или Freescale QorIQ P1022 ppc —
e500v2) не предназначен для рабочих станций или разработки. Эти коробки должны построиться сейчас.
Основные проблемы – нестандартное расположение инструментов.

Снято Платформы
"сфио"
Код, связанный с поддержкой системы ввода-вывода «sfio», был удален.

В Perl 5.004 добавлена ​​поддержка использования собственного API «sfio», безопасного/быстрого ввода-вывода AT&T.
библиотека. Этот код по-прежнему создан с использованием версии 5.8.0, хотя многие регрессионные тесты оказались неудачными.
но был случайно сломан перед выпуском версии 5.8.1, а это означает, что он не работал
в любой версии Perl, выпущенной с тех пор. За более чем десять лет мы не получили ни одной ошибки
сообщает об этом, отсюда видно, что никто не использует этот функционал ни на каких
версия Perl, которая все еще поддерживается в той или иной степени.

AT&T 3b1
Настройте поддержку 3b1, также известного как AT&T Unix PC (и аналогичных компьютеров AT&T).
7300), был удален.

DG / UX
DG/UX — это Unix, продаваемая компанией Data General. Последний выпуск состоялся в апреле 2001 года.
работает на собственном оборудовании Data General.

EBCDIC
В отсутствие регулярного источника отчетов о дыме код, предназначенный для поддержки нативного кода.
Платформы EBCDIC будут удалены из Perl до версии 5.22.0.

Платформа-Specific Заметки
Cygwin
· recv () на подключенном дескрипторе заполнит возвращенный адрес отправителя
что бы ни оказалось в рабочем буфере. recv () теперь использует обходной путь
похоже на Win32 recv () обертку и возвращает пустую строку, когда Получение из(2)
не изменяет предоставленную длину адреса. [перл #118843]

· Исправлена ​​ошибка сборки cygwin.c в Cygwin 1.7.28.

Тесты теперь обрабатывают ошибки, возникающие, когда «cygserver» не запущен.

GNU / Hurd
Библиотека совместимости BSD «libbsd» больше не требуется для сборок.

Linux
Файл подсказок теперь ищет «libgdbm_compat», только если также требуется сам «libgdbm».
Первое никогда не бывает полезным без второго, а в некоторых обстоятельствах, включая его,
фактически может помешать строительству.

Mac OS
Система сборки теперь учитывает настройку «ld», заданную пользователем, запускающим Настроить.

ПолночьBSD
«objformat» был удален из версии 0.4-RELEASE MidnightBSD и был
устарело в более ранних версиях. Это привело к тому, что среда сборки была ошибочно настроена.
настроен на «a.out», а не на «elf». Теперь это исправлено.

Платформы со смешанным порядком байтов
Код, поддерживающий операции «упаковки» и «распаковки» на платформах со смешанным порядком байтов, был
удаленный. Мы считаем, что Perl уже давно не может использовать смешанный порядок байтов.
архитектуры (таких как PDP-11), поэтому мы не думаем, что это изменение повлияет на какие-либо
платформы, которые смогли собрать v5.18.0.

ЗИС
· Функция «PERL_ENV_TABLES» для управления заполнением %ENV при запуске Perl.
была сломана в Perl 5.16.0, но сейчас исправлена.

· Пропустить проверки доступа на пультах дистанционного управления в opendir (). [перл #121002]

· Проверка метасимволов glob в пути, возвращаемом оператором glob(), имеет
заменено проверкой подстановочных знаков VMS. Это экономит значительную
количество ненужных вызовов «lstat()», из-за которых некоторые простые операции с глобальными операциями становятся
На 60-80% быстрее.

Win32
· «переименовать» и «связать» в Win32 теперь устанавливают $! в ENOSPC и EDQUOT, когда это необходимо.
[perl # 119857]

· Параметры make-файла BUILD_STATIC и ALL_STATIC для связывания некоторых или (почти) всех
расширения статически (в perl520.dll, а также в отдельный perl-static.exe)
были сломаны для сборок MinGW. Теперь это исправлено.

Параметр ALL_STATIC также был улучшен и теперь включает Encode и Win32.
расширения (как для сборок VC++, так и для MinGW).

· Добавлена ​​поддержка сборки с помощью Visual C++ 2013. на данный момент существует два
возможные неудачные тесты (см. «Тестирование Perl в Windows» в perlwin32), которые
надеюсь, скоро разрешится.

· Добавлена ​​экспериментальная поддержка сборки с помощью компилятора Intel C++.
make-файл nmake (win32/Makefile) и make-файл dmake (win32/makefile.mk) могут быть
использовал. «Тест nmake» в настоящее время не пройдет из-за cpan/CGI/t/url.t.

· Уничтожение дерева процессов с помощью команды «kill» в perlfunc и отрицательного сигнала было нарушено.
начиная с версии 5.18.0. В этой ошибке команда kill всегда возвращала 0 в случае отрицательного сигнала.
даже для действительных PID, и ни один процесс не был завершен. Это исправлено [perl
№ 121230].

· Время, необходимое для сборки Perl в Windows, значительно сократилось (время
обычно наблюдается экономия в районе 30-40%) за счет сокращения количества,
обычно терпит неудачу, вызовы ввода-вывода для каждого "require()" (для миниперл.exe только). [перл
#121119 ]

· Около 15 минут бездействия были удалены из запуска «сделать тест» из-за
ошибка, из-за которой монитор тайм-аута, используемый для тестов, не мог быть отменен после
тест завершен, и перед запуском следующего теста истек полный период ожидания
файл. [перл #121395 ]

· На Perl, созданном без псевдо-вилки (на сборки псевдо-вилки это не повлияло).
ошибка), уничтожение дерева процессов с помощью «kill()» и отрицательный сигнал привели к
«kill()» инвертирует возвращаемое значение. Например, если «kill()» убил 1 процесс
PID дерева тогда возвращал 0 вместо 1, а если "kill()" было передано 2, недействительно
PID, то он возвращал 2 вместо 0. Вероятно, так было с тех пор, как
Функция уничтожения дерева процессов была реализована в Win32. Сейчас это исправлено на
следуйте документированному поведению. [перл #121230
]

· При сборке 64-битного Perl считывается неинициализированная память. миниперл.exe, используемый
в процессе сборки может привести к получению 4 ГБ wperl.exe создается. Это имеет
теперь исправлено. (Обратите внимание, что perl.exe сам по себе не пострадал, но очевидно
wperl.exe был бы полностью сломан.) [perl #121471
]

· Perl теперь можно собирать с помощью GCC версия 4.8.1 отhttp://www.mingw.org>. Этот
ранее был нарушен из-за неправильного определения Дллмейн() в одном из Perl
исходные файлы. Ранее GCC версии также были затронуты при использовании версии 4
пакет w32api. Версии GCC можно получить
<http://mingw-w64.sourceforge.net/> не пострадали. [перл #121643
]

· Тестовая программа теперь не вызывает сбоев, когда Perl собран на диске FAT с
ОС Windows на диске NTFS. [перл #21442
]

· При клонировании стека контекста в вилка () эмуляция Perl_cx_dup() разобьется
доступ к информации о параметрах для записей контекстного стека, которые не включали
параметры, как в случае с "&foo;". [перл #121721
]

· Введено perl # 113536
, утечка памяти на каждом
вызов "system" и обратные кавычки ("` `") в большинстве Win32 Perl, начиная с 5.18.0
было исправлено. Утечка памяти произошла только в том случае, если вы включили псевдо-форк в своем
сборка Win32 Perl и работала с этой сборкой на Server 2003 R2 или более новой ОС.
Утечка не появляется на WinXP SP3. [perl # 121676
]

WinCE
· Корпус XS-модулей в значительной степени восстановлен. Некоторые до сих пор не могут (пока)
можно собрать, но теперь можно собрать Perl на WinCE всего лишь с помощью пары
дальнейшие исправления (для Socket и ExtUtils::MakeMaker), которые, надеюсь, будут включены
в ближайшее время.

· Perl теперь можно собрать за один раз, без вмешательства пользователя в WinCE, запустив
«nmake -f Makefile.ce all».

Поддержка сборки с помощью EVC (Embedded Visual C++) 4 была восстановлена. Perl может
также можно создавать с использованием Smart Devices для Visual C++ 2005 или 2008.

внутренний изменения


· Изменилось внутреннее представление переменных соответствия $1, $2 и т. д., $`, $&,
$', ${^PREMATCH}, ${^MATCH} и ${^POSTMATCH}. Он использует немного меньше памяти, избегает
сравнения строк и числовых преобразований во время поиска, а также использует на 23 строки меньше.
C. Это изменение не должно влиять на какой-либо внешний код.

· Массивы теперь внутри себя используют NULL для обозначения неиспользуемых слотов вместо &PL_sv_undef.
&PL_sv_undef больше не рассматривается как специальное значение, поэтому av_store(av, 0, &PL_sv_undef)
приведет к тому, что элемент 0 этого массива будет содержать неопределенный скаляр, доступный только для чтения. "$массив[0] =
Anything» будет каркать, а «\$array[0]» будет сравниваться с «\undef».

· СВ вернулся HeSVKEY_force() теперь правильно отражает UTF8-версию
базовый хеш-ключ, если этот ключ не хранится как SV. [перл #79074]

· Некоторые редко используемые функции и макросы, доступные для кода XS, теперь устарели.
Это: «utf8_to_uvuni_buf» (вместо этого используйте «utf8_to_uvchr_buf»),
"valid_utf8_to_uvuni" (вместо этого используйте "utf8_to_uvchr_buf"), "NATIVE_TO_NEED" (это сделало
в любом случае не работает должным образом) и «ASCII_TO_NEED» (в любом случае это не работает должным образом).

Начиная с этого выпуска, коду приложения практически никогда не требуется различать
между набором символов платформы и Latin1, в котором младшие 256 символов
В основе лежит Юникод. В новом коде не следует использовать «utf8n_to_uvuni» (используйте «utf8_to_uvchr_buf»
вместо этого), ни «uvuni_to_utf8» (вместо этого используйте «uvchr_to_utf8»),

· Ярлык Makefile предназначен для многих редко (или никогда) используемых тестов и профилирования.
цели были удалены или объединены с единственной целью Makefile, которая использует
их. В частности, эти цели исчезли вместе с документацией, на которую ссылались.
их или объяснили, как их использовать:

check. Third check.utf16 check.utf8 coretest minitest.prep
minitest.utf16 perl.config.dashg perl.config.dashpg
perl.config.gcov perl.gcov perl.gprof perl.gprof.config
perl.pixie perl.pixie.atom perl.pixie.config perl.pixie.irix
perl. Third perl. Third.config perl.valgrind.config purecovperl
pureperl quantperl test.deparse test.taintwarn test. Third
test.torture test.utf16 test.utf8 test_notty.deparse
test_notty. Third test_notty.valgrind test_prep. Third
test_prep.valgrind пыткаtest ucheck ucheck. Third ucheck.utf16
ucheck.valgrind utest utest. Third utest.utf16 utest.valgrind

По-прежнему возможно запускать соответствующие команды «вручную» — без каких-либо дополнительных действий.
функционал удален.

· Теперь можно запретить Perl инициализировать обработку локали. По большей части,
Perl не обращает внимания на локаль. (См. perllocale.) Тем не менее, до сих пор на
при запуске он всегда инициализирует обработку локали по умолчанию, на всякий случай
выполняемая программа в конечном итоге использует локали. (Это одна из первых вещей, которые
программа с учетом локали должна подойти задолго до того, как Perl узнает, понадобится ли она на самом деле.
или нет.) Это работает хорошо, за исключением случаев, когда Perl встроен в другое приложение, которое
хочет использовать локаль, отличную от системной по умолчанию. Теперь, если переменная среды
«PERL_SKIP_LOCALE_INIT» устанавливается во время запуска Perl, на этом этапе инициализации
пропускается. До этого на платформах Windows единственный обходной путь для этого
Недостатком было использование взломанной копии внутреннего кода Perl. Приложения, которые нуждаются
использовать старые версии Perl, можно узнать, нуждается ли встроенный Perl, который они используют, в
обходной путь, проверив, что символ препроцессора C «HAS_SKIP_LOCALE_INIT» не является
определенный. [RT № 38193]

· «BmRARE» и «BmPREVIOUS» были удалены. Они нигде не использовались и не
часть API. Для модулей XS они теперь #определены как 0.

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

· Новый механизм копирования при записи Perl (который теперь включен по умолчанию) позволяет
Скаляр «SvPOK» автоматически обновляется до скаляра копирования при записи при копировании. А
счетчик ссылок на строковый буфер хранится в самом строковом буфере.

Например:

$ perl -MDevel::Peek -e'$a="abc"; $б = $а; Дамп $a; Дамп $b'
СВ = PV(0x260cd80) at 0x2620ad8
РЕФЦНТ = 1
ФЛАГИ = (POK,IsCOW,pPOK)
ПВ = 0x2619bc0 "abc"\0
КУР = 3
ДЛИН = 16
COW_REFCNT = 1
СВ = PV(0x260ce30) at 0x2620b20
РЕФЦНТ = 1
ФЛАГИ = (POK,IsCOW,pPOK)
ПВ = 0x2619bc0 "abc"\0
КУР = 3
ДЛИН = 16
COW_REFCNT = 1

Обратите внимание, что оба скаляра используют один и тот же буфер PV и имеют COW_REFCNT больше, чем
нулю.

Это означает, что код XS, желающий изменить буфер «SvPVX()» SV, должен
сначала вызовите «SvPV_force()» или аналогичный, чтобы обеспечить действительный (и необщий) буфер и
после этого вызовите «SvSETMAGIC()». На самом деле так было всегда (например,
хеш-ключи уже копировались при записи); это изменение просто распространяет поведение КОРОВЫ на
более широкий выбор СВ.

Одним из важных отличий является то, что до версии 5.18.0 скаляры общего хэш-ключа имели
установлен флаг «SvREADONLY»; это уже не так.

Это новое поведение все еще можно отключить, запустив Настроить
-Accflags=-DPERL_NO_COW. Эта опция, вероятно, будет удалена в Perl 5.22.

· «PL_sawampersand» теперь является константой. Переключатель, предоставленный этой переменной (для
включить/отключить предматчевую копию в зависимости от того, был ли замечен $&)
удален и заменен на копирование при записи, что устранило несколько ошибок.

Предыдущее поведение все еще можно включить, запустив Настроить
-Accflags=-DPERL_SAWAMPERSAND.

· Функции «my_swap», «my_htonl» и «my_ntohl» были удалены. Это неясно
почему эти функции когда-либо были помечены как A, часть API. Код XS не может их вызвать
напрямую, поскольку он не может полагаться на их компиляцию. Неудивительно, что на CPAN нет кода.
ссылается на них.

· Изменена сигнатура регулярного выражения «Perl_re_intuit_start()»; функция
указатель «intuit» в структуре плагина механизма регулярных выражений также изменился соответствующим образом. А
добавлен новый параметр «strbeg»; это имеет то же значение, что и одноименный
параметр в «Perl_regexec_flags». Раньше интуиция пыталась угадать начало
строку из переданного SV (если таковая имеется) и иногда получала ее неправильно (например, с
перегруженный СВ).

· Изменена сигнатура функции регулярного выражения "Perl_regexec_flags()"; функция
Указатель «exec» в структуре плагина механизма регулярных выражений также изменился, чтобы соответствовать.
Параметр «minend» теперь имеет тип «SSize_t» для лучшей поддержки 64-битных систем.

· Код XS может использовать различные макросы для изменения регистра символов или кодовых точек (для
пример «toLOWER_utf8()»). Лишь пара из них была задокументирована до сих пор; и сейчас
их следует использовать вместо вызова базовых функций. См. «Персонаж
изменение регистра» в perlapi.

· В коде довольно непоследовательно используются uids и gids. В некоторых местах предполагалось, что они
могут безопасно храниться в UV, другие в IV, третьи в целых числах. Четыре новых макроса
представил: СвУИД(), sv_setuid(), СвГИД()и sv_setgid()

· В API добавлен «sv_pos_b2u_flags». Это похоже на «sv_pos_b2u», но
поддерживает длинные строки на 64-битных платформах.

· «PL_exit_flags» теперь может использоваться специалистами по внедрению Perl или другим XS-кодом для «предупреждения» Perl.
или «прервать» при попытке выхода. [перл #52000]

· Компиляция с использованием «-Accflags=-PERL_BOOL_AS_CHAR» теперь позволяет компиляторам C99 и C++
эмулировать псевдоним «bool» на «char», который Perl делает для компиляторов C89. [перл
# 120314]

· Аргумент «sv» в «sv_2pv_flags» в perlapi, «sv_2iv_flags» в perlapi,
«sv_2uv_flags» в perlapi и «sv_2nv_flags» в perlapi и их старых оболочках.
sv_2pv, sv_2iv, sv_2uv, sv_2nv теперь не NULL. Передача NULL сейчас приведет к сбою. Когда
маркер, отличный от NULL, был массово введен в версии 5.9.3, функции были отмечены как ненулевые.
NULL, но с момента создания SV API в версии 5.0 Alpha 2, если было передано NULL,
функции возвращали значения 0 или ложного типа. Код, поддерживающий аргумент «sv»,
не-NULL напрямую относится к версии 5.0 Alpha 2 и косвенно к Perl 1.0 (до версии 5.0 API).
отсутствие документации о том, что функции принимают NULL «sv», было исправлено в версии 5.11.0.
а между 5.11.0 и 5.19.5 функции были отмечены NULLOK. В качестве оптимизации
Код NULLOK теперь удален, и функции снова стали помечены не NULL,
потому что базовые макросы типа получателя никогда не передают NULL этим функциям и приведут к сбою
прежде чем передать NULL.

Единственный способ передать NULL «sv» функциям sv_2*v* — это напрямую использовать код XS.
вызывает sv_2*v*. Это маловероятно, поскольку код XS использует макросы Sv*V* для получения базовой информации.
значение вне SV. Одна из возможных ситуаций, которая приводит к передаче NULL "sv"
sv_2*v*, это если код XS определяет свой собственный макрос Sv*V* типа геттера, который проверяет
для НУЛЯ до разыменование и проверка флагов SV через общедоступный API Sv*OK*
макросы или напрямую с помощью частного API «SvFLAGS», и если «sv» имеет значение NULL, то вызов
sv_2*v работает с литералом NULL или передает «sv», содержащий значение NULL.

· newATTRSUB теперь является макросом

Публичный API newATTRSUB ранее был макросом для частной функции.
Perl_newATTRSUB. Функция Perl_newATTRSUB удалена. newATTRSUB теперь является макросом для
другая внутренняя функция.

· Изменения в предупреждениях, выдаваемых «utf8n_to_uvchr()»

Эта функция нижнего уровня декодирует первый символ строки UTF-8 в код.
точка. Он доступен для кода уровня «XS», но его использование не рекомендуется.
напрямую. Существуют функции более высокого уровня, которые вызывают это, и их следует использовать.
вместо этого, например, «utf8_to_uvchr_buf» в perlapi. Однако для полноты это
документирует некоторые изменения в нем. Теперь тесты на пороки развития проводятся перед любыми тестами.
для других потенциальных проблем. Одна из этих проблем связана с настолько большими кодовыми точками, что
они никогда не появлялись ни в одном официальном стандарте (текущий стандарт масштабирован
вернуть наивысшую допустимую кодовую точку из более ранних версий). Это возможно (хотя
не сделано в CPAN), чтобы предупредить и/или запретить эти кодовые точки, принимая при этом меньшие
кодовые точки, которые все еще превышают разрешенный законом максимум Unicode. Предупреждающее сообщение для
теперь это включает в себя кодовую точку, если она представлена ​​на машине. Раньше это
всегда отображались необработанные байты, что и происходит до сих пор для непредставимого кода
пунктов.

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

Многие флаги, которые раньше отображались через regexp.h и использовались для заполнения extflags.
член структуры регулярного выражения был удален. Эти месторождения технически были частными для
Собственный движок регулярных выражений Perl, и его вообще не следовало раскрывать там.

Затронутые флаги:

RXf_NOSCAN
RXf_CANY_SEEN
RXf_GPOS_SEEN
RXf_GPOS_FLOAT
RXf_ANCH_BOL
RXf_ANCH_MBOL
RXf_ANCH_SBOL
RXf_ANCH_GPOS

А также следующие маски флагов:

RXf_ANCH_SINGLE
RXf_ANCH

Все они были переименованы в эквиваленты PREGf_ и перемещены в regcomp.h.

Поведение, которое ранее достигалось установкой одного или нескольких флагов RXf_ANCH_ (через
маска RXf_ANCH) теперь заменена *одиночным* битом флага в extflags:

RXf_IS_ANCHORED

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

· Ядро Perl теперь последовательно использует «av_tindex()» («верхний индекс массива») в качестве
более четкое название синонима «av_len()».

· Ожидается, что непонятная переменная интерпретатора «PL_timesbuf» будет удалена в начале
5.21.x, поэтому Perl 5.22.0 не будет предоставлять его авторам XS.
Хотя эта переменная все еще существует в версии 5.20.0, мы надеемся, что это предварительное предупреждение о
устаревание поможет любому, кто использует эту переменную.

Выбранный Ошибка Исправления


Стандарт Expressions
· Исправлено небольшое количество конструкций регулярных выражений, которые могли либо не соответствовать, либо давать сбой
perl, когда сопоставляемая строка была выделена над строкой 2 ГБ на 32-битной
системы. [RT # 118175]

· Различные утечки памяти, связанные с разбором регулярного выражения "(?[...])".
конструкция исправлена.

· "(?[...])" теперь позволяет интерполяцию предварительно скомпилированных шаблонов, состоящих из "(?[...])"
с классами символов в скобках внутри ("$pat = qr/(?[ [a] ])/; /(?[ $pat ])/").
Раньше скобки сбивали с толку анализатор регулярных выражений.

· Могло появиться предупреждающее сообщение «Квантор неожиданный для выражения нулевой длины».
дважды начиная с Perl v5.10 для регулярного выражения, также содержащего изменения
(например, «a|b»), запускающий оптимизацию дерева.

· Perl v5.18 непреднамеренно привел к ошибке, из-за которой интерполировали смешанные вверх и вниз
градуированные строки UTF-8 в регулярном выражении могут привести к искажению UTF-8 в шаблоне:
в частности, если пониженный символ в диапазоне "\ x80 .. \ xff" следует за UTF-8
строка, например

utf8 :: upgrade (мой $ u = "\ x {e5}");
utf8 :: downgrade (мой $ d = "\ x {e5}");
/ $ u $ d /

[RT # 118297]

· В регулярных выражениях, содержащих несколько блоков кода, значения $1, $2 и т. д.
установленные вложенными вызовами регулярных выражений, будут перетекать из одного блока в другой. Сейчас
эти переменные всегда относятся к внешнему регулярному выражению в начале
встроенный блок [perl #117917].

· "/$qr/p" не работал в Perl 5.18.0; флаг «/p» был проигнорирован. Это исправлено.
[perl # 118213]

· Начиная с Perl 5.18.0, конструкция типа "/[#](?{})/x" будет иметь неправильный "#".
интерпретируется как комментарий. Блок кода будет пропущен, не проанализирован. Это было
исправленный.

· Начиная с Perl 5.001, регулярное выражение типа «/[#$a]/x» или «/[#]$a/x» будет иметь
его "#" неправильно интерпретируется как комментарий, поэтому переменная не будет интерполироваться.
Это исправлено. [перл #45667]

· Perl 5.18.0 случайно сделал разыменованные регулярные выражения ("${ qr// }") ложными, поскольку
логические значения. Это исправлено.

· Использование «\G» в регулярных выражениях, если он не находится в начале шаблона, запрещено.
теперь чуть меньше глючит (хотя все еще несколько проблематично).

· Если регулярное выражение включало блоки кода («/(?{...})/») и где использование
постоянная перегрузка вызывала перекомпиляцию блока кода, второй
компиляция не видела своей внешней лексической области. Это была регрессия в Perl 5.18.0.

· Позиция строки, заданная параметром «pos», может сместиться, если строка изменила представление.
внутри или из utf8. Это может произойти, например, со ссылками на объекты с
перегрузка строк.

· Получение ссылок на возвращаемые значения двух вызовов «pos» с одним и тем же аргументом и
тогда присвоение ссылки на один и «undef» на другой может привести к утверждению
сбои или утечки памяти.

· Элементы @- и @+ теперь корректно обновляются, когда они ссылаются на несуществующие записи.
Раньше элемент, на который ссылаются («$ref = \$-[1]»), мог ссылаться на неправильное совпадение.
после последующих матчей.

· Код, который анализирует обратные ссылки регулярных выражений (или неоднозначные обратные ссылки/восьмеричные числа), например \123, выполнил
декриминализовано атой (), который может округлять до отрицательных значений длинные строки цифр и
вызвать ошибки сегментации. Теперь это исправлено. [перл #119505]

· Присвоение другого typeglob для «*^R» больше не приводит к тому, что механизм регулярных выражений
авария.

· Экранирование регулярного выражения «\N», если оно используется без фигурных скобок (что означает
«[^\n]»), игнорировал следующий «*», если за ним следовал пробел в /x. Это было
Так было с тех пор, как в версии 5.12.0 было введено «\N», обозначающее «[^\n]».

· «s///», «tr///» и «y///» теперь работают, когда в качестве разделителя используется широкий символ.
[perl # 120463]

· Некоторые случаи незавершенных (?...) последовательностей в регулярных выражениях (например, «/(?
были исправлены, чтобы выдавать правильное сообщение об ошибке вместо «паники: перенос памяти».
Другие случаи (например, «/(?(/») еще предстоит исправить.

· Когда ссылка на ссылку на перегруженный объект была возвращена из обычного
выражение "(??{...})" может произойти неправильное неявное разыменование
если внутренняя ссылка была ранее возвращена блоком кода.

· Связанная переменная, возвращаемая из "(??{...})", видит внутренние значения переменных соответствия.
(т. е. 1 доллар и т. д. из любых совпадений внутри блока) в методе FETCH. Это было
это не тот случай, если ссылка на перегруженный объект была последней вещью, назначенной
связанная переменная. Вместо этого переменные соответствия ссылались на внешний шаблон во время
ПОЛУЧИТЬ звонок.

· Исправьте непредвиденное искажение через регулярное выражение с использованием локали. Раньше при определенных условиях
использование классов символов может привести к порче, хотя этого не должно быть. Какой-то персонаж
классы зависят от локали, но до этого патча иногда происходило искажение
даже для классов символов, которые не зависят от локали. [перл #120675]

· При определенных условиях Perl выдаст ошибку, если в утверждении просмотра назад в
регулярное выражение, утверждение ссылалось на именованный подшаблон, жалуясь на то, что просмотр назад был
переменная, когда это не было. Это исправлено. [perl #120600], [perl #120618].
текущее исправление может быть улучшено в будущем.

· $^R был недоступен за пределами регулярного выражения, которое его инициализировало. [перл
# 121070]

· Большой набор исправлений и рефакторинга для re_intuit_start() было объединено, основные моменты
составляют:

· Исправлена ​​паника при компиляции регулярного выражения "/\x{100}[xy]\x{100}{2}/".

· Исправлено снижение производительности при выполнении глобального сопоставления с шаблоном.
Строка UTF-8. [перл #120692]

· Исправлена ​​еще одна проблема с производительностью, связанная с сопоставлением регулярного выражения, например
"/ab.{1,2}x/" против длинной строки UTF-8 будет излишне вычислять байт.
смещения для большой части строки. [перл #120692]

· Исправлена ​​ошибка выравнивания при компиляции регулярных выражений при сборке с помощью GCC на HP-
64-битный интерфейс пользователя.

· На 64-битных платформах теперь для параметра pos можно установить значение выше 2**31-1. [перл
# 72766]

Perl 5 Отладчик и -d
· Исправлена ​​команда отладчика "man". Он был сломан в выпуске v5.18.0. В
Команда "man" имеет псевдонимы "doc" и "perldoc" - теперь все снова работает.

· @_ теперь правильно отображается в отладчике, исправляя регрессию, появившуюся в
Отладчик v5.18.0. [RT # 118169]

· При сборках с копированием при записи (по умолчанию для версии 5.20.0) «${'_<-e'}[0]» больше не получает
искалеченный. Это первая строка ввода, сохраненная для использования отладчиком для однострочных строк.
[perl # 118627].

· В сборках без потоков установка "${"_
приводит к тому, что "__FILE__" и некоторые сообщения об ошибках создают поврежденную строку и больше не
запрещает директивам "#line" в строковых значениях передавать исходные строки в
отладчик. Потоковые сборки не были затронуты.

· Начиная с Perl 5.12, номера строк были смещены на единицу, если -d переключатель использовался на
#! линия. Теперь они правы.

· «*DB::DB = sub {} if 0» больше не мешает режиму отладки Perl найти «DB::DB»
подводные лодки, объявленные после этого.

· Хэши "%{'_<...'}" теперь устанавливают точки останова на соответствующем "@{'_<...'}", а не
в зависимости от того, к какому массиву @DB::dbline присвоен псевдоним. [перл #119799]

· Вызов set-magic при настройке $DB::sub. [перл #121255]

· Команда отладчика «n» теперь учитывает функции lvalue и обходит их [perl
№ 118839].

лексический подпрограммы
· Лексические константы ("my sub a () {42}") больше не вызывают сбой при встраивании.

· Прототипы параметров, прикрепленные к лексическим подпрограммам, теперь учитываются при компиляции
дополнительные вызовы без скобок. Раньше прототипы чествовали только за
призывы скобки. [RT # 116735]

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

· Предупреждения о глубокой рекурсии больше не приводят к сбою лексических подпрограмм. [RT # 118521]

· Пробник под-записи dtrace теперь работает с лексическими подпрограммами вместо сбоя [perl
№ 118305].

· Отмена определения встроенной лексической подпрограммы ("my sub foo () {42} undef & foo") приведет к
привести к сбою, если были включены предупреждения.

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

· Наличие лексического подзаголовка с именем «CORE» больше не мешает префиксу CORE::
за работой.

Все Еще
· Код выделения OP теперь возвращает правильно выровненную память во всех случаях для "struct
pmop ". Раньше он мог возвращать память только выровненную по 4-байтовой границе, которая
неверно для сборки ithreads с 64-битными IV на некоторых 32-битных платформах. В частности,
это привело к полному сбою сборки на sparc GNU / Linux. [RT # 118055]

· Оценка больших хешей в скалярном контексте теперь происходит намного быстрее, поскольку количество используемых
цепочки в хеше теперь кэшируются для более крупных хешей. Меньшие хеши по-прежнему не
сохраните его и вычислите при необходимости, так как это экономит один IV. Это будет 1 IV
накладные расходы для каждого объекта, построенного из хеша. [RT № 114576]

· Perl v5.16 непреднамеренно представил ошибку, из-за которой вызовы XSUB, которые не были видны
во время компиляции обрабатывались как lvalue и могли быть присвоены, даже если
подпрограмма не была подпрограммой lvalue. Это исправлено. [RT № 117947]

· В Perl v5.18.0 двойные переменные, в строковой части которых была пустая строка, но ненулевое значение.
число для части числа, которая начинает считаться истинной. В предыдущих версиях они
рассматривались как ложные, причем строковое представление имело приоритет. Старый
поведение восстановлено. [RT № 118159]

· Начиная с Perl версии 5.12, встраивание констант, которые переопределяют встроенные ключевые слова того же самого
имя было отменено «использовать подпрограммы», что привело к последующим упоминаниям константы для использования
вместо этого используйте встроенное ключевое слово. Это исправлено.

· Предупреждение, выдаваемое «-l $handle», теперь относится к ссылкам ввода-вывода и glob, а не только к
глобальные ссылки. Это предупреждение теперь также соответствует UTF8. [RT № 117595]

· «удалить локальный $ENV{nonexistent_env_var}» больше не приводит к утечке памяти.

· Слова «sort» и «require», за которыми следует ключевое слово с префиксом «CORE::», теперь воспринимаются как
ключевое слово, а не имя подпрограммы или модуля. [RT № 24482]

· С помощью определенных загадок можно освободить текущий пакет.
Некоторые операторы («bless», «reset», «open», «eval») не справлялись и приводили к сбою.
Они стали более устойчивыми. [RT № 117941]

· Псевдонимы дескрипторов файлов посредством присвоения glob-to-glob не будут обновлять внутренний метод.
кэшируется правильно, если существует пакет с тем же именем, что и дескриптор файла, что приводит к
Вместо этого вызовы метода filehandle передаются в пакет. Это исправлено.

· «./Configure -de -Dusevendorprefix» не используется по умолчанию. [РТ № 64126]

· Предупреждение «Утверждение вряд ли будет достигнуто» было указано в perldiag как
Предупреждение категории «exec», но было включено и отключено категорией «синтаксис». На
с другой стороны, категория «руководитель» контролировала его фатальность. Теперь это полностью
обрабатывается категорией «exec».

· Предупреждение «Список замен длиннее списка поиска» для «tr///» и «y///» нет
дольше происходит при наличии флага «/c». [RT № 118047]

· Стрингификация NV не кэшируется, поэтому лексический локаль контролирует
стрингификация десятичной точки. [перл № 108378] [перл № 115800]

· Внесено несколько исправлений, связанных с обработкой локалей в Perl. перл #38193 был
описано выше в разделе «Внутренние изменения». Также исправлено #118197, где система счисления
(десятичная точка) должен быть символом ASCII (что не работает для некоторых
незападные языки); и #115808, в котором при ошибке возвращается «POSIX::setlocale()».
"undef", который не предупреждал о том, что он не определен, даже если эти предупреждения были
включен.

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

· Именованная константа, используемая в качестве второго аргумента для «index», больше не приводится к
строка, если это ссылка, регулярное выражение, двойная переменная и т. д.

· Именованная константа, вычисляющая неопределенное значение, используемое в качестве второго аргумента
«index» больше не выдает «неинициализированные» предупреждения во время компиляции. Это все равно будет
создавать их во время выполнения.

· Когда скаляр возвращался из подпрограммы в @INC, указанный скаляр был
волшебным образом преобразуется в штуковину ввода-вывода, что может привести к ошибкам «причудливого копирования», если
этот скаляр продолжал использоваться в других местах. Теперь Perl использует внутреннюю копию
вместо этого скаляр.

· Определенные варианты использования оператора сортировки оптимизированы для изменения массива на месте, например
"@a = сортировка @a". Во время сортировки массив становится доступным только для чтения. Если блок сортировки
должен умереть, тогда массив останется доступным только для чтения даже вне «сортировки». Этот
был исправлен

· $a и $b внутри блока сортировки имеют псевдонимы фактических аргументов «сортировки», поэтому они
можно изменить с помощью этих двух переменных. Это не всегда срабатывало, например, для
lvalue subs и $#ary и, возможно, многие другие операторы. Теперь это работает.

· Все аргументы «сортировки» теперь находятся в контексте списка. Если бы сама «сортировка» называлась
в пустом или скалярном контексте, тогда некоторыераньше, но не все аргументы были недействительны
или скалярный контекст.

· Прототипы подпрограмм с символами Юникода выше U+00FF искажались во время
клонирование закрытия. Это могло бы произойти, если бы подпрограммы закрывались по лексическим переменным.
объявлено снаружи и с лексическими подразделами.

· «UNIVERSAL::can» теперь обрабатывает свой первый аргумент так же, как вызовы методов:
Typeglobs и ссылки на glob с непустыми слотами ввода-вывода рассматриваются как дескрипторы, а
строки обрабатываются как дескрипторы файлов, а не как пакеты, если дескриптор с таким именем
существует [perl #113932].

· Вызовы методов для typeglob (например, «*ARGV->getline»), используемые для придания строкового значения typeglob и
затем посмотрите еще раз. В сочетании с изменениями в Perl 5.18.0 это позволило использовать "*foo->bar"
для вызова методов пакета «foo» (например, «foo->bar»). В некоторых случаях это может вызвать
метод, который будет вызываться не по тому дескриптору. Теперь аргумент typeglob рассматривается как
handle (так же, как "(\*foo)->bar"), или, если его слот ввода-вывода пуст, возникает ошибка.

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

· «pos», «tie», «tied» и «untie» не работали должным образом с псевдонимами аргументов подпрограммы.
к несуществующим элементам хеша и массива [perl #77814, #27010].

· Оператор «=>» с жирной стрелкой теперь может цитировать встроенные ключевые слова, даже если они встречаются в
следующую строку, чтобы она соответствовала тому, как она обрабатывает другие голые слова.

· Автоактивация заглушки подпрограммы с помощью «\&$glob» стала вызывать сбои в Perl 5.18.0.
если бы $glob был просто копией настоящего glob, т. е. скаляром, у которого был glob
назначено ему. Это исправлено. [перл № 119051]

· Perl имел обыкновение сливать детали реализации, когда дело доходило до ссылки на возврат.
значения определенных операторов. «for ($a+$b) { предупреждение \$_; предупреждение \$_ }» используется для отображения двух
разные адреса памяти, поскольку оператор «\» копировал переменную. Под
многопоточных сборках, то же самое произойдет и с константами ("для(1) { ... }"). Это было
зафиксированный. [perl #21979, #78194, #89188, #109746, #114838, #115388]

· Оператор диапазона «..» возвращал одни и те же изменяемые скаляры при каждом вызове,
если только это не было единственным в заголовке цикла foreach. Это означало, что изменения в
значения в возвращаемом списке будут видны при следующем вызове оператора.
казнен. [перл #3105]

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

· Замыкания вида "sub () { $some_variable }" больше не являются встроенными, что приводит к
изменения в переменной, которые будут игнорироваться вызывающими объектами подпрограммы. [перл #79908]

· Возвращаемые значения некоторых операторов, таких как «ref», иногда могут быть разделены между
рекурсивные вызовы одной и той же подпрограммы, в результате чего внутренний вызов изменяет значение
возвращается «ref» во внешнем вызове. Это исправлено.

· «__PACKAGE__» и константы, возвращающие имя пакета или хэш-ключ, теперь согласованы.
только для чтения. В различных предыдущих выпусках Perl они становились изменяемыми при определенных условиях.
обстоятельствах.

· Включение предупреждений «использовано один раз» больше не приводит к сбоям при создании циклических циклов тайника.
во время компиляции ("*Foo::Bar::Foo:: = *Foo::").

· Константы undef, используемые в хэш-ключах («use Constant u => undef; $h{+u}») больше не используются.
выдавать «неинициализированные» предупреждения во время компиляции.

· Изменение цели замены внутри замены замены больше не вызывает
сбои.

· Первый оператор внутри строки eval использовал неправильную настройку прагмы.
иногда при постоянном складывании. «eval 'uc chr 0xe0'» будет случайным образом выбирать между
Семантика Юникода, байта и локали. Это исправлено.

· Обработка возвращаемых значений фильтров @INC (подпрограммы, возвращаемые подпрограммами в
@INC) исправлено различными способами. Ранее связанные переменные были неправильно обработаны, и
установка $_ в ссылку или typeglob может привести к сбоям.

· Функция XS «SvPVbyte» исправлена ​​для работы со связанными скалярами, возвращающими
нечто иное, чем строка. Раньше он возвращал utf8 в тех случаях, когда «SvPV»
бы.

· Perl 5.18.0 случайно вызвал сбой "--" и "++" при обычном разыменовании
выражения и перестали "++" сглаживать vstrings.

· «bless» больше не умирает с «Невозможно благословить нессылочное значение», если его первый аргумент равен
привязанная ссылка.

· «сброс» с аргументом больше не пропускает скаляры копирования при записи, регулярные выражения,
копии typeglob и vsstrings. Кроме того, при обнаружении этих значений или значений, доступных только для чтения, это
больше не пропускает массивы или хеши с тем же именем.

· «reset» с аргументом теперь пропускает скаляры, псевдонимы typeglobs («for $z (*foo) {
сброс "z" }"). Раньше это приводило к повреждению памяти или сбою.

· «ucfirst» и «lcfirst» не учитывали прагму байтов. Это был регресс
из Перла 5.12. [перл #117355]

· Изменения в «UNIVERSAL::DESTROY» теперь обновляют кэши DESTROY во всех классах, а не
заставляя классы, объекты которых уже были уничтожены, продолжать использовать старый подпрограмму.
Это была регрессия в Perl 5.18. [перл #114864]

· Все известные ложные срабатывания предупреждения об устаревании «Бесполезное использование '\';
не экранирует метасимвол «%c», добавленный в Perl 5.18.0, был удален. [perl
# 119101]

· Значение $^E теперь сохраняется во всех обработчиках сигналов в Windows. [перл № 85104]

· Лексическому дескриптору файла (например, «открой мой $fh...») обычно присваивается имя, основанное на имени.
текущий пакет и имя переменной, например «main::$fh». В условиях рекурсии
дескриптор файла терял часть имени «$fh». Это исправлено.

· Неинициализированные значения, возвращаемые XSUB, больше не освобождаются от неинициализированных значений.
предупреждения. [perl # 118693]

· «elsif («»)» больше не выдает ошибочное предупреждение о пустом контексте. [перл
# 118753]

· Передача «undef» в подпрограмму теперь приводит к тому, что @_ содержит то же неопределенное значение, доступное только для чтения.
скаляр, который возвращает «undef». Более того, «exists $_[0]» теперь будет возвращать true, если
«undef» было первым аргументом. [перл #7508, #109726]

· Передача несуществующего элемента массива в подпрограмму обычно не приводит к его автоматическому оживлению.
если подпрограмма не изменит свой аргумент. Это не сработало правильно с
отрицательные индексы и несуществующие элементы внутри массива. Элемент будет
немедленно оживиться. Отложенное оживление было расширено для работы с
те. [перл #118691]

· Присвоение ссылок или glob скаляру, возвращаемому $#foo после того, как массив @foo был
освобождение больше не вызывает сбоев утверждений при отладке сборок и утечек памяти на
регулярные сборки.

· На 64-битных платформах большие диапазоны, такие как 1..1000000000000, больше не вылетают, а съедают
вместо этого вся твоя память. [перл #119161]

· «__DATA__» теперь помещает дескриптор «DATA» в правильный пакет, даже если текущий
пакет был переименован посредством назначения glob.

· Когда «умереть», «последний», «следующий», «повторить», «перейти» и «выйти» можно развернуть область действия.
для "DESTROY" рекурсивно вызвать подпрограмму или формат, который в данный момент выполняется
вышел. В этом случае иногда лексические переменные внутри подпрограммы начинаются с
иметь значения из внешнего вызова, а не быть неопределенными, как должно. Этот
было исправлено. [perl # 119311]

· ${^MPEN} больше не рассматривается как синоним ${^MATCH}.

· Perl теперь немного усерднее пытается вернуть правильный номер строки в «(caller)[2]».
[perl # 115768]

· Номера строк внутри многострочных операторов, похожих на кавычки, теперь отображаются правильно. [перл
# 3643]

· Директивы «#line» внутри кода, встроенные в операторы, подобные кавычкам, теперь учитываются.

· Номера строк внутри второго документа теперь корректны, если есть два маркера здесь-документа.
происходят на одной линии.

· Оптимизация в Perl 5.18 сделала неправильные предположения, что привело к плохому взаимодействию с
модуль Devel::CallParser CPAN. Если модуль был загружен, то лексические переменные
объявленный в отдельных инструкциях после списка «мой(...)», может не быть очищен
выход из области.

· Вызовы &xsub и «goto &xsub» теперь позволяют вызываемой подпрограмме автоматически активировать элементы
@_.

· &xsub и «goto &xsub» больше не приводят к сбою, если *_ не определено и не имеет записи в МАССИВЕ
(т.е. @_ не существует).

· &xsub и «goto &xsub» теперь работают со связанным @_.

· Слишком длинные идентификаторы больше не вызывают переполнение буфера (и сбой). Они начали
делаю это в Perl 5.18.

· Предупреждение «Скалярное значение @hash{foo} лучше записать как $hash{foo}» теперь выдает далеко
меньше ложных срабатываний. В частности, @hash{+function_returning_a_list} и @hash{ qw
"foo bar baz" } больше не предупреждает. То же самое относится и к срезам массива. [перл #28380,
# 114024]

· "$! = EINVAL; waitpid(0, WNOHANG);" больше не переходит во внутренний бесконечный цикл.
[perl # 85228]

· Исправлена ​​возможная ошибка сегментации при дублировании дескрипторов файлов.

· Подпрограмма в @INC может возвращать ссылку на скаляр, содержащий начальное значение.
содержимое файла. Однако этот скаляр был освобожден преждевременно, если на него не ссылались.
в другом месте, давая случайные результаты.

· «последний» больше не возвращает значения, накопленные одним и тем же оператором, исправляя
среди прочего давняя ошибка, из-за которой команда «push @a, Last» пыталась вернуться
@a, копируя его как скаляр в процессе и приводя к ошибке: «Bizarre
последняя копия ARRAY." [perl #3112]

· В некоторых случаях закрывающие дескрипторы файлов открываются для передачи в процесс или из него, который был
был продублирован в стандартный дескриптор, вызывал бы внутреннюю оболочку waitpid Perl
с нулевым pid. С исправлением для [perl #85228] этот нулевой pid был передан
«waitpid», возможно, блокирующий процесс. Это ожидание нулевого процесса больше не требуется
имеет место. [перл #119893]

· «выбрать» используется для игнорирования магии в четвертом аргументе (тайм-аут), что приводит к эффектам
например, блокировка «выбрать» на неопределенный срок, а не ожидаемое время сна. Это имеет
теперь исправлено. [перл #120102]

· Имя класса в «для моего класса $foo» теперь анализируется правильно. В случае
за вторым символом имени класса следует цифра (например, «a1b»), это раньше
выдает ошибку «Отсутствует $ в переменной цикла». [перл #120112]

· Perl 5.18.0 случайно запретил «-bareword» в параметрах «use strict» и «use Integer».
Это было исправлено. [perl # 120288]

· «-a» в начале строки (или дефис с любой отдельной буквой, не являющейся файловым тестом
оператор) больше не выдает ошибочное сообщение «Использование «-a» без круглых скобок недопустимо.
двусмысленное предупреждение. [перл #120288]

· Контекст Lvalue теперь правильно распространяется на пустые блоки, а также блоки «if» и «else».
в функциях lvalue. Раньше массивы и хеши иногда неправильно интерпретировались.
сглаживается при возврате в контексте списка lvalue, иначе могут возникнуть ошибки «странного копирования».
[perl # 119797]

· Контекст Lvalue теперь распространяется на ветви «||» и "&&" (и их
алфавитные эквиваленты «или» и «и»). Это означает «foreach (pos $x || pos $y)
{...}" теперь позволяет изменять "pos" через $_.

· «stat» и «readline» запоминают последний использованный дескриптор; первый для специального "_"
дескриптор файла, последний для "${^LAST_FH}". "eval "*foo if 0"" где *foo был последним
дескриптор, переданный в «stat» или «readline», может привести к тому, что этот дескриптор будет забыт, если
ручка еще не открывалась. Это исправлено.

· Были зафиксированы различные случаи, когда команды «delete $::{a}», «delete $::{ENV}» и т. д. приводили к сбою.
зафиксированный. [перл #54044]

· Установка $! в EACCESS перед вызовом «require» может повлиять на поведение «require».
Это было исправлено.

· Предупреждающее сообщение «Невозможно использовать \1 для обозначения $1 в выражении» теперь появляется только на
правая (замена) часть замены. Раньше это могло произойти в коде
встроенный в левую часть или в любой другой оператор, подобный кавычкам.

· Благословение ссылки («благослови $thisref, $thatref») уже давно запрещено, но
магические скаляры для второго типа $/ и те, которые были связаны, были освобождены от налога. Они больше не
являются. [перл #119809]

· Благословение ссылки было случайно разрешено в версии 5.18, если аргумент класса был
благословенная ссылка с устаревшими кэшами методов (т. е. чей класс имел определенные подпрограммы
с момента последнего вызова метода). Они снова запрещены, как и в 5.16.

· «$x->{key}», где $x был объявлен как «мой класс $x», больше не вылетает, если
Объявлена ​​заглушка подпрограммы Class::FIELDS.

· @$obj{'key'} и "${$obj}{key}" раньше освобождались от проверки полей во время компиляции.
(«Нет такого поля класса»; см. поля), но больше не существует.

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

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

· Объявление заглушки подпрограммы «require», «glob» или «do» в пакете CORE::GLOBAL::
больше не приводит к сбою компиляции вызовов соответствующих функций.

· Присвоение константам функций CORE::GLOBAL:: перестало работать в Perl 5.10, но
теперь исправлено.

· Когда "`...`" или "qx/.../" вызывает переопределение "readpipe", интерполяция в двойных кавычках
теперь происходит, как и в случае, когда нет переопределения. Ранее наличие
переопределение заставит эти операторы, подобные кавычкам, действовать как "q{}", подавляя
интерполяция. [перл #115330]

· Документы «<<<`...`» (с обратными кавычками в качестве разделителей) теперь вызывают переопределения «readpipe».
[perl # 119827]

· «&CORE::exit()» и «&CORE::die()» теперь учитывают подсказки vmsish.

· Отмена определения шара, который запускает метод DESTROY, который отменяет определение того же шара, теперь
безопасный. Раньше он выдавал предупреждения «Попытка освободить неиспользуемый указатель glob» и
утечка памяти.

· Если переопределение подпрограммы («eval 'sub foo{}'» или «newXS» для кода XS) вызывает
DESTROY в переопределяемой подпрограмме, и этот метод назначает
подпрограмму в тот же слот ("*foo = sub {}"), $_[0] больше не указывает на
освобожденный скаляр. Теперь DESTROY откладывается до тех пор, пока не будет установлена ​​новая подпрограмма.

· В Windows Perl больше не вызывает CloseHandle () на ручке розетки. Это делает
упрощение отладки в Windows за счет удаления некоторых ненужных исключений с неверными дескрипторами. Это
также исправляет состояние гонки, из-за которого функции сокетов случайным образом завершались сбоем в процессе Perl
с несколькими потоками ОС и возможными неудачными тестами в
dist/IO/t/cachepropagate-tcp.t. [перл № 120091/118059]

· Форматы, включающие строки в кодировке UTF-8 или странные переменные, такие как связи, перегрузки или
строковые ссылки (а в последних Perls и чистые переменные NOK) обычно ведут себя неправильно.
вещь в форматах, когда переменная рассматривается как строка и многократно разрезается, как в
«^<<<~~» и тому подобное. Теперь эта проблема решена. [перл
#33832/45325/113868/119847/119849/119851]

· «semctl(..., SETVAL, ...)» установит семафор в верхние 32 бита предоставленного
целое число вместо младших 32-бит в 64-битных системах с прямым порядком байтов. [перл #120635]

· «readdir()» теперь устанавливает только $! по ошибке. $! больше не установлено на «EBADF», когда затем
завершающий "undef" считывается из каталога, если системный вызов не устанавливает $!. [перл
# 118651]

· &CORE::glob больше не вызывает периодический сбой из-за повреждения стека Perl.
испорчен. [перл #119993]

· «открытие» со слоями, которые загружают модули (например, «<:encoding(utf8)») больше не запускает
риск сбоя из-за повреждения стека.

· Perl 5.18 нарушил автозагрузку через вызов метода «->SUPER::foo» из-за поиска AUTOLOAD.
из текущего пакета, а не из суперкласса текущего пакета. Это было
зафиксированный. [перл #120694]

· Давняя ошибка, вызывающая «do {} до CONSTANT», когда константа содержит истинное значение.
значение, позволяющее читать нераспределенную память, было разрешено. Обычно это происходит после
синтаксическая ошибка. В прошлых версиях Perl периодически происходил сбой. [перл #72406]

· Исправьте HP-UX $! отказ. HP-UX strerror () возвращает пустую строку для неизвестной ошибки
код. Это привело к сбою утверждения в сборках DEBUGGING. Теперь вместо этого
возвращенная строка для "$!" содержит текст, указывающий, что код относится к неизвестной ошибке.

· Индивидуально связанные элементы @INC (например, «связать $INC[0]...») теперь обрабатываются правильно.
Раньше вопрос, будет ли подпрограмма, возвращаемая таким связанным элементом, рассматриваться как подпрограмма
зависело от того, произошла ли FETCH ранее.

· «getc» для дескриптора размером в байт после того, как тот же оператор «getc» был использован в utf8
дескриптор, используемый для обработки байтов как utf8, что приводит к нестабильному поведению (например, некорректному форматированию
Предупреждения UTF-8).

· Начальный символ «{» в начале строки аргумента формата всегда интерпретировался как
начало блока до версии 5.18. В Perl v5.18 он стал рассматриваться как
неоднозначный знак. Парсер угадает, должно ли это быть анонимное сообщение.
хэш-конструктор или блок на основе содержимого. Теперь предыдущее поведение имеет
был восстановлен. [перл #119973]

· В Perl v5.18 «undef * _; goto & sub» и «local * _; goto & sub» начали давать сбой. Этот
было исправлено. [perl # 119949]

· Обратные кавычки ("``" или "qx//") в сочетании с несколькими потоками в Win32 могут привести к
вывод, отправленный на стандартный вывод в одном потоке, захватывается обратными кавычками внешней команды
в другой теме.

Это может произойти и с псевдо-разветвлением процессов, поскольку псевдо-разветвление Win32
реализовано в виде потоков. [перл #77672]

· «open $fh, «>+», undef» больше не приводит к утечке памяти, когда установлен TMPDIR, а указывает на
каталог, в котором невозможно создать временный файл. [perl #120951]

· " for ( $h{k} || '' ) " больше не оживляет $h{k} автоматически. [перл #120374]

· На компьютерах под управлением Windows Perl теперь эмулирует использование среды POSIX для локали.
инициализация. Раньше окружение игнорировалось. См. «ОКРУЖАЮЩАЯ СРЕДА» в
перлокаль.

· Исправлен сбой при уничтожении самоссылающегося GLOB. [перл #121242]

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


· Известно, что IO::Socket не проходит тесты в AIX 5.3. Есть патч
в трекере запросов #120835,
которые могут быть применены к будущим выпускам.

· Известно, что следующие модули не прошли тестирование с этой версией Perl.
Патчи отправлены, так что, надеюсь, скоро появятся новые релизы:

· Data::Structure::Util версия 0.15

· HTML::StripScripts версии 1.05

· Список::Собрать версию 0.08.

Некролог


27-летняя Диана Роза из Рио-де-Жанейро отправилась на длительный отдых 10 мая 2014 года вместе с
плюшевого верблюда, которого она все время висела на экране компьютера. Она была страстной
Хакер Perl, который любил этот язык и его сообщество и никогда не пропускал мероприятия Rio.pm.
Она была настоящей художницей, энтузиастом написания кода, пения арий и граффитинга.
стены. Мы никогда тебя не забудем.

Грег МакКэрролл умер 28 августа 2013 года.

Грег был хорошо известен по многим веским причинам. Он был одним из организаторов первого
YAPC::Europe, который завершился внеплановым аукционом, на котором он отчаянно пытался
собрать дополнительные деньги, чтобы конференция не понесла убытков. Это Грег по ошибке
прибыл на встречу в london.pm с опозданием на неделю; несколько лет спустя именно он продал
выбор официальной даты встречи на аукционе YAPC::Europe, и в конечном итоге столь же славной
лидер london.pm, он унаследовал созданную им непочтительную путаницу.

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

Благодарности


Perl 5.20.0 представляет собой примерно 12 месяцев разработки, начиная с Perl 5.18.0 и
содержит примерно 470,000 строк изменений в 2,900 файлах от 124 авторов.

Исключая автоматически сгенерированные файлы, документацию и инструменты выпуска, было примерно
280,000 строк изменений в 1,800 файлах .pm, .t, .c и .h.

Perl продолжает процветать уже третье десятилетие благодаря активному сообществу пользователей.
и разработчики. Следующие люди, как известно, внесли улучшения, которые
стал Perl 5.20.0:

Аарон Крейн, Абхиджит Менон-Сен, Эбигейл, Абир Викар, Алан Хаггей Алави, Алан Хурихейн,
Александр Воронов, Александр Черный, Энди Догерти, Анно Сигел, Аристотель Пагалцис,
Артур Аксель 'fREW' Шмидт, Брэд Гилберт, Брендан Берд, Брайан Чайлдс, Брайан Фрейзер, Брайан
Готтро, Крис «BinGOs» Уильямс, Кристиан Миллор, Колин Каски, Крейг А. Берри, Дабриен
«Дэйб» Мёрфи, Дагфинн Илмари Маннсаакер, Дэниэл Драган, Дэрин МакБрайд, Дэвид Голден,
Дэвид Ледбитер, Дэвид Митчелл, Дэвид Никол, Дэвид Стейнбруннер, Деннис Каарсмейкер,
Доминик Харгривз, Эд Эвис, Эрик Брин, Эван Закс, отец Хризостомос, Флориан Рэгвиц,
Франсуа Перрад, Гэвин Шелли, Гидеон Исраэль Дсоуза, Жисл Аас, Грэм Кноп, Х.Мерин
Брэнд, Хауке Д., Хейко Эйссфельдт, Хироо Хаяши, Ходжунг Юн, Джеймс Э. Кинан, Яркко
Хиетаниеми, Джерри Д. Хедден, Джесс Робинсон, Джесси Люэрс, Йохан Вроманс, Джон Гардинер
Майерс, Джон Гудиер, Джон П. Линдерман, Джон Пикок, Кафка, Лю Кан Мин, Карен
Этеридж, Карл Уильямсон, Киди Ким, Кент Фредрик, Кевин Доусон, Кевин Фальконе, Кевин
Райд, Леон Тиммерманс, Лукас Май, Марк Симпсон, Марсель Грюнауэр, Марко Пиребум, Маркус
Холланд-Мориц, Марк Джейсон Доминус, Мартин МакГрат, Мэттью Хорсфолл, Макс Майшейн, Майк
Доэрти, Мориц Ленц, Нэйтан Гленн, Нэйтан Трапуццано, Нил Бауэрс, Нил Уильямс,
Николас Кларк, Нильс Тикьер, Нико Тыни, Оливье Менге, Оуэн Дж. Эйнсворт, Пол Грин,
Пол Джонсон, Питер Джон Эклам, Питер Мартини, Питер Рэббитсон, Петр Писакс, Филип
Булен, Филип Гюнтер, Петр Розатицкий, Рафаэль Гарсиа-Суарес, Рейни Урбан, Рубен
Томас, Рикардо Сигнес, Руслан Закиров, Сергей Алексеев, Шираката Кентаро, Шломи Фиш,
Славен Резич, Смайлерс, Штеффен Мюллер, Стив Хэй, Салливан Бек, Томас Сибли, Тобиас
Лейх, Тоби Инкстер, Токухиро Мацуно, Том Кристиансен, Том Хакинс, Тони Кук, Виктор
Ефимов, Виктор Турский, Владимир Тимофеев, ЯМАШИНА Хио, Ив Ортон, Зефрам, Зсбан
Амбрус, Эвар Арнфьер Бьярмасон.

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

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

Для получения более полного списка всех исторических участников Perl см. АВТОРЫ
файл в исходном дистрибутиве Perl.

Отчетность ошибки


Если вы обнаружите, что, по вашему мнению, является ошибкой, вы можете проверить статьи, недавно опубликованные в
comp.lang.perl.misc группа новостей и база данных ошибок perl на http://rt.perl.org/perlbug/ .
Также может быть информация на http://www.perl.org/ , домашняя страница Perl.

Если вы считаете, что у вас есть незарегистрированная ошибка, запустите программу perlbug, включенную в
ваш выпуск. Обязательно уменьшите количество ошибок до крошечного, но достаточного тестового примера. Ваша ошибка
отчет вместе с выводом "perl -V" будет отправлен в [электронная почта защищена] быть
проанализирован командой портирования Perl.

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

Используйте perl5200delta в Интернете с помощью сервисов onworks.net


Бесплатные серверы и рабочие станции

Скачать приложения для Windows и Linux

Команды Linux

Ad