Это команда perl5180delta, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
perl5180delta - что нового в perl v5.18.0
ОПИСАНИЕ
В этом документе описаны различия между выпуском v5.16.0 и выпуском v5.18.0.
Если вы обновляетесь с более ранней версии, такой как v5.14.0, сначала прочтите perl5160delta,
который описывает различия между v5.14.0 и v5.16.0.
Основные Улучшения
Новое механизм для экспериментальный функции
Для недавно добавленных экспериментальных функций теперь потребуется это заклинание:
предупреждений нет "экспериментальный :: имя_функции";
используйте функцию "feature_name"; # будет предупреждать без предыдущей строки
Появилась новая категория предупреждений, названная «экспериментальной», содержащая предупреждения о том, что
прагма feature излучает при включении экспериментальных функций.
Недавно добавленным экспериментальным функциям также будут присвоены специальные идентификаторы предупреждений, которые состоят из
"экспериментальный ::", за которым следует название функции. (Планируется продлить этот
механизм в конечном итоге для всех предупреждений, чтобы разрешить их включение или отключение
индивидуально, а не только по категориям.)
Говоря
предупреждений нет "экспериментальный :: имя_функции";
вы берете на себя ответственность за любую поломку, которая в будущем изменит или удалит
функция может вызвать.
Некоторые функции (например, «~~» или «my $ _») теперь выдают экспериментальные предупреждения, и вы можете
хотите отключить их в коде, который также запускается на perls, которые не распознают это предупреждение
категории, рассмотрите возможность использования прагмы "if" следующим образом:
нет, если $]> = 5.018, warnings => "экспериментальный :: имя_функции";
Существующие экспериментальные функции также могут начать выдавать эти предупреждения. Пожалуйста, проконсультируйтесь
perlexperiment для получения информации о том, какие функции считаются экспериментальными.
Hash реформу
Изменения в реализации хэшей в perl v5.18.0 будут одними из самых заметных.
изменения в поведении существующего кода.
По умолчанию две разные хеш-переменные с одинаковыми ключами и значениями теперь могут предоставлять
их содержимое в другом порядке, если оно было идентичным ранее.
Когда вы сталкиваетесь с этими изменениями, ключ к избавлению от них - это признать, что хэши
неупорядоченный Коллекции и действовать соответственно.
Hash рандомизации
Начальное число, используемое хеш-функцией Perl, теперь случайное. Это означает, что порядок, который
ключи / значения будут возвращены такими функциями, как "keys ()", "values ()" и "each ()" будут
различаются от запуска к запуску.
Это изменение было внесено, чтобы сделать хэши Perl более устойчивыми к алгоритмической сложности.
атак, а также потому, что мы обнаружили, что он выявляет ошибки зависимости порядка хеширования и
облегчает их выслеживание.
Сопровождающие Toolchain могут захотеть инвестировать в дополнительную инфраструктуру для тестирования вещей.
нравится. Выполнение тестов несколько раз подряд, а затем сравнение результатов сделает его
легче определить зависимости порядка хеширования в коде. Авторам настоятельно рекомендуется не
раскрыть ключевой порядок хэшей Perl небезопасной аудитории.
Кроме того, каждый хэш имеет свой собственный порядок итерации, что должно значительно усложнить задачу.
чтобы определить текущее начальное значение хэша.
Новое хэш Функции
Perl v5.18 включает поддержку нескольких хеш-функций и изменен по умолчанию (на
ONE_AT_A_TIME_HARD), вы можете выбрать другой алгоритм, определив символ при компиляции
время. Текущий список см. УСТАНОВИТЬ документ. Обратите внимание, что начиная с Perl v5.18 мы
могу только рекомендовать использование по умолчанию или SIPHASH. Все остальные, как известно, имеют
вопросы безопасности и предназначены только для исследовательских целей.
PERL_HASH_SEED охрана окружающей среды переменная сейчас принимает a шестнадцатеричный ценностное
«PERL_HASH_SEED» больше не принимает целое число в качестве параметра; вместо этого значение
Ожидается, что это двоичное значение, закодированное в шестнадцатеричной строке, например «0xf5867c55039dc724». Этот
состоит в том, чтобы сделать хэш-семена поддержки инфраструктуры произвольной длины, которая может превышать
что целого числа. (SipHash использует 16-байтовое начальное число.)
PERL_PERTURB_KEYS охрана окружающей среды переменная добавленный
Переменная среды "PERL_PERTURB_KEYS" позволяет контролировать уровень
рандомизация применяется к «ключам» и друзьям.
Когда «PERL_PERTURB_KEYS» равно 0, perl вообще не будет рандомизировать порядок ключей. Шанс
что "ключи" меняются из-за вставки будут такими же, как и в предыдущих perls, в основном только
при изменении размера ковша.
Когда «PERL_PERTURB_KEYS» равно 1, perl будет рандомизировать ключи неповторяющимся способом. В
вероятность того, что «ключи» изменятся из-за вставки, будет очень высока. Это самый безопасный
и режим по умолчанию.
Когда «PERL_PERTURB_KEYS» равно 2, perl будет случайным образом рандомизировать ключи повторяемым образом. Повторяется
запуски одной и той же программы должны каждый раз давать один и тот же результат.
«PERL_HASH_SEED» подразумевает нестандартную настройку «PERL_PERTURB_KEYS». Параметр
«PERL_HASH_SEED = 0» (ровно один 0) подразумевает «PERL_PERTURB_KEYS = 0» (рандомизация хеш-ключа
отключен); установка «PERL_HASH_SEED» на любое другое значение подразумевает «PERL_PERTURB_KEYS = 2»
(детерминированная и повторяемая рандомизация хеш-ключа). Указание «PERL_PERTURB_KEYS»
явно на другой уровень переопределяет это поведение.
Хэш :: Утилита :: hash_seed () сейчас Возвращает a string
Хэш :: Утилита :: hash_seed () теперь возвращает строку вместо целого числа. Это сделать
инфраструктура поддерживает хэш-семена произвольной длины, которые могут превышать длину
целое число. (SipHash использует 16-байтовое начальное число.)
Результат of PERL_HASH_SEED_DEBUG и было менялась
Переменная среды PERL_HASH_SEED_DEBUG теперь заставляет perl показывать как хеш-функцию
perl был построен с помощью, и семя в шестнадцатеричном формате, используемое для этого процесса. Код, анализирующий это
вывод, если он существует, должен измениться, чтобы приспособиться к новому формату. Пример нового
Формат:
$ PERL_HASH_SEED_DEBUG = 1 ./perl -e1
HASH_FUNCTION = MURMUR3 HASH_SEED = 0x1476bb9f
модернизация в Unicode 6.2
Perl теперь поддерживает Unicode 6.2. Список изменений от Unicode 6.1 находится на
<http://www.unicode.org/versions/Unicode6.2.0>.
Характер имя псевдонимы май сейчас включают не Latin1-range символы
Можно определить свои собственные имена для символов для использования в "\ N {...}",
"charnames :: vianame ()" и т. д. Эти имена теперь могут состоять из символов из
весь диапазон Unicode. Это позволяет использовать имена на вашем родном языке, а не только
Английский. Определенные ограничения применяются к символам, которые могут быть использованы (вы не можете определить
имя, содержащее знаки препинания, например). См. «ПОЛЬЗОВАТЕЛЬСКИЕ НИКНЕЙМЫ» в именах символов.
Новое DTrace Зонды
Были добавлены следующие новые зонды DTrace:
· "Op-entry"
· "Загрузка-файл"
· "Загруженный файл"
"$ {^ LAST_FH}"
Эта новая переменная обеспечивает доступ к последнему считанному дескриптору файла. Это
дескриптор, используемый $. и "сказать" и "еоф" без аргументов.
Стандарт Выражение Поставьте Операционный отдел
Это экспериментальный функция, позволяющая сопоставить с объединением, пересечением и т. д.,
наборов кодовых точек, аналогично Unicode :: Regex :: Set. Его также можно использовать для расширения
"/ x" обработка классов символов [в квадратных скобках] и как замена определяемых пользователем
properties, позволяя использовать более сложные выражения, чем они есть. См. «Расширенные скобки
Классы персонажей »в perlrecharclass.
лексический подпрограммы
Эта новая функция все еще рассматривается экспериментальный. Чтобы включить его:
используйте 5.018;
нет предупреждений "экспериментальный :: lexical_subs";
использовать функцию «lexical_subs»;
Теперь вы можете объявлять подпрограммы с помощью «state sub foo», «my sub foo» и «our sub foo».
(«State sub» требует, чтобы функция «state» была включена, если вы не пишете как
"CORE :: state sub foo".)
«state sub» создает подпрограмму, видимую в лексической области видимости, в которой она объявлена.
Подпрограмма распределяется между вызовами внешнего подпрограммы.
"my sub" объявляет лексическую подпрограмму, которая создается каждый раз, когда включающий блок
вошел. «государственная подписка» обычно немного быстрее, чем «моя подписка».
«наша подпрограмма» объявляет лексический псевдоним одноименной подпрограммы пакета.
Для получения дополнительной информации см. «Лексические подпрограммы» в perlsub.
Вычисленный Метки
Контроллеры цикла "следующий", "последний" и "повторить", а также специальный оператор "дампа" теперь позволяют
произвольные выражения, которые будут использоваться для вычисления меток во время выполнения. Раньше любой аргумент
то, что не было константой, рассматривалось как пустая строка.
Ещё ОСНОВНОЙ:: подписка
Еще несколько встроенных функций были добавлены в качестве подпрограмм в пространство имен CORE :: -
а именно те непереопределяемые ключевые слова, которые могут быть реализованы без специальных парсеров:
«определенный», «удалить», «существует», «глобус», «позиция», «прототип», «скаляр», «разделить», «изучить» и
"ундеф".
Поскольку у некоторых из них есть прототипы, "prototype ('CORE :: ...')" было изменено, чтобы не создавать
различие между заменяемыми и непереопределяемыми ключевыми словами. Это сделать
«прототип ('CORE :: pos')» соответствует «прототипу (& CORE :: pos)».
"убийство" отрицательный сигнал имена
"kill" всегда допускал отрицательный номер сигнала, который вместо этого убивает группу процессов.
одного процесса. Также разрешены имена сигналов. Но не вела себя
последовательно, потому что имена отрицательных сигналов обрабатывались как 0. Теперь имена отрицательных сигналов
вроде "-INT" поддерживаются и обрабатываются так же, как -2 [perl # 112990].
Безопасность.
Посмотреть то есть: хэш реформу
Некоторые изменения в капитальном ремонте хэша были внесены для повышения безопасности. Пожалуйста, прочтите это
.
"Хранимый" безопасность предупреждение in документации
Документация для "Storable" теперь включает раздел, предупреждающий читателей об опасности.
принятия хранимых документов из ненадежных источников. Краткая версия такова:
десериализация определенных типов данных может привести к загрузке модулей и выполнению другого кода.
Это задокументированное поведение и желаемое поведение, но оно открывает вектор атаки для
злонамеренные сущности.
"Locale :: Maketext" разрешено код инъекция с помощью a злонамеренный шаблон
Если бы пользователи могли предоставить строку перевода для Locale :: Maketext, это можно было бы использовать для
вызывать произвольные подпрограммы Perl, доступные в текущем процессе.
Это было исправлено, но по-прежнему можно вызывать любой метод, предоставленный
Сам "Locale :: Maketext" или подкласс, который вы используете. Один из этих методов в свою очередь
вызовет подпрограмму "sprintf" ядра Perl.
Таким образом, позволять пользователям предоставлять строки перевода без их аудита - это плохо.
идея.
Эта уязвимость задокументирована в CVE-2012-6329.
Избежать требуют мемсет a отрицательный считать
Плохо написанный код Perl, позволяющий злоумышленнику указать счетчик в строке Perl «x».
Оператор повторения уже может вызвать атаку отказа в обслуживании из-за нехватки памяти. Недостаток в
версии perl до v5.15.5 могут привести к переполнению буфера кучи; в сочетании с
версии glibc до 2.16, возможно, он позволяет выполнять произвольный код.
Недостатку, адресованному этой фиксации, был присвоен идентификатор CVE-2012-5195, и он был
исследовал Тим Браун.
Несовместимый изменения
Посмотреть то есть: хэш реформу
Некоторые изменения в капитальном ремонте хэша не полностью совместимы с предыдущими версиями
из perl. Пожалуйста, прочтите этот раздел.
An неизвестный персонаж имя in "\ N {...}" is сейчас a синтаксис ошибка
Раньше он предупреждал и подставлял СИМВОЛ ЗАМЕНЫ Юникода. Unicode сейчас
рекомендует, чтобы в этой ситуации возникла синтаксическая ошибка. Кроме того, предыдущее поведение привело к некоторым
вводящие в заблуждение предупреждения и поведение, и поскольку ХАРАКТЕР ЗАМЕНЫ не используется в других
чем в качестве замены какого-то неизвестного символа, любой код, в котором есть эта проблема, содержит ошибки.
раньше устарела символы in "\ N {}" персонаж имя псевдонимы сейчас ошибки.
Начиная с версии 5.12.0, использование определенных символов в определяемом пользователем "\ N {...}" устарело.
имена персонажей. Теперь это вызывает синтаксическую ошибку. Например, теперь ошибка
начинать имя с цифры, например, в
мой $ undraftable = "\ N {4F}"; # Ошибка синтаксиса!
или иметь запятые в любом месте имени. См. «ПОЛЬЗОВАТЕЛЬСКИЕ НИКНЕЙМЫ» в именах символов.
"\ N {BELL}" сейчас понимается в U + 1F514 вместо of U + 0007
Unicode 6.0 повторно использовал имя «BELL» для другой кодовой точки, чем это было традиционно.
имел ввиду. Начиная с Perl v5.14, использование этого имени по-прежнему относится к U + 0007, но вызовет
предупреждение об устаревании. Теперь «BELL» относится к U + 1F514, а имя для U + 0007 - «ALERT».
Соответственно обновлены все функции в именах символов.
Новое ограничения in Многосимвольный Без учета регистра Согласование in Стандарт Выражение В скобках
Характер Классы
Unicode отозвал свои предыдущие рекомендации по регулярным выражениям, чтобы
автоматически обрабатывать случаи, когда один символ может соответствовать нескольким символам case-
нечувствительно, например, буква LATIN SMALL LETTER SHARP S и последовательность «ss».
Это потому, что сделать это правильно во всех случаях невозможно.
обстоятельства. Поскольку Perl пытался сделать это как можно лучше, он продолжит делать
так. (Мы рассматриваем возможность его отключения.) Однако вводится новое ограничение.
добавляется к таким совпадениям, когда они встречаются в классах символов [в квадратных скобках]. Люди были
указав такие вещи, как "/ [\ 0- \ xff] / i", и удивившись, что он соответствует двум
последовательность символов "ss" (поскольку в этом диапазоне встречается СТРОЧНАЯ ЛАТИНСКАЯ БУКВА SHARP S). Этот
поведение также несовместимо с использованием свойства вместо диапазона:
"\ p {Block = Latin1}" также включает СТРОЧНУЮ ЛАТИНСКУЮ БУКВУ SHARP S, но "/ [\ p {Block = Latin1}] / i"
не совпадает с "сс". Новое правило состоит в том, что для использования многосимвольного регистра:
нечувствительное соответствие внутри класса символов в квадратных скобках, символ должен быть явно
указан, а не в качестве конечной точки диапазона. Это больше соответствует принципу
Наименьшее удивление. См. «Классы символов в квадратных скобках» в perlrecharclass. Обратите внимание, что
ошибка [perl # 89774], теперь исправленная как часть этого изменения, препятствовала предыдущему поведению
работает полностью.
Явный условиями, для переменная имена и идентификаторы
По недосмотру односимвольные имена переменных в v5.16 были полностью
неограниченный. Это открыло дверь нескольким видам безумия. Начиная с версии 5.18, теперь эти
следовать правилам других идентификаторов, помимо принятия символов, соответствующих
Свойство "\ p {POSIX_Punct}".
Больше нет разницы в парсинге идентификаторов, указанных в фигурных скобках.
по сравнению с без подтяжек. Например, perl разрешал "$ {foo: bar}" (с одним
двоеточие), но не $ foo: bar. Теперь, когда оба обрабатываются одним путем кода, они оба
относились одинаково: оба запрещены. Обратите внимание, что это изменение касается диапазона
допустимые буквальные идентификаторы, а не другие выражения.
вертикальный Вкладки сейчас пробельные
Никто не мог вспомнить, почему "\ s" не соответствует "\ cK", вертикальной табуляции. Теперь это так. Данный
крайняя редкость этого символа, ожидается очень небольшая поломка. Тем не менее, вот
что это значит:
«\ s» в регулярном выражении теперь соответствует вертикальной табуляции при любых обстоятельствах.
Буквальные вертикальные табуляции в литерале регулярного выражения игнорируются при использовании модификатора «/ x».
Ведущие вертикальные табуляции, отдельно или вместе с другими пробелами, теперь игнорируются, когда
интерпретация строки как числа. Например:
$ dec = "\ cK \ t 123";
$ hex = "\ cK \ t 0xF";
скажем 0 + $ dec; # был 0 с предупреждением, теперь 123
скажем int $ dec; # было 0, теперь 123
скажите oct $ hex; # было 0, теперь 15
"/ (? {}) /" и "/ (?? {}) /" встали на сторону было сильно переработан
Практически полностью переписана реализация этой функции. Хотя его
основная цель - исправить ошибки, некоторые поведения, особенно связанные с объемом лексического
переменные будут изменены. Более подробно это описано в разделе «Избранные исправления ошибок».
.
Ужесточение разбор of замена замена
Больше невозможно злоупотреблять тем, как парсер анализирует "s /// e" следующим образом:
% _ = (_, "Еще один");
$ _ = "Perl-хакер, \ n";
s // _} -> {_ / e; печать
"данный" сейчас псевдонимы Глобальный $_
Вместо присвоения неявному лексическому $ _, "given" теперь делает глобальный $ _ псевдонимом.
для его аргумента, точно так же, как "foreach". Однако он по-прежнему использует лексический $ _, если есть
лексический $ _ в области видимости (опять же, как "foreach") [perl # 114020].
The смартматч семья of функции сейчас экспериментальный
Умное совпадение, добавленное в версии 5.10.0 и значительно переработанное в версии 5.10.1, было обычным явлением.
пункт жалобы. Хотя есть несколько способов его использования,
также оказалось проблематичным и запутанным как для пользователей, так и для разработчиков Perl. Там есть
был внесен ряд предложений о том, как лучше всего решить эту проблему. Ясно, что
smartmatch почти наверняка либо изменится, либо исчезнет в будущем. Полагаясь
на его текущее поведение не рекомендуется.
Теперь предупреждения будут выдаваться, когда парсер видит «~~», «задано» или «когда». Отключить
эти предупреждения, вы можете добавить эту строку в соответствующую область:
нет, если $]> = 5.018, warnings => "экспериментальный :: smartmatch";
Однако подумайте о том, чтобы заменить использование этих функций, поскольку они могут снова изменить поведение.
прежде чем стать стабильным.
лексический $_ is сейчас экспериментальный
Поскольку он был представлен в Perl v5.10, он вызвал много путаницы без очевидных
решение:
· Различные модули (например, List :: Util) ожидают, что процедуры обратного вызова будут использовать глобальный $ _.
"использовать List :: Util 'first'; my $ _; first {$ _ == 1} @list" не работает, как обычно
ожидать.
· Объявление «my $ _» ранее в том же файле может вызывать запутанные предупреждения о закрытии.
· Символ прототипа подпрограммы "_" позволяет вызываемым подпрограммам получать доступ к вашему
лексический $ _, так что в конце концов он не совсем личный.
· Тем не менее, подпрограммы с прототипом "(@)" и методами не могут получить доступ к
лексический $ _ вызывающего абонента, если он не написан на XS.
· Но даже подпрограммы XS не могут получить доступ к объявленному лексическому значению $ _, а не к вызывающему
подпрограммы, но во внешней области, если эта подпрограмма не упоминала $ _ или
используйте любые операторы, которые по умолчанию равны $ _.
Мы надеемся, что лексический $ _ можно реабилитировать, но это может вызвать изменения в его
поведение. Пожалуйста, используйте его с осторожностью, пока он не станет стабильным.
readline () "$ / = \ N " сейчас читает N персонажи, N байт
Ранее при чтении из потока с такими уровнями ввода-вывода, как "кодирование", readline ()
функция, иначе известная как оператор "<>", будет читать N байты от самого верхнего
слой. [perl # 79960]
Теперь, N вместо этого читаются символы.
При чтении из потоков без дополнительных слоев поведение не меняется, так как
байты точно соответствуют символам.
Переопределено "шар" is сейчас приняло one аргумент
"glob" переопределения передавались магическим недокументированным вторым аргументом, который определял
звонящий. Ничто на CPAN не использовало это, и это помешало исправить ошибку, поэтому это было
удаленный. Если вам действительно нужно идентифицировать вызывающего, см. Devel :: Callsite на CPAN.
Здесь док разбор
Тело документа здесь внутри оператора, похожего на кавычки, теперь всегда начинается со строки
после "<
оператор, похожий на содержащие кавычки, но это было лишь иногда [perl # 114040].
алфавитно-цифровой Операторы обязательно сейчас be отделенный от закрывая ограничитель of регулярный выражения
Вы больше не можете писать что-то вроде:
м / а / и 1
Вместо этого вы должны написать
м / а / и 1
с пробелом, отделяющим оператор от закрывающего разделителя обычного
выражение. Отсутствие пробелов привело к предупреждению об устаревании, так как Perl
v5.14.0.
qw (...) нет дольше be использовал as скобки
Списки "qw", используемые для того, чтобы обмануть синтаксический анализатор, заставив думать, что они всегда окружены
скобки. Это позволило использовать некоторые неожиданные конструкции, такие как «foreach $ x qw (abc)
{...} ", которое на самом деле должно быть написано" foreach $ x (qw (abc)) {...} ".
иногда приводят лексер в неправильное состояние, поэтому они не работают полностью, и подобные
"foreach qw (abc) {...}", который, как можно было ожидать, разрешен, никогда не работал.
Этот побочный эффект «qw» теперь отменен. Он устарел с Perl
v5.13.11. Теперь необходимо использовать настоящие круглые скобки везде, где грамматика называет
для них.
Взаимодействие of лексический и по умолчанию предупреждение
Включение любых лексических предупреждений, используемых первыми, чтобы отключить все предупреждения по умолчанию, если лексические
предупреждения еще не были включены:
$ *; # предупреждение об устаревании
использовать предупреждения «недействительно»;
$ #; # недействительное предупреждение; нет предупреждения об устаревании
Теперь категории предупреждений «отладка», «устаревшие», «glob», «inplace» и «malloc» являются
оставлены включенными при включении лексических предупреждений (если они не выключены "без предупреждений", или
курс).
Это может вызвать появление предупреждений об устаревании в коде, который раньше не содержал предупреждений.
Это единственные категории, состоящие только из предупреждений по умолчанию. Предупреждения по умолчанию в
другие категории по-прежнему отключены "категорией предупреждений об использовании" ", поскольку у нас еще нет
инфраструктура для контроля индивидуальных предупреждений.
"штат суб " и "наш суб "
Из-за исторической случайности, «государственная подпрограмма» и «наша подписка» были эквивалентны простой «подпрограмме»,
так что можно даже создать анонимную подпрограмму с помощью «наш подпод {...}». Это сейчас
запрещено вне функции "lexical_subs". В рамках функции "lexical_subs" они
имеют новые значения, описанные в разделе «Лексические подпрограммы» в perlsub.
Определяемая ценности хранить in охрана окружающей среды принудительный в байт струны
Значение, хранящееся в переменной среды, всегда было преобразовано в строку при наследовании от
дочерние процессы.
В этом выпуске при назначении% ENV значения сразу же переводятся в строковую форму и преобразуются.
быть только байтовой строкой.
Во-первых, он должен быть только строкой. Тогда, если строка utf8 и эквивалент
работы "utf8 :: downgrade ()" используется этот результат; в противном случае эквивалент
Используется «utf8 :: encode ()», и выдается предупреждение о широких символах («Диагностика»).
"требовать" умирает для нечитаемый файлов
Когда "require" встречает нечитаемый файл, он умирает. Раньше он игнорировал файл и
продолжить поиск в каталогах в @INC [perl # 113422].
"gv_fetchmeth_ *" и СУПЕР
Различные функции XS "gv_fetchmeth_ *", используемые для обработки пакета, имя которого оканчивается на
Специально ":: СУПЕР". Поиск метода в пакете "Foo :: SUPER" будет рассматриваться как
Поиск метода "SUPER" в пакете "Foo". Это уже не так. Сделать "СУПЕР"
поиск, передайте тайник «Foo» и флаг «GV_SUPER».
"сплит" первый аргумент is больше последовательно интерпретированы
После некоторых изменений, внесенных ранее в v5.17, поведение "split" было упрощено: если
Аргумент PATTERN оценивается как строка, содержащая один пробел, он обрабатывается так, как
буквальный строка, содержащая один пробел, когда-то была.
Устаревание
Модули переезды
Следующие модули будут удалены из основного дистрибутива в будущем выпуске, а также
в это время необходимо будет установить из CPAN. Распределения на CPAN, требующие
эти модули должны будут указать их как предварительные условия.
Базовые версии этих модулей теперь будут выдавать предупреждения категории "устаревшие", чтобы предупредить
вы к этому факту. Чтобы отключить эти предупреждения об устаревании, установите соответствующие модули.
из CPAN.
Обратите внимание, что это (за редким исключением) прекрасные модули, которые вам рекомендуется
продолжать использовать. Их отстранение от ядра в первую очередь зависит от их необходимости
начальная загрузка полностью функциональной установки Perl с поддержкой CPAN, обычно не вызывающая беспокойства
над их дизайном.
кодирование
Использование этой прагмы сейчас категорически не рекомендуется. Он объединяет кодировку
исходный текст с кодировкой данных ввода / вывода, переинтерпретирует escape-последовательности в источнике
text (сомнительный выбор) и вводит ошибку UTF-8 во всю обработку во время выполнения
строки символов. Он сломан в соответствии с конструкцией и не подлежит ремонту.
Для использования буквальных символов, отличных от ASCII, в исходном тексте см. Utf8. Для
имея дело с текстовыми данными ввода / вывода, обратитесь к разделу «Кодирование и открытие».
Архив :: Извлечь
B :: Lint
B :: Lint :: Отладка
CPANPLUS и все включенные модули "CPANPLUS :: *"
Devel :: InnerPackage
Журнал :: Сообщение
Журнал :: Сообщение :: Конфиг
Журнал :: Сообщение :: Обработчики
Журнал :: Сообщение :: Элемент
Журнал :: Сообщение :: Простой
Модуль :: Подключаемый
Модуль :: Подключаемый модуль :: Объект
Объект :: Аксессор
Под :: LaTeX
Срок :: UI
Срок :: UI :: История
Устаревшее Утилиты
Следующие утилиты будут удалены из основного дистрибутива в будущем выпуске как
связанные с ними модули устарели. Они останутся доступными с
применимое распределение CPAN.
cpanp
"cpanp-run-perl"
cpan2dist
Эти предметы являются частью раздачи «CPANPLUS».
pod2латекс
Этот элемент является частью дистрибутива "Pod :: LaTeX".
PL_sv_objcount
Эта глобальная переменная интерпретатора используется для отслеживания общего количества объектов Perl в
устный переводчик. Он больше не поддерживается и будет полностью удален в Perl v5.20.
Пять дополнительный символы должен be спасся in паттеранами "/Икс"
Когда шаблон регулярного выражения компилируется с "/ x", Perl рассматривает 6 символов как белый цвет.
пробел, который нужно игнорировать, например ПРОБЕЛ и ТАБУЛЯЦИЯ. Однако Unicode рекомендует использовать 11 символов.
обращаются таким образом. Мы согласимся с этим в будущей версии Perl. А пока используйте
Любой из отсутствующих символов вызовет предупреждение об устаревании, если он не отключен. В
пять символов:
U + 0085 СЛЕДУЮЩАЯ СТРОКА
U + 200E МАРКА СЛЕВА НАПРАВО
U + 200F ПРАВО НАЛЕВА
СЕПАРАТОР ЛИНИИ U + 2028
U + 2029 РАЗДЕЛИТЕЛЬ ПАРАМЕТРОВ
Определяемые пользователем имена персонажей удивительный пробельные
Пользовательское имя символа с завершающим или несколькими пробелами в строке, скорее всего, является опечаткой.
Теперь при его определении генерируется предупреждение, при условии, что его использование будет
вряд ли будет включать лишние пробелы.
Различный XS-вызываемый Функции сейчас устарела
Все функции, используемые для классификации персонажей, будут удалены из будущей версии
Perl, и его не следует использовать. С участвующими компиляторами C (например, gcc) компиляция любых
файл, который использует любой из них, выдаст предупреждение. Они не предназначались для публичных
использовать; для большинства из них есть эквивалентные, более быстрые макросы.
См. «Классы символов» в perlapi. Полный список:
"is_uni_alnum", "is_uni_alnumc", "is_uni_alnumc_lc", "is_uni_alnum_lc", "is_uni_alpha",
"is_uni_alpha_lc", "is_uni_ascii", "is_uni_ascii_lc", "is_uni_blank", "is_uni_blank_lc",
"is_uni_cntrl", "is_uni_cntrl_lc", "is_uni_digit", "is_uni_digit_lc", "is_uni_graph",
"is_uni_graph_lc", "is_uni_idfirst", "is_uni_idfirst_lc", "is_uni_lower",
"is_uni_lower_lc", "is_uni_print", "is_uni_print_lc", "is_uni_punct", "is_uni_punct_lc",
"is_uni_space", "is_uni_space_lc", "is_uni_upper", "is_uni_upper_lc", "is_uni_xdigit",
"is_uni_xdigit_lc", "is_utf8_alnum", "is_utf8_alnumc", "is_utf8_alpha", "is_utf8_ascii",
"is_utf8_blank", "is_utf8_char", "is_utf8_cntrl", "is_utf8_digit", "is_utf8_graph",
"is_utf8_idcont", "is_utf8_idfirst", "is_utf8_lower", "is_utf8_mark",
"is_utf8_perl_space", "is_utf8_perl_word", "is_utf8_posix_digit", "is_utf8_print",
is_utf8_punct, is_utf8_space, is_utf8_upper, is_utf8_xdigit, is_utf8_xidcont,
"is_utf8_xidfirst".
Кроме того, устарели эти три функции, которые никогда не работали должным образом:
to_uni_lower_lc, to_uni_title_lc и to_uni_upper_lc.
Некоторые редкий использования of обратная косая черта одной регулярные выражения сейчас устарела
Есть три пары символов, которые Perl распознает как метасимволы в обычных
шаблоны выражений: «{}», «[]» и «()». Их также можно использовать для разграничения шаблонов,
как в:
м {фу}
s (foo) (бар)
Поскольку они являются метасимволами, они имеют особое значение для шаблонов регулярных выражений,
и оказывается, что вы не можете отключить это особое значение обычными средствами
перед ними обратная косая черта, если вы используете их в паре, в шаблоне, ограниченном
их. Например, в
м {фу \ {1,3 \}}
обратная косая черта не меняет поведения, и это соответствует "fo", за которым следует единица,
еще три появления «о».
Подобные использования, когда они интерпретируются как метасимволы, чрезвычайно редки; мы
думаю, их нет, например, во всем CPAN. Следовательно, это устаревание должно повлиять на
очень мало кода. Однако он дает уведомление о том, что любой такой код необходимо изменить, что
в свою очередь позволит нам изменить поведение в будущих версиях Perl, чтобы
обратная косая черта имеет эффект, и, не опасаясь, что мы молча нарушаем все существующие
код.
расщепляющий лексемы "(?" и "(*" in регулярный выражения
Теперь появляется предупреждение об устаревании, если символы "(" и "?" Разделены пробелом или
комментарии в конструкциях регулярных выражений "(? ...)". Точно так же, если "(" и "*"
разделены конструкциями "(* VERB ...)".
Pre-PerlIO IO реализации
Теоретически в настоящее время вы можете создавать Perl без PerlIO. Вместо этого вы бы использовали обертку
вокруг stdio или sfio. На практике это не очень полезно. Это плохо протестировано, и
без какой-либо поддержки уровней ввода-вывода или (таким образом) Unicode, это не так уж и много Perl. Строительство
без PerlIO, скорее всего, будет удален в следующей версии perl.
PerlIO поддерживает слой "stdio", если требуется использование stdio. Точно так же слой SFIO может быть
производим в будущем, если потребуется.
Будущее Устаревание
· Платформы без инфраструктуры поддержки
Как Windows CE, так и z / OS исторически не обслуживались и в настоящее время
ни успешно строить, ни регулярно проходить дымовые испытания. Усилия продолжаются
чтобы изменить эту ситуацию, но не следует считать само собой разумеющимся, что платформы
безопасны и поддерживаются. Если они не становятся пригодными для изготовления и регулярно курят, поддержите
поскольку они могут быть активно удалены в будущих выпусках. Если вы заинтересованы в этих
платформ, и вы можете предоставить свое время, опыт или оборудование для поддержки этих
платформ, сообщите об этом разработчикам Perl по электронной почте
"[электронная почта защищена]".
Некоторые платформы, которые в остальном кажутся полностью мертвыми, также включены в короткий список для
удаление между настоящим моментом и v5.20.0:
DG / UX
NeXT
Мы также считаем вероятным, что текущие версии Perl больше не будут собирать AmigaOS,
DJGPP, NetWare (изначально), OS / 2 и Plan 9. Если вы используете Perl на такой платформе
и заинтересованы в обеспечении будущего Perl для них, пожалуйста, свяжитесь с нами.
Мы считаем, что Perl уже давно не может строить на архитектурах со смешанным порядком байтов (например,
как PDP-11) и намерены удалить весь оставшийся код поддержки. Аналогично код
поддержка долго не поддерживаемого GNU dld будет скоро удалена, если никто не сделает
сами известны как активный пользователь.
· Обмен $ <и $>
Perl поддерживает идиому замены $ <и $> (а также $ (и $)) на
временно отключите разрешения с версии 5.0, например:
($ <, $>) = ($>, $ <);
Однако эта идиома изменяет реальный идентификатор пользователя / группы, что может иметь нежелательные побочные эффекты.
эффекты, больше не используется на любой платформе, которую поддерживает Perl, и усложняет
реализация этих переменных и назначение списков в целом.
В качестве альтернативы рекомендуется присваивать только $>:
местный $> = $ <;
См. Также: Setuid Demystifiedhttp://www.cs.berkeley.edu/~daw/papers/setuid-
usenix02.pdf>.
· "Microperl", давно сломанный и неясного для настоящего назначения, будет удален.
· Изменение семантики "\ Q" в строках, заключенных в двойные кавычки, в сочетании с другими escape-символами.
Есть несколько ошибок и несоответствий, связанных с комбинациями "\ Q" и escape-символов.
например, «\ x», «\ L» и т. д. в паре «\ Q ... \ E». Это необходимо исправить, и при этом
обязательно изменит текущее поведение. Изменения пока не внесены.
· Использование $ x, где "x" означает любой фактический (непечатаемый) управляющий символ C0, будет
запрещено в будущей версии Perl. Вместо этого используйте "$ {x}" (где снова "x" означает
управляющий символ) или, что лучше, $ ^ A, где «^» - символ вставки (CIRCUMFLEX ACCENT), а «A»
обозначает любой из символов, перечисленных в конце "РАЗЛИЧИЯ ОПЕРАТОРА" в
неприятный.
Эффективности Улучшения
· Списки объявлений лексических переменных ("my ($ x, $ y)") теперь оптимизированы до
single op и, следовательно, быстрее, чем раньше.
· Новое определение препроцессора C "NO_TAINT_SUPPORT" было добавлено, если оно установлено, отключает Perl
испорченная поддержка вообще. Использование флагов командной строки -T или -t приведет к фатальному
ошибка. Помните, что оба основных теста, а также тесты многих дистрибутивов CPAN будут
потерпеть неудачу с этим изменением. С другой стороны, это дает небольшое преимущество в производительности за счет
уменьшенное ветвление.
Do включить этой если не знают точно, почему получающий себя в.
· "Pack" с постоянными аргументами теперь в большинстве случаев сворачивается константами [perl # 113470].
· Ускорение сопоставления регулярных выражений со свойствами Unicode. Самый большой выигрыш
для "\ X", Unicode "расширенный кластер графем". Прирост для него составляет около 35% -
40%. Классы символов в квадратных скобках, например "[0-9 \ x {100}]", содержащие кодовые точки выше
255 теперь тоже быстрее.
· На платформах, поддерживающих его, несколько прежних макросов теперь реализованы как статические встроенные
функции. Это должно немного ускорить работу на платформах, отличных от GCC.
· Оптимизация хэшей в логическом контексте была расширена, чтобы повлиять на
"скаляр (% hash)", "% hash? ...: ..." и "sub {% hash || ...}".
· Операторы Filetest управляют стеком несколько более эффективно.
· Глобусы, используемые в числовом контексте, теперь в большинстве случаев нумеруются напрямую, а не
нумифицируются с помощью стрингификации.
· Оператор повторения "x" теперь сводится к единственной константе во время компиляции, если
вызывается в скалярном контексте с постоянными операндами и без круглых скобок слева
операнд.
Модули и Прагмата
Новое Модули и Прагмата
· Config :: Perl :: V версии 0.16 был добавлен как модуль двойного назначения. Это обеспечивает
получение структурированных данных вывода "perl -V", включая информацию, известную только
двоичный файл "perl" и недоступен через Config.
обновлено Модули и Прагмата
Чтобы получить полный список обновлений, запустите:
$ corelist --diff 5.16.0 5.18.0
Вы также можете заменить 5.16.0 своей любимой версией.
· Archive :: Extract обновлен до 0.68.
Обойдите крайний случай в Linux с помощью распаковки Busybox.
· Архив :: Tar был обновлен до 1.90.
ptar теперь поддерживает параметр -T, а также параметры без тире [rt.cpan.org # 75473],
[rt.cpan.org # 75475].
Автоматическое кодирование имен файлов, помеченных как UTF-8 [rt.cpan.org # 75474].
Не используйте "tell" для дескрипторов IO :: Zlib [rt.cpan.org # 64339].
Не пытайтесь использовать символические ссылки.
· Autodie обновлен до 2.13.
«autodie» теперь прекрасно сочетается с директивой «open».
· B повышен до 1.42.
Добавлен метод «stashoff» КС. Это обеспечивает доступ к внутреннему
поле добавлено в Perl 5.16 в разделах с последовательными сборками [perl # 113034].
«B :: COP :: stashpv» теперь поддерживает имена пакетов UTF-8 и встроенные NUL.
Все значения флагов «CVf_ *», «GVf_ *» и другие, связанные с SV, теперь представлены как константы.
в пространстве имен «B ::» и доступен для экспорта. В списке экспорта по умолчанию нет
изменилось.
Это заставляет модуль работать с новым API пэдов.
· B :: Concise обновлен до 0.95.
Опция "-nobanner" была исправлена, и теперь "форматы" могут быть выгружены. Когда прошел
sub name для дампа, он также проверит, является ли это именем формата. Если
sub и формат имеют одно и то же имя, он сбросит оба.
Это добавляет поддержку новых флагов «OpMAYBE_TRUEBOOL» и «OPpTRUEBOOL».
· B :: Debug обновлен до 1.18.
Это добавляет поддержку (экспериментально) для «B :: PADLIST», который был добавлен в Perl 5.17.4.
· B :: Deparse был обновлен до 1.20.
Избегайте предупреждений при запуске под "perl -w".
Теперь он удаляет элементы управления циклом с правильным приоритетом и несколько операторов в
строка "формата" также теперь выводится правильно.
В этом выпуске в форматах не используются конечные точки с запятой.
В этом выпуске добавлено удаление заглушек для лексических подпрограмм.
Он больше не умирает при отправке "sort" без аргументов. Теперь он правильно опускает
запятая для "system $ prog @args" и "exec $ prog @args".
· Bignum, bigint и bigrat были обновлены до 0.33.
Переопределения для "hex" и "oct" были переписаны, что устраняет несколько проблем,
и внесение одного несовместимого изменения:
· Раньше, какое бы выражение из "use bigint" или "use bigrat" ни скомпилировалось позже, принимало
приоритет над другим, в результате чего "hex" и "oct" не уважают другую прагму
когда в сфере.
· Использование любой из этих трех прагмат вызовет "hex" и "oct" где-нибудь еще в
программа для оценки их аргументов в контексте списка и предотвращения их
вывод $ _ при вызове без аргументов.
· Использование любой из этих трех прагмат приведет к тому, что "oct (" 1234 ")" вернет 1234 (для любого
номер, не начинающийся с 0) в любом месте программы. Сейчас переведено "1234"
от восьмеричного к десятичному, независимо от того, находится ли в области прагмы или нет.
· Глобальные переопределения, которые облегчают лексическое использование "hex" и "oct", теперь уважают
любые существующие переопределения, которые были на месте до установки новых переопределений,
возвращение к ним за пределами области "use bignum".
· "Use bignum" hex "", "use bignum" oct "" и подобные вызовы для bigint и
bigrat теперь экспортирует функцию "hex" или "oct" вместо предоставления глобального
переопределить.
· Карп обновлен до 1.29.
Карпа больше не путает, когда "вызывающий" возвращает undef для пакета, который был
удален.
Функции longmess () и shortmess () теперь задокументированы.
· CGI обновлен до 3.63.
Нераспознанные escape-последовательности HTML теперь обрабатываются лучше, трейлинг проблематичен.
новые строки больше не вставляются после теги "startform ()" или "start_form ()",
и ложные предупреждения "Небезопасная зависимость", появляющиеся в некоторых версиях perl, теперь
работал.
· Class :: Struct обновлен до 0.64.
Конструктор теперь учитывает переопределенные методы доступа [perl # 29230].
· Compress :: Raw :: Bzip2 обновлен до 2.060.
Исправлено неправильное использование "волшебного" API Perl.
· Compress :: Raw :: Zlib обновлен до 2.060.
Обновите zlib из комплекта поставки до версии 1.2.7.
Устранение сбоев сборки на Irix, Solaris и Win32, а также при сборке на C ++
[rt.cpan.org # 69985], [rt.cpan.org # 77030], [rt.cpan.org # 75222].
Исправлено неправильное использование "волшебного" API Perl.
"compress ()", "uncompress ()", "memGzip ()" и "memGunzip ()" были ускорены на
сделать проверку параметров более эффективной.
· CPAN :: Meta :: Requirements обновлен до 2.122.
Обрабатывать требования undef для from_string_hash как 0 (с предупреждением).
Добавлен метод "requirements_for_module".
· CPANPLUS обновлен до 0.9135.
Разрешить добавление блиб / скрипт в ПУТЬ.
Сохраните историю между вызовами оболочки.
Лучше обрабатывать несколько аргументов makemakerargs и makeflags.
Это решает проблемы с исходным механизмом SQLite.
· Data :: Dumper обновлен до 2.145.
Он был оптимизирован для построения только скалярного хеш-кода по мере необходимости, тем самым ускоряя
резко увеличить сериализацию.
Были добавлены дополнительные тесты, чтобы улучшить оператор, ветвь, условие и
подпрограмма покрытия. На основе анализа покрытия некоторые внутренние компоненты
Был произведен рефакторинг Dumper.pm. Практически все методы теперь задокументированы.
· DB_File обновлен до 1.827.
Основной модуль Perl больше не использует конструкцию «@_».
· Devel :: Peek обновлен до 1.11.
Это исправляет компиляцию с компиляторами C ++ и заставляет модуль работать с новой панелью.
API.
· Digest :: MD5 обновлен до 2.52.
Исправьте объектно-ориентированный откат "Digest :: Perl :: MD5" [rt.cpan.org # 66634].
· Digest :: SHA обновлен до 5.84.
Это исправляет ошибку двойного освобождения, которая в некоторых случаях могла вызвать уязвимости.
· DynaLoader обновлен до 1.18.
Это связано с незначительным изменением кода в XS для реализации VMS.
Это устраняет предупреждения об использовании разделов «КОД» без раздела «ВЫВОД».
· Encode обновлен до 2.49.
Добавлен псевдоним Mac x-mac-ce, и в
Кодировать :: Unicode, Encode :: UTF7 и Encode :: GSM0338.
· Env обновлен до 1.04.
Его реализация SPLICE больше не ведет себя неправильно в контексте списка.
· ExtUtils :: CBuilder обновлен до 0.280210.
Файлы манифеста теперь правильно встроены для тех версий VC ++, которые используют
их. [perl # 111782, # 111798].
Список символов для экспорта теперь можно передать в "link ()" в Windows, как и в других
Операционные системы [perl # 115100].
· ExtUtils :: ParseXS обновлен до 3.18.
Сгенерированный код C теперь избегает ненужного увеличения "PL_amagic_generation" на
Версии Perl, где это делается автоматически (или на текущем Perl, где переменная no
уже существует).
Это позволяет избежать ложного предупреждения об инициализированных не параметрах XSUB [perl # 112776].
· File :: Copy обновлен до 2.26.
«copy ()» больше не обнуляет файлы при копировании в тот же каталог, а также теперь
терпит неудачу (как это было давно задокументировано) при попытке скопировать файл поверх
себя.
· File :: DosGlob обновлен до 1.10.
Внутренний кеш имен файлов, который он хранит для каждого вызывающего абонента, теперь освобождается, когда это
вызывающий абонент освобожден. Это означает, что «использовать File :: DosGlob 'glob'; eval 'scalar <*>'» больше нельзя.
утечка памяти.
· File :: Fetch был обновлен до версии 0.38.
Добавлена опция file_default для URL-адресов, не имеющих файлового компонента.
Используйте «File :: HomeDir», когда доступно, и укажите «PERL5_CPANPLUS_HOME», чтобы переопределить
автоопределение.
Всегда получать повторно ЧЕКОВ если установлен "fetchdir".
· File :: Find обновлен до 1.23.
Это устраняет несогласованную обработку путей unixy на VMS.
Отдельные файлы теперь могут отображаться в списке каталогов для поиска [perl # 59750].
· File :: Glob обновлен до 1.20.
File :: Glob имеет то же самое исправление, что и File :: DosGlob. Поскольку это то, что принадлежит Perl
Сам оператор "glob" использует (кроме VMS), это означает, что "eval 'scalar <*>'" больше не
Утечки.
Список шаблонов, разделенных пробелами, возвращает длинные списки результатов, которые больше не приводят к
повреждение памяти или сбои. Эта ошибка появилась в Perl 5.16.0. [perl # 114984]
· File :: Spec :: Unix обновлен до версии 3.40.
"abs2rel" может давать неверные результаты, если задано два относительных пути или корень
каталог дважды [perl # 111510].
· File :: stat был обновлен до 1.07.
"File :: stat" игнорирует прагму filetest и предупреждает при использовании в комбинации
вместе с тем. Но это не было предупреждением для "-r". Это было исправлено [perl # 111640].
"-p" теперь работает и не возвращает false для каналов [perl # 111638].
Ранее перегруженные операторы "-x" и "-X" в "File :: stat" не давали правильных
результаты для каталогов или исполняемых файлов при запуске от имени пользователя root. Они были
обработка разрешений на исполняемые файлы для root так же, как и для любого другого пользователя, выполнение
тесты на членство в группах и т.д для файлов, не принадлежащих root. Теперь они следуют правильному
Поведение Unix - для каталога они всегда верны, а для файла, если любое из
устанавливаются три бита разрешения на выполнение, после чего они сообщают, что root может выполнить файл.
Встроенные в Perl операторы «-x» и «-X» всегда были правильными.
· File :: Temp обновлен до 0.23
Исправляет различные ошибки, связанные с удалением каталога. Откладывает отключение временных файлов, если
первоначальное отключение не выполняется, что устраняет проблемы с NFS.
· GDBM_File обновлен до 1.15.
Недокументированный необязательный пятый параметр "TIEHASH" был удален. Это было
предназначен для управления обратным вызовом, используемым функциями "gdbm *" в случае фатального
ошибки (например, проблемы с файловой системой), но не работали (и никогда не могли работать).
Ни один код на CPAN даже не пытался его использовать. Обратный вызов теперь всегда предыдущий
по умолчанию "квакать". Проблемы на некоторых платформах с функцией "кваканья" "C"
называется также были решены.
· Hash :: Util был обновлен до 0.15.
"hash_unlocked" и "hashref_unlocked" теперь возвращают истину, если хеш разблокирован,
вместо того, чтобы всегда возвращать false [perl # 112126].
"hash_unlocked", "hashref_unlocked", "lock_hash_recurse" и "unlock_hash_recurse" являются
теперь можно экспортировать [perl # 112126].
Были добавлены две новые функции, hash_locked и hashref_locked. Довольно странно,
эти две функции уже были экспортированы, хотя их не было [perl
№ 112126].
· HTTP :: Tiny был обновлен до 0.025.
Добавьте функции проверки SSL [github # 6], [github # 9].
Включите конечный URL в хэш-адрес ответа.
Добавьте опцию "local_address".
Это улучшает поддержку SSL.
· IO обновлен до 1.28.
"sync ()" теперь может быть вызван для дескрипторов файлов, доступных только для чтения [perl # 64772].
IO :: Socket изо всех сил пытается кэшировать или иным образом получить информацию о сокете.
· IPC :: Cmd был обновлен до 0.80.
Используйте «POSIX :: _ exit» вместо «exit» в «run_forked» [rt.cpan.org # 76901].
· IPC :: Open3 обновлен до 1.13.
Функция «open3 ()» больше не использует «POSIX :: close ()» для закрытия файловых дескрипторов, поскольку
что нарушает подсчет ссылок файловых дескрипторов, выполняемый PerlIO в тех случаях, когда
файловые дескрипторы используются потоками PerlIO, что приводит к попыткам закрыть файл
дескрипторы во второй раз, когда любые такие потоки PerlIO будут закрыты позже.
· Locale :: Codes обновлен до 3.25.
Он включает в себя несколько новых кодов.
· Memoize обновлен до 1.03.
Исправьте опцию кеширования "MERGE".
· Module :: Build обновлен до 0.4003.
Исправлена ошибка, из-за которой модули без $ VERSION могли иметь версию '0', указанную в
'предоставляет' метаданные, которые будут отклонены PAUSE.
Исправлена ошибка в PodParser, позволяющая использовать числа в именах модулей.
Исправлена ошибка, из-за которой двукратное указание аргументов приводило к тому, что они становились массивами, что приводило к
установить такие пути, как МНОЖЕСТВО(0xdeadbeef) /lib/Foo.pm.
Небольшое исправление ошибки позволяет использовать разметку вокруг ведущего «Name» в «аннотации» POD.
line, и были внесены некоторые улучшения в документацию.
· Module :: CoreList обновлен до 2.90
Информация о версии теперь хранится в виде дельты, что значительно уменьшает размер файла.
CoreList.pm .
Это восстанавливает совместимость со старыми версиями perl и очищает основной список.
данные для различных модулей.
· Module :: Load :: Conditional был обновлен до 0.54.
Исправьте использование «требует» в perls, установленном на путь с пробелами.
Различные улучшения включают новое использование Module :: Metadata.
· Module :: Metadata обновлен до 1.000011.
Ускорено создание объекта Module :: Metadata для типичного файла модуля.
примерно на 40%, а некоторые ложные предупреждения о $ VERSION были подавлены.
· Module :: Pluggable обновлен до 4.7.
Помимо других изменений, теперь разрешены триггеры для событий, что дает мощный способ
чтобы изменить поведение.
· Net :: Ping обновлен до 2.41.
Это исправляет некоторые сбои тестов в Windows.
· Код операции обновлен до 1.25.
Отражайте удаление кода операции boolkeys и добавление clonecv, introcv
и коды операций padcv.
· Перегрузка обновлена до 1.22.
«без перегрузки» теперь предупреждает о недопустимых аргументах, как и «использовать перегрузку».
· PerlIO :: encoding обновлен до 0.16.
Это модуль, реализующий уровень ввода-вывода ": encoding (...)". Больше не развращает
память или сбой, когда серверная часть кодирования перераспределяет буфер или дает ему
typeglob или скаляр с общим хеш-ключом.
· PerlIO :: scalar был обновлен до 0.16.
Поставляемый скаляр буфера теперь может содержать только кодовые точки 0xFF или ниже. [perl
# 109828]
· Perl :: OSType обновлен до 1.003.
Это исправляет ошибку при обнаружении операционной системы VOS.
· Pod :: Html обновлен до 1.18.
Параметр "--libpods" восстановлен. Он устарел, и его использование ничего не дает
кроме предупреждения о том, что он больше не поддерживается.
Поскольку HTML-файлы, сгенерированные pod2html, утверждают, что имеют кодировку UTF-8, на самом деле
напишите файлы, используя UTF-8 [perl # 111446].
· Pod :: Simple обновлен до 3.28.
Были внесены многочисленные улучшения, в основном в Pod :: Simple :: XHTML, который также имеет
изменение совместимости: опция "codes_in_verbatim" по умолчанию отключена. Видеть
cpan / Pod-Simple / ChangeLog для получения полной информации.
· Re повышен до 0.23
Одиночные символы [классы], такие как «/ [s] /» или «/ [s] / i», теперь оптимизированы, как если бы они были
не иметь скобок, например «/ s /» или «/ s / i».
См. Примечание об "op_comp" в разделе "Внутренние изменения" ниже.
· Сейф обновлен до 2.35.
Исправлено взаимодействие с «Devel :: Cover».
Не оценивайте код под «без строгих требований».
· Scalar :: Util обновлен до версии 1.27.
Исправьте проблему с перегрузкой "sum".
"first" и "reduce" теперь сначала проверяют обратный вызов (поэтому &первый(1) запрещено).
Исправьте "испорченные" магические значения [rt.cpan.org # 55763].
Исправьте "сумму" ранее магических значений [rt.cpan.org # 61118].
Исправить чтение после конца фиксированного буфера [rt.cpan.org # 72700].
· Search :: Dict обновлен до 1.07.
Больше не требуется "stat" для дескрипторов файлов.
Используйте "fc" для раскладывания корпуса.
· Socket обновлен до 2.009.
Константы и функции, необходимые для членства в исходной группе многоадресной IP-рассылки, были
добавлен.
unpack_sockaddr_in () и unpack_sockaddr_in6 () теперь возвращают только IP-адрес в
скалярный контекст, и "inet_ntop ()" теперь защищает от скаляров некорректной длины,
прошел внутрь.
Это исправляет неинициализированное чтение памяти.
· Storable был обновлен до 2.41.
Изменение $ _ [0] в "STORABLE_freeze" больше не приводит к сбоям [perl # 112358].
Объект, класс которого реализует STORABLE_attach, теперь размораживается только один раз, когда есть
- это множественные ссылки на него в оттаиваемой структуре [perl # 111918].
Ограниченные хэши не всегда размораживались правильно [perl # 73972].
Storable будет квакать при замораживании благословенного объекта REF с помощью STORABLE_freeze ()
метод [perl # 113880].
Теперь он может правильно замораживать и размораживать струны. Это вызывает небольшую несовместимость
изменить формат хранения, поэтому версия формата увеличилась до 2.9.
Он содержит различные исправления ошибок, в том числе исправления совместимости для более старых версий
Обработка Perl и vstring.
· Sys :: Syslog был обновлен до 0.32.
Он содержит несколько исправлений ошибок, связанных с getservbyname (), setlogsock () и log
уровней в "syslog ()" вместе с исправлениями для Windows, Haiku-OS и GNU / kFreeBSD. Видеть
cpan / Sys-Syslog / Изменения для получения полной информации.
· Term :: ANSIColor обновлен до 4.02.
Добавьте поддержку курсива.
Улучшение обработки ошибок.
· Term :: ReadLine обновлен до 1.10. Это исправляет использование CPAN и cpanp
оболочки в Windows в случае, если текущий диск содержит \ dev \ tty
.
· Test :: Harness был обновлен до 3.26.
Исправьте семантику glob в Win32 [rt.cpan.org # 49732].
Не используйте Win32 :: GetShortPathName при вызове perl [rt.cpan.org # 47890].
Игнорируйте -T при чтении shebang [rt.cpan.org # 64404].
Более изящно обработайте случай, когда мы не знаем статус ожидания теста.
Сделайте строку «ОК» сводной информации о тесте переопределяемой, чтобы ее можно было заменить на подключаемый модуль для
сделать вывод доказательства идемпотентности.
Не запускайте файлы с возможностью записи для всех.
· Text :: Tabs и Text :: Wrap обновлены до версии 2012.0818. Поддержка Unicode
К ним обоим добавлено комбинирование персонажей.
· Thread :: shared был обновлен до 1.31.
Это добавляет возможность предупреждать или игнорировать попытки клонирования структур, которые не могут
быть клонированным, а не просто безоговорочно умереть в этом случае.
Это добавляет поддержку двухзначных значений, созданных Scalar :: Util :: dualvar.
· Tie :: StdHandle обновлен до 4.3.
"READ" теперь учитывает аргумент смещения до "read" [perl # 112826].
· Time :: Local был обновлен до 1.2300.
Значения секунд больше 59, но меньше 60 больше не вызывают "timegm ()" и
"timelocal ()" квакать.
· Unicode :: UCD был обновлен до 0.53.
Это добавляет функцию all_casefolds () который возвращает все casefolds.
· Win32 обновлен до 0.47.
Добавлены новые API для получения и настройки текущей кодовой страницы.
удален Модули и Прагмата
· Версия :: Требования была удалена из основного дистрибутива. Это доступно
под другим именем: CPAN :: Meta :: Requirements.
Документация
изменения в Существующий Документация
перлчит
· Perlcheat был реорганизован, и было добавлено несколько новых разделов.
Perldata
· Теперь явно документирует поведение списков хеш-инициализаторов, содержащих
дубликаты ключей.
Perldiag
· Объяснение символических ссылок, запрещенных "строгими ссылками", теперь не
Предположим, что читатель знает, что такое символические ссылки.
Perlfaq
· Perlfaq синхронизирован с версией 5.0150040 из CPAN.
Perlfunc
· Возвращаемое значение "pipe" теперь задокументировано.
· Уточненная документация «нашего».
перлоп
· Глаголы управления циклом («dump», «goto», «next», «last» и «redo») всегда имели
тот же приоритет, что и у операторов присваивания, но это не было задокументировано до сих пор.
Диагностика
Следующие дополнения или изменения были внесены в диагностический вывод, включая предупреждения.
и сообщения о фатальных ошибках. Полный список диагностических сообщений см. В perldiag.
Новое Диагностика
Новое ошибки
· Незаконченный разделитель для документа "здесь"
Это сообщение теперь появляется, когда метка документа здесь имеет начальную кавычку, но
последняя кавычка отсутствует.
Это заменяет ложное и вводящее в заблуждение сообщение об ошибке о том, что не удалось найти сам ярлык.
[perl # 114104].
· Паника: дочерний псевдопроцесс никогда не планировался
Эта ошибка возникает, когда дочерний псевдопроцесс в реализации ithreads на
Windows не была запланирована в течение разрешенного периода времени и поэтому не могла
правильно инициализировать [perl # 88840].
· Имя группы должно начинаться с нецифрового символа слова в регулярном выражении; отмечены <- ЗДЕСЬ в
РС/
Эта ошибка была добавлена для "(? & 0)", что является недопустимым. Раньше он производил
непонятное сообщение об ошибке [perl # 101666].
· Невозможно использовать неопределенное значение в качестве ссылки на подпрограмму
Вызов неопределенного значения в качестве подпрограммы теперь вызывает это сообщение об ошибке. Он использовал
to, но был случайно отключен, сначала в Perl 5.004 для немагических переменных, и
затем в Perl v5.14 для магических (например, связанных) переменных. Сейчас он восстановлен. В
в среднем undef обрабатывался как пустая строка [perl # 113576].
· Экспериментальные подпрограммы "% s" не включены
Чтобы использовать лексические подпрограммы, вы должны сначала включить их:
без предупреждений 'экспериментальный :: lexical_subs';
использовать функцию lexical_subs;
my sub foo {...}
Новое Предупреждения
· «Строки с кодовыми точками более 0xFF могут не отображаться в дескрипторы файлов в памяти»
· '% S' преобразован в '\ o {% s}% d'
· «Конечный пробел в определении псевдонима charnames устарел»
· «Последовательность из нескольких пробелов в определении псевдонима charnames устарела»
· 'Передача искаженного UTF-8 в "% s" устарела'
· Подпрограмма "&% s" недоступна
(Замыкание W) Во время компиляции внутренняя именованная подпрограмма или eval пытается
захватить внешнюю лексическую подпрограмму, которая в настоящее время недоступна. Это может случиться
по одной из двух причин. Во-первых, лексическая подпрограмма может быть объявлена во внешнем
анонимная подпрограмма, которая еще не была создана. (Помните, что именованные подпрограммы
создаются во время компиляции, в то время как анонимные подпрограммы создаются во время выполнения.) Например,
sub {моя подписка a {...} подписка f {\ & a}}
Во время создания f он не может захватить текущую подпрограмму "a", так как
анонимная подпрограмма еще не создана. И наоборот, следующее не даст
предупреждение, поскольку анонимная подпрограмма уже создана и работает:
sub {my sub a {...} eval 'sub f {\ & a}'} -> ();
Вторая ситуация вызвана доступом eval к переменной, которая вышла из
объем, например,
суб е {
моя подписка {...}
sub {eval '\ & a'}
}
f () -> ();
Здесь, когда '\ & a' в eval компилируется, f () в настоящее время не выполняется.
выполняется, поэтому его & a недоступно для захвата.
· Подпрограмма "% s" &% s маскирует более раннее объявление в том же% s
(W разное) Подпрограмма "мое" или "состояние" была повторно объявлена в текущей области или
оператор, эффективно устраняющий любой доступ к предыдущему экземпляру. Это
почти всегда опечатка. Обратите внимание, что предыдущая подпрограмма по-прежнему
существуют до конца области или до тех пор, пока все ссылки на нее не будут уничтожены.
· Функция% s является экспериментальной
(S экспериментально) Это предупреждение появляется, если вы включаете экспериментальную функцию через
"использовать функцию". Просто подавите предупреждение, если вы хотите использовать эту функцию, но знайте
что при этом вы рискуете использовать экспериментальную функцию, которая может
изменить или удалить в будущей версии Perl:
нет предупреждений "экспериментальный :: lexical_subs";
использовать функцию «lexical_subs»;
· Сон (% u) слишком большой
(W переполнение) Вы вызвали "сон" с числом, которое было больше, чем оно может надежно
ручка и "сон", вероятно, спали меньше времени, чем требовалось.
· Широкий символ в setenv
Попытки поместить широкие символы в переменные окружения через% ENV теперь провоцируют это.
предупреждение.
· "Недействительное отрицательное число (% s) в chr"
«chr ()» теперь предупреждает при передаче отрицательного значения [perl # 83048].
· «Целочисленное переполнение в srand»
«srand ()» теперь предупреждает, когда передано значение, не вписывающееся в «UV» (поскольку значение
будет усечен, а не переполнен) [perl # 40605].
· "-I используется без имен файлов в командной строке, чтение из STDIN"
Запуск perl с флагом "-i" теперь предупреждает, если входные файлы не предоставлены на
командная строка [perl # 113410].
изменения в Существующий Диагностика
· $ * Больше не поддерживается
Предупреждение о том, что использование $ * и $ # больше не поддерживается, теперь генерируется для каждого
место, которое ссылается на них. Ранее он не мог быть сгенерирован, если другой
переменная, использующая тот же тип, глобальная переменная была обнаружена первой (например, "@ *" перед $ *) и не будет
быть сгенерирован для второго и последующих использований. (Трудно исправить отказ
генерировать предупреждения вообще, не генерируя их каждый раз, и предупреждать каждый раз
time согласуется с предупреждениями, которые $ [генерировал.)
· Добавлены предупреждения для "\ b {" и "\ B {". Это предупреждение об устаревании, которое
должна быть отключена этой категорией. Не следует отключать регулярное регулярное выражение
предупреждения, чтобы избавиться от них.
· Константа (% s): вызов & {$ ^ H {% s}} не вернул определенное значение
Постоянная перегрузка, возвращающая undef, приводит к этому сообщению об ошибке. Для числовых
константы, раньше говорилось «Константа (undef)». "undef" был заменен на
сам номер.
· Ошибка, возникающая, когда модуль не может быть загружен, теперь включает подсказку, что модуль
может потребоваться установка: "Не удается найти файл hopping.pm в @INC (возможно, потребуется установить
модуль перескока) (@INC содержит: ...) "
· Аргумент вектора не поддерживается в альфа-версиях
Это предупреждение нельзя было подавить, даже без предупреждений. Теперь это подавляемо,
и был перемещен из категории «внутренние» в категорию «printf».
· "Невозможно сделать {n, m} с n> m в регулярном выражении; помечено <- ЗДЕСЬ в m /% s /"
Эта фатальная ошибка превратилась в предупреждение, которое гласит:
Квантификатор {n, m} с n> m не может соответствовать в регулярном выражении
(W regexp) Минимум должен быть меньше или равен максимуму. Если ты действительно хочешь
regexp, чтобы сопоставить что-то 0 раз, просто введите {0}.
· Предупреждение «Сбежавший прототип», которое появляется в необычных случаях, было удалено как
бесполезный и непоследовательный.
· Ошибка «Не указана ссылка на формат» была удалена как единственный случай, когда она
может быть вызвано ошибкой.
· Ошибка «Невозможно создать подпрограмму с именем% s» была удалена по той же причине.
· Ошибка "Не могу использовать" мой% s "при сравнении сортировки преобразована в предупреждение,
«my% s» используется при сравнении сортировки (с «state» вместо «my» для переменных состояния).
Кроме того, эвристика для угадывания того, было ли неправильно использовано лексическое выражение $ a или $ b.
были улучшены, чтобы генерировать меньше ложных срабатываний. Лексические $ a и $ b больше не
запрещено, если они находятся за пределами блока сортировки. Также именованный унарный оператор или оператор списка
внутри блока сортировки больше не игнорируются $ a или $ b [perl # 86136].
утилита изменения
h2xs
· h2xs больше не создает недопустимый код для пустых определений. [perl # 20636]
Конфигурация и Сборник
· Добавлена опция "useversionedarchname" для настройки
Когда он установлен, он включает api_versionstring в archname. Например
x86_64-linux-5.13.6-поток-мульти. По умолчанию он не установлен.
Эта функция была запрошена Тимом Бансом, который заметил, что "INSTALL_BASE" создает
структура библиотеки, которая не зависит от версии Perl. Вместо этого он помещает
файлы для конкретной архитектуры в "$ install_base / lib / perl5 / $ archname". Это делает это
сложно использовать общий путь к библиотеке "INSTALL_BASE" с несколькими версиями perl.
Установив "-Duseversionedarchname", $ archname будет отличаться для архитектуры.
и Версия API, позволяющая смешанное использование «INSTALL_BASE».
· Добавьте параметр «PERL_NO_INLINE_FUNCTIONS»
Если "PERL_NO_INLINE_FUNCTIONS" определено, не включайте "inline.h"
Это позволяет коду тестирования включать заголовки perl для определений без создания
зависимость ссылки от библиотеки perl (которая может еще не существовать).
· Configure будет учитывать внешнюю переменную среды «MAILDOMAIN», если она установлена.
· "Installman" больше не игнорирует тихую опцию
· В дистрибутив теперь включены файлы "META.yml" и "META.json".
· Настроить теперь правильно определяет isblank () при компиляции с помощью компилятора C ++.
· Обнаружение пейджера в Настроить был улучшен, чтобы разрешить ответы, в которых указывается
параметры после имени программы, например / usr / bin / less -R, если пользователь принимает значение по умолчанию
ценить. Это помогает Perldoc при работе с escape-символами ANSI [perl # 72156].
Тестирование
· В наборе тестов теперь есть раздел для тестов, требующих очень большого количества памяти.
Эти тесты не запускаются по умолчанию; их можно включить, установив
Переменная среды "PERL_TEST_MEMORY" на количество гибибайт памяти, которое может
безопасно использовать.
Платформа Поддержка
Снято Платформы
BeOS
BeOS была операционной системой для персональных компьютеров, разработанной Be Inc, первоначально для
их оборудование BeBox. ОС Haiku была написана как замена с открытым исходным кодом
для / продолжения BeOS, а его порт на Perl является актуальным и активно поддерживается.
ЮТС Глобал
Код поддержки, относящийся к UTS global, был удален. UTS был версией для мэйнфреймов
Система V, созданная Амдалом, впоследствии продана UTS Global. Порт не был
коснулся еще до Perl v5.8.0, и UTS Global теперь не функционирует.
VM / ESA
Поддержка VM / ESA была удалена. Порт тестировался на 2.3.0, на котором IBM закончила
Служба началась в марте 2002 года. 2.4.0 прекратила обслуживание в июне 2003 года и была заменена на
Z / VM. Текущая версия Z / VM - V6.2.0, и ее обслуживание запланировано на
2015/04/30.
MPE / IX
Поддержка MPE / IX была удалена.
ХОБЛ
Код поддержки, относящийся к EPOC, был удален. EPOC была семьей операционных
системы, разработанные Psion для мобильных устройств. Это был предшественник Symbian.
Последний раз порт обновлялся в апреле 2002 года.
Рапсодия
Поддержка Rhapsody была удалена.
Платформа-Specific Заметки
AIX
Configure now всегда добавляет «-qlanglvl = extc99» к флагам CC в AIX при использовании xlC. Этот
упростит компиляцию ряда модулей на основе XS, которые предполагают, что C99 [perl
№ 113778].
лязг ++
Теперь существует обходной путь для ошибки компилятора, которая препятствовала компиляции с помощью clang ++, поскольку
Perl v5.15.7 [perl # 112786].
C + +
При компиляции ядра Perl как C ++ (который поддерживается только частично) функции mathom
теперь скомпилированы как "extern" C "" для обеспечения надлежащей двоичной совместимости. (Однако двоичный
совместимость обычно не гарантируется в ситуациях, когда это
иметь значение.)
Дарвин
Прекратите жесткое кодирование выравнивания по 8-байтовым границам, чтобы исправить сборки, используя -Dusemorebits.
Хайку
Perl теперь должен работать "из коробки" на Haiku R1 Alpha 4.
ПолночьBSD
"libc_r" был удален из последних версий MidnightBSD, и более старые версии работают лучше
с "ниткой". Потоковая обработка теперь включена с использованием «pthread», который исправляет ошибки сборки с помощью
многопоточность включена на 0.4-CURRENT.
Solaris
В Configure избегайте запуска команд sed с флагами, не поддерживаемыми в Solaris.
ЗИС
· Где возможно, регистр имен файлов и аргументов командной строки теперь сохраняется
включение функций CRTL "DECC $ EFS_CASE_PRESERVE" и "DECC $ ARGV_PARSE_STYLE" в
время запуска. Последнее действует только тогда, когда расширенный синтаксический анализ включен в
процесс, из которого запускается Perl.
· Набор символов для расширенного синтаксиса имени файла (EFS) теперь включен по умолчанию в VMS.
Среди прочего, это обеспечивает лучшую обработку точек в именах каталогов, несколько
точки в именах файлов и пробелы в именах файлов. Чтобы получить старое поведение, установите
логическое имя "DECC $ EFS_CHARSET" на "ОТКЛЮЧИТЬ".
· Исправлено связывание сборок, настроенных с помощью "-Dusemymalloc = y".
· Экспериментальная поддержка сборки Perl с помощью компилятора HP C ++ предоставляется
настройка с помощью "-Dusecxx".
· Все файлы заголовков C из каталога верхнего уровня дистрибутива теперь установлены
на VMS, что обеспечивает согласованность с многолетней практикой на других платформах.
Ранее устанавливалось только подмножество, что нарушало сборки неосновных расширений для
расширения, зависящие от отсутствующих включаемых файлов.
· Кавычки теперь удаляются из командного глагола (но не из параметров) для команд.
порождается с помощью «system», обратных кавычек или конвейерного «open». Ранее цитаты на глагол
были переданы в DCL, который не смог бы распознать команду. Кроме того, если
глагол на самом деле является путем к изображению или процедуре команды на томе ODS-5, цитируя
теперь путь может содержать пробелы.
· The A2P Исправлена сборка компилятора HP C ++ на OpenVMS.
Win32
· Perl теперь можно собрать с помощью компилятора Microsoft Visual C ++ 2012, указав
CCTYPE = MSVC110 (или MSVC110FREE, если вы используете бесплатную версию Express для Windows
Рабочий стол) в win32 / Makefile.
· Возможность построения без «USE_SOCKETS_AS_HANDLES» была удалена.
· Исправлена проблема, из-за которой perl мог аварийно завершить работу при очистке потоков (включая основной
thread) в сборках с поточной отладкой на Win32 и, возможно, на других платформах [perl
№ 114496].
· Редкое состояние гонки, при котором сон займет больше времени, чем требуется, и
возможно даже зависание, было исправлено [perl # 33096].
· "Ссылка" на Win32 теперь пытается установить $! к более подходящим значениям на основе Win32
Код ошибки API. [perl # 112272]
Perl больше не искажает блок среды, например, при запуске нового подпроцесса,
когда среда содержит символы, отличные от ASCII. Известные проблемы остаются,
однако, когда среда содержит символы вне текущей кодовой страницы ANSI
(например, см. пункт о Unicode в% ENV в
<http://perl5.git.perl.org/perl.git/blob/HEAD: /Porting/todo.pod>). [perl # 113536]
· Сборка perl с некоторыми компиляторами Windows, которые раньше терпели неудачу из-за проблем с
оператор miniperl "glob" (который использует программу "perlglob"), удаляющий PATH
переменная окружения [perl # 113798].
· Новый параметр make-файла, «USE_64_BIT_INT», был добавлен в make-файлы Windows. Установленный
это «определить» при создании 32-битного Perl, если вы хотите, чтобы он использовал 64-битные целые числа.
Уменьшение размера машинного кода, уже сделанное для DLL модулей XS в Perl v5.17.2,
теперь расширены до самой perl DLL.
Сборка с VC ++ 6.0 была непреднамеренно нарушена в Perl v5.17.2, но теперь исправлена
.
WinCE
Создание WinCE теперь снова возможно, хотя требуется больше работы, чтобы полностью
восстановить чистую сборку.
внутренний изменения
· Созданы синонимы для ошибочно названного «av_len ()»: «av_top_index ()» и
"av_tindex". Все три из них возвращают номер наивысшего индекса в массиве,
а не количество содержащихся в нем элементов.
· СвУПГРАД () больше не выражение. Первоначально этот макрос (и лежащий в его основе
Функция, sv_upgrade ()) были задокументированы как логические, хотя на самом деле они всегда
прохрипел при ошибке и никогда не возвращал false. В 2005 году документация была обновлена до
указать пустое возвращаемое значение, но СвУПГРАД () остался всегда возвращать 1 для назад
совместимость. Теперь это было удалено, и СвУПГРАД () теперь заявление без
возвращаемое значение.
Итак, это синтаксическая ошибка:
если (! SvUPGRADE (sv)) {квакать (...); }
Если у вас есть такой код, просто замените его на
СвУПГРАД (св);
или, чтобы избежать предупреждений компилятора со старыми perls, возможно
(недействительно) SvUPGRADE (sv);
· Perl имеет новый механизм копирования при записи, который позволяет обновлять любой скаляр SvPOK до
скаляр копирования при записи. Счетчик ссылок на строковый буфер хранится в
сам строковый буфер. Эта функция включен by по умолчанию.
Его можно включить в сборке Perl, запустив Настроить
-Accflags = -DPERL_NEW_COPY_ON_WRITE, и мы рекомендуем авторам XS попробовать свои
код с таким включенным Perl и предоставьте обратную связь. К сожалению, пока нет
хорошее руководство по обновлению кода XS, чтобы справиться с COW. Пока такой документ не будет
доступны, обратитесь к списку рассылки perl5-porters.
Он нарушает работу нескольких модулей XS, позволяя скалярам копирования при записи проходить через пути кода.
которые никогда раньше с ними не сталкивались.
· Копирование при записи больше не использует флаги SvFAKE и SvREADONLY. Следовательно, SvREADONLY
указывает на настоящий SV, доступный только для чтения.
Используйте макрос SvIsCOW (как и раньше) для определения скаляра копирования при записи.
· "PL_glob_index" больше нет.
· У частного Perl_croak_no_modify удален параметр контекста. Теперь есть
пустой прототип. Пользователи общедоступного API croak_no_modify не затронуты.
· Скаляры копирования при записи (общий хэш-ключ) больше не помечаются как доступные только для чтения. "СВРЕАДОНЛИ"
возвращает false для такого SV, но "SvIsCOW" все равно возвращает true.
· Добавлен новый тип операции "OP_PADRANGE". Оптимизатор глазка Perl будет,
где возможно, замените нажимную метку одной операцией padrange op, за которой следует один или несколько
pad ops, а также, возможно, пропущенный список и nextstate ops. Кроме того, оп может
выполнять задачи, связанные с RHS задания "my (...) = @_", поэтому те
ops тоже можно оптимизировать.
· Сопоставление без учета регистра внутри класса символов [в квадратных скобках] с многосимвольными символами
фолд больше не исключает одну из возможностей в тех обстоятельствах, к которым он привык.
[perl # 89774].
· "PL_formfeed" удален.
· Механизм регулярных выражений больше не читает один байт после конца целевого объекта.
нить. Хотя для всех внутренне правильно сформированных скаляров это никогда не должно было быть
Проблема, это изменение упрощает хитрые трюки со строковыми буферами в модулях CPAN.
[perl # 73542]
· Внутри блока BEGIN "PL_compcv" теперь указывает на компилируемую в данный момент подпрограмму,
а не сам блок BEGIN.
· "Mg_length" устарело.
· «Sv_len» теперь всегда возвращает количество байтов, а «sv_len_utf8» - количество символов.
Раньше "sv_len" и "sv_len_utf8" были ошибочными и иногда возвращались.
байты, а иногда и символы. "sv_len_utf8" больше не предполагает, что его аргумент
в UTF-8. Ни один из них не создает кеши UTF-8 для связанных или перегруженных значений или для
не-PV больше.
· "Sv_mortalcopy" теперь копирует строковые буферы скаляров общих хэш-ключей при вызове из
Модули XS [perl # 79824].
· Новый флаг "RXf_MODIFIES_VARS" может быть установлен пользовательскими механизмами регулярных выражений на
указывают, что выполнение регулярного выражения может привести к тому, что переменные будут
изменен. Это позволяет "s ///" пропустить определенные оптимизации. Собственный регулярный
механизм выражений устанавливает этот флаг для специальных глаголов возврата, которые устанавливают $ REGMARK
и $ REGERROR.
· API для доступа к лексическим блокнотам значительно изменились.
"PADLIST" теперь длиннее "AV", но вместо этого имеют собственный тип. "PADLIST" теперь содержат
"PAD" и "PADNAMELIST" для "PADNAME" вместо "AV" для панели и списка
имена пэдов. "PAD", "PADNAMELIST" и "PADNAME" должны быть доступны как таковые через
недавно добавленный API-интерфейс панели вместо простых API-интерфейсов "AV" и "SV". См. Perlapi для
· В API регулярных выражений пронумерованным обратным вызовам захвата передается индекс, указывающий, что
Выполняется доступ к переменной соответствия. Есть специальные значения индекса для "$`, $ &, $ & "
переменные. Ранее те же три значения использовались для получения "$ {^ PREMATCH},
$ {^ MATCH}, $ {^ POSTMATCH} "тоже, но теперь им присвоены три отдельных значения.
См. «Обратные вызовы пронумерованного захвата» в perlreapi.
· "PL_sawampersand" ранее было логическим значением, указывающим, что любое из "$`, $ &, $ & "имело
был замечен; теперь он содержит три однобитовых флага, указывающих на наличие каждого из
переменные индивидуально.
· Запись карты типов "CV *" теперь поддерживает перегрузку "& {}" и typeglobs, как и
"& {...}" [perl # 96872].
· Флаг "SVf_AMAGIC", указывающий на перегрузку, теперь находится в тайнике, а не в объекте. Это
теперь устанавливается автоматически при изменении метода или @ISA, поэтому его значение имеет
тоже изменилось. Теперь это означает «потенциально перегружен». Когда таблица перегрузки
рассчитывается, флаг автоматически отключается, если нет перегрузки, поэтому есть
не должно быть заметного торможения.
Устойчивость таблиц перегрузки теперь проверяется при вызове методов перегрузки,
а не во время «благослови».
Магия «А» ушла. Изменения в обработке флага "SVf_AMAGIC" устраняют
нужно для этого.
"PL_amagic_generation" удален, поскольку больше не нужен. Для модулей XS это
теперь псевдоним макроса "PL_na".
Параметр резервной перегрузки теперь хранится в записи тайника отдельно от
сама перегрузка.
· Код обработки символов был очищен местами. Изменения должны быть
оперативно невидимый.
· Функция "исследования" была отключена в v5.16. Просто отключили через "возврат"
утверждение; код остался на месте. Теперь код, поддерживающий то, что раньше использовалось для "учебы"
do был удален.
· В рамках многопоточных perls больше не выделяется отдельный PV для каждого COP для
сохранить имя своего пакета ("cop-> stashpv"). Вместо этого есть смещение
("cop-> stashoff") в новый массив "PL_stashpad", который содержит указатели на тайник.
· В подключаемом API регулярных выражений структура regexp_engine получила новое поле
op_comp, который в настоящее время предназначен только для внутреннего использования Perl, и его следует инициализировать.
в NULL другими подключаемыми модулями регулярных выражений.
· В API добавлена новая функция "alloccopstash", но она считается
экспериментальный. См. Perlapi.
· Perl использовался для реализации магии получения таким образом, чтобы иногда скрывать ошибки в коде, который
мог позвонить mg_get () слишком много раз на магических ценностях. Это скрытие ошибок больше не
происходит, поэтому теперь могут стать видимыми давно существующие ошибки. Если вы видите ошибки, связанные с магией
в XS-коде убедитесь, что он вместе с используемыми им функциями Perl API вызывает
mg_get () только один раз на SvGMAGICAL () значения.
· Распределение OP для резюме теперь использует slab-распределитель. Это упрощает управление памятью
для OP, выделенных для CV, поэтому очистка после ошибки компиляции проще и
безопаснее [perl # 111462] [perl # 112312].
· "PERL_DEBUG_READONLY_OPS" был переписан для работы с новым распределителем slab,
позволяя ему выявлять больше нарушений, чем раньше.
· Старый распределитель slab для операций, который был включен только для "PERL_IMPLICIT_SYS" и
"PERL_DEBUG_READONLY_OPS" был удален.
Выбранный Ошибка Исправления
· Здесь терминаторы документа больше не требуют завершающего символа новой строки, когда они
появляются в конце файла. Так было уже в конце строки eval
[perl # 65838].
· Сборки "-DPERL_GLOBAL_STRUCT" теперь освобождают глобальную структуру после они закончили использовать
его.
· Конечный символ "/" в пути в @INC больше не будет иметь дополнительного "/".
· Слой ": crlf" теперь работает, когда непрочитанные данные не помещаются в его собственный буфер. [perl
№ 112244].
· "Ungetc ()" теперь обрабатывает данные в кодировке UTF-8. [perl # 116322].
· Ошибка в основной карте типов вызвала любые типы C, которые сопоставляются с записью основной карты типов T_BOOL
не должно быть установлено, обновлено или изменено, когда переменная T_BOOL использовалась в OUTPUT:
раздел за исключением RETVAL. T_BOOL в разделе INPUT: не изменился.
Использование типа возврата T_BOOL для XSUB (RETVAL) не изменилось. Побочный эффект
исправление этой ошибки, если T_BOOL указан в разделе OUTPUT: (который предыдущий
ничего не сделал с SV), а SV (литерал) только для чтения передается в XSUB, хрипит
например, «Попытка изменения значения, доступного только для чтения», произойдет. [perl # 115796]
· На многих платформах указание имени каталога в качестве имени сценария заставляло perl выполнять
ничего и сообщить об успехе. Теперь он должен универсально сообщать об ошибке и выходить
ненулевой. [perl # 61362]
· "Sort {undef} ..." под фатальными предупреждениями больше не дает сбоев. Он начал рушиться
Перл v5.16.
· Тайники, благословленные друг друга ("благослови \% Foo ::, 'Bar'; благослови \% Bar ::, 'Foo'") нет
более длительный результат в двойных освобождениях. Эта ошибка появилась в Perl v5.16.
· Исправлены многочисленные утечки памяти, в основном связанные с фатальными предупреждениями и синтаксисом.
ошибки.
· Некоторые неудачные совпадения регулярных выражений, такие как "'f' = ~ /../g", не сбрасывались
"pos". Кроме того, шаблоны "match-once" ("m? ...? G") тоже не смогли сбросить его при вызове
второй раз [perl # 23180].
· Несколько ошибок, связанных с "local * ISA" и "local * Foo ::", приводящие к устаревшим кешам MRO, имеют
было исправлено.
· Определение подпрограммы, когда ее typeglob имеет псевдоним, больше не приводит к устареванию
кеши методов. Эта ошибка появилась в Perl v5.10.
· Локализация typeglob, содержащего подпрограмму, когда пакет typeglob был
удаление из родительского тайника больше не вызывает ошибки. Эта ошибка появилась в
Перл v5.14.
· В некоторых случаях "local * method = ..." не сбрасывает кеши методов при
выход из области.
· "/[.Foo.pting/" больше не является ошибкой, но выдает предупреждение (как и раньше) и обрабатывается
как "/[.fo visible/" [perl # 115818].
· "Goto $ tied_var" теперь вызывает FETCH перед тем, как решить, какой тип goto (подпрограмма или
ярлык) это есть.
· Переименование пакетов через глобальное присвоение ("* Foo :: = * Bar ::; * Bar :: = * Baz ::") в
сочетание с "м? ...?" и «сброс» больше не приводит к сбою многопоточных сборок.
· Исправлен ряд ошибок, связанных с присвоением списка хешу. Многие из этих
включают списки с повторяющимися ключами, например "(1, 1, 1, 1)".
· Выражение «скаляр (% h = (1, 1, 1, 1))» теперь возвращает 4, а не 2.
· Возвращаемое значение «% h = (1, 1, 1)» в контексте списка было неверным. Ранее это
вернет «(1, undef, 1)», теперь возвращает «(1, undef)».
· Perl теперь выдает такое же предупреждение для "($ s,% h) = (1, {})", как и для "(% h) =
({}) "," Ссылка найдена там, где ожидался список равного размера ".
· Исправлен ряд дополнительных краевых случаев при назначении списков хешам. Для
подробнее см. коммит 23b7025ebc.
· Атрибуты, применяемые к лексическим переменным, больше не вызывают утечку памяти. [perl # 114764]
· «Dump», «goto», «last», «next», «redo» или «require», за которыми следует пустое слово (или
версия), а затем инфиксный оператор больше не является синтаксической ошибкой. Раньше это было для
те инфиксные операторы (например, "+"), которые имеют другое значение, если термин
ожидал. [perl # 105924]
· "Require a :: b. 1" и "require a :: b + 1" больше не создают ошибочной двусмысленности
предупреждения. [perl # 107002]
· Вызов методов класса теперь разрешен для любой строки, а не только для строк, начинающихся с
буквенно-цифровой символ. [perl # 105922]
· Пустой шаблон, созданный с помощью «qr //», используемого в «m ///», больше не вызывает «пустой
шаблон повторно использует поведение последнего шаблона. [perl # 96230]
· Связывание хэша во время итерации больше не приводит к утечке памяти.
· Освобождение связанного хэша во время итерации больше не приводит к утечке памяти.
· Назначение списка связанному массиву или хэшу, который умирает в STORE, больше не приводит к
утечка памяти.
· Если хэш подсказки ("% ^ H") привязан, запись области видимости времени компиляции (которая копирует подсказку
hash) больше не приводит к утечке памяти, если FETCH умирает. [perl # 107000]
· Постоянное сворачивание больше не вызывает ненадлежащего особого поведения «разделения».
[perl # 94490]
· "Определенный скаляр (@array)", "определенный do {& foo}" и аналогичные конструкции теперь обрабатывают
аргумент "определяется" как простой скаляр. [perl # 97466]
· Запуск настраиваемой отладки, которая не определяет глобуса * DB :: DB или предоставляет заглушку подпрограммы
для & DB :: DB больше не приводит к сбою, а к ошибке. [perl # 114990]
· "Reset" "" теперь соответствует его документации. "reset" сбрасывает только "m? ...?" шаблоны, когда
называется без аргументов. Пустая строка для аргумента теперь ничего не делает. (Он использовал
рассматриваться как не аргумент.) [perl # 97958]
· "Printf" с аргументом, возвращающим пустой список, больше не читает после конца
стек, что приводит к нестабильному поведению. [perl # 77094]
· «--Subname» больше не выдает ошибочных предупреждений о двусмысленности. [perl # 77240]
· «V10» теперь можно использовать в качестве метки или имени пакета. Это было случайно сломано, когда
v-строки были добавлены в Perl v5.6. [perl # 56880]
· "Length", "pos", "substr" и "sprintf" могут быть перепутаны из-за связей, перегрузки,
ссылки и typeglobs, если их преобразование в строки изменило внутреннюю
представление в или из UTF-8. [perl # 114410]
· Utf8 :: encode теперь вызывает FETCH и STORE для связанных переменных. utf8 :: decode now вызывает
МАГАЗИН (он уже звонил FETCH).
· "$ Tied = ~ s / $ non_utf8 / $ utf8 /" больше не зацикливается бесконечно, если связанная переменная возвращает
строка Latin-1, скаляр с общим хеш-ключом, ссылка или typeglob, который преобразуется в строку как
ASCII или Latin-1. Это регресс по сравнению с v5.12.
· «S ///» без / e теперь лучше определяет, когда нужно отказаться от определенных
оптимизация, исправление некоторых глючных случаев:
· Сопоставлять переменные в определенных конструкциях («&&», «||», «..» и другие) в
сменная часть; например, "s /(.)/$ l {$ a || $ 1} / g". [perl # 26986]
· Псевдонимы для соответствия переменным в замене.
· $ REGERROR или $ REGMARK в замене. [perl # 49190]
· Пустой шаблон ("s // $ foo /"), который вызывает использование последнего успешного шаблона,
когда этот шаблон содержит блоки кода, которые изменяют переменные в
замена.
· Загрязнение сменной струны больше не влияет на испорченность
возвращаемое значение "s /// e".
· $ | Переменная autoflush создается при необходимости «на лету». Если это произошло (например,
если он был упомянут в модуле или eval), когда текущий выбранный дескриптор файла был
typeglob с пустым слотом ввода-вывода, раньше вылетал. [perl # 115206]
· Номера строк в конце строки eval больше не отличаются на единицу. [perl # 114658]
· Фильтры @INC (подпрограммы, возвращаемые подпрограммами в @INC), которые устанавливают $ _ на копирование при-
скаляр записи больше не заставляет синтаксический анализатор изменять этот строковый буфер на месте.
· "Length ($ object)" больше не возвращает неопределенное значение, если у объекта есть строка.
перегрузка, возвращающая undef. [perl # 115260]
· Использование "PL_stashcache", кеша поиска имени тайника для вызовов методов, было
восстановлен,
Коммит da6b625f78f5f133 в августе 2011 года случайно нарушил код, который ищет
значения в "PL_stashcache". Так как это единственный кеш, вполне корректно все продолжалось
работает без него.
· Ошибка «Невозможно локализовать по ссылке» исчезла в версии 5.16.0, когда «локально
% $ ref "появилось в последней строке подпрограммы lvalue. Эта ошибка исчезла для
"\ local% $ ref" в perl v5.8.1. Сейчас он восстановлен.
· Обработка here-docs была значительно улучшена, исправлено несколько ошибок синтаксического анализа.
и сбои, и одна утечка памяти, и исправление неправильных номеров последующих строк под
определенные условия.
· Внутри eval сообщение об ошибке для незавершенного документа здесь больше не имеет новой строки
посередине [perl # 70836].
· Подстановка внутри шаблона подстановки ("s / $ {s |||} //") больше не сбивает с толку
парсер.
· Возможно, это странное место для разрешения комментариев, но "s //" "# hello / e" всегда работало,
если не бывает, что перед первым # стоит нулевой символ. Теперь это работает даже в
наличие нулей.
· Недопустимый диапазон в «tr ///» или «y ///» больше не приводит к утечке памяти.
· String eval больше не обрабатывает оператор, разделенный точкой с запятой, подобный кавычкам, в самом конце.
("eval 'q ;;'") как синтаксическую ошибку.
· "Warn {$ _ => 1} + 1" больше не является синтаксической ошибкой. Парсер раньше запутался
с определенными операторами списка, за которыми следует анонимный хеш, а затем инфиксный оператор
который разделяет его форму с унарным оператором.
· "(Вызывающий $ n) [6]" (который дает текст eval), используемый для возврата фактического парсера
буфер. Его изменение может привести к сбоям. Теперь всегда возвращает копию. В
возвращенная строка больше не содержит "\ n;" прибил до конца. Возвращенный текст также
включает тела here-doc, которые раньше опускались.
· Кэш позиции UTF-8 теперь сбрасывается при доступе к магическим переменным, чтобы избежать
рассинхронизация строкового буфера и кэша позиций UTF-8 [perl # 114410].
· Были отмечены различные случаи, когда дважды вызывается get magic для магических строк UTF-8.
исправлена.
· Этот код (если нет $ & и т. Д.)
$ _ = 'x' x 1_000_000;
1 пока /(.)/;
использовался для пропуска копии буфера по соображениям производительности, но пострадал от 1 доллара и т. д.
изменяется, если исходная строка изменилась. Теперь это исправлено.
· Perl больше не использует PerlIO для сообщения о нехватке памяти, в отличие от PerlIO.
попытаться выделить больше памяти.
· В регулярном выражении, если что-то количественно выражается с помощью «{n, m}», где «n> m», это
не может совпадать. Раньше это была фатальная ошибка, но теперь это просто предупреждение
(и это что-то не совпадает). [perl # 82954].
· Раньше это было возможно для форматов, определенных в подпрограммах, которые впоследствии были
undefined и переопределено, чтобы закрыть переменные в неправильной панели (недавно определенная
включающий подпункт), что приводит к сбоям или ошибкам "причудливой копии".
· Переопределение XSUB во время выполнения может привести к предупреждению с неправильным номером строки.
· Формат% vd sprintf не поддерживает объекты версии для альфа-версий. Он использовал
для вывода самого формата (% vd) при передаче альфа-версии, а также выдачи
Предупреждение «Недопустимое преобразование в printf». Больше не работает, но производит пустой
строка на выходе. В этом случае также больше не происходит утечки памяти.
· Вызовы "$ obj-> SUPER :: method" в основном пакете могли завершиться ошибкой, если бы пакет SUPER имел
уже были доступны другими способами.
· Псевдоним тайника ("* foo :: = * bar ::") больше не заставляет вызовы SUPER игнорировать изменения в
методы или @ISA или используйте неправильный пакет.
· Вызов методов для пакетов, имена которых заканчиваются на :: SUPER, больше не рассматриваются как SUPER
вызовы методов, в результате чего метод не может быть найден. Кроме того, определяя
подпрограммы в таких пакетах больше не вызывают их обнаружение с помощью вызовов методов SUPER
в содержащем пакете [perl # 114924].
· "\ W" теперь соответствует кодовым точкам U + 200C (НУЛЕВАЯ ШИРИНА, НЕ СОЕДИНЯЕТСЯ) и U + 200D (НУЛЕВАЯ ШИРИНА
СОСТАВНИК). "\ W" больше не соответствует им. Это изменение связано с тем, что Unicode исправлен
их определение того, чему должен соответствовать "\ w".
· "Dump LABEL" больше не пропускает этикетку.
· Постоянное сворачивание больше не изменяет поведение таких функций, как "stat ()" и
"truncate ()", который может принимать либо имена файлов, либо дескрипторы. "stat 1? foo: bar" сейчас
обрабатывает свой аргумент как имя файла (поскольку это произвольное выражение), а не
ручка "фу".
· "Truncate FOO, $ len" больше не возвращается к обработке "FOO" как имени файла, если
дескриптор файла был удален. Это было сломано в Perl v5.16.0.
· Переопределения подпрограмм после назначений sub-to-glob и glob-to-glob больше не
вызвать двойное освобождение или панические сообщения.
· "S ///" теперь превращает vstrings в простые строки при выполнении подстановки, даже если
результирующая строка такая же ("s / a / a /").
· Предупреждения о несоответствии прототипа больше не обрабатывают постоянные подпрограммы как не имеющие
прототип, когда у них действительно есть "".
· Постоянные подпрограммы и предварительные объявления больше не предотвращают несоответствие прототипов
предупреждения об отсутствии под-имени.
· "Undef" в подпрограмме теперь очищает средства проверки вызовов.
· Оператор "ref" начал утечку памяти на благословенных объектах в Perl v5.16.0. Этот
был исправлен [perl # 114340].
· "Use" больше не пытается анализировать свои аргументы как утверждение, заставляя "использовать константу {()
}; "синтаксическая ошибка [perl # 114222].
· При отладке сборок "неинициализированные" предупреждения внутри форматов больше не вызывают утверждения
неудачи.
· При отладке сборок подпрограммы, вложенные в форматы, больше не вызывают утверждения
сбои [perl # 78550].
· Форматы и операторы использования теперь разрешены внутри форматов.
· «Print $ x» и «sub {print $ x} -> ()» теперь всегда производят одинаковый результат. Это было
возможно, чтобы последний отказался закрывать более $ x, если переменная не была активна;
например, если он был определен вне выполняющейся в данный момент именованной подпрограммы.
· Аналогично, «print $ x» и «print eval '$ x'» теперь производят одинаковый результат. Это также
позволяет видеть переменные my $ x if 0 в отладчике [perl # 114018].
· Рекурсивно вызываемые форматы больше не используют собственные лексические переменные, но каждый
рекурсивный вызов имеет собственный набор лексических элементов.
· Попытка освободить активный формат или связанный с ним дескриптор больше не приводит к результатам
в аварии.
· Анализ формата больше не путается фигурными скобками, точками с запятой и низким приоритетом.
операторы. Раньше можно было использовать фигурные скобки в качестве разделителей формата (вместо "="
и "."), но лишь иногда. Точка с запятой и операторы с низким приоритетом в формате
строки аргументов больше не сбивают анализатор с толку, заставляя его игнорировать возвращаемое значение строки. В
форматировать строки аргументов, фигурные скобки теперь могут использоваться для анонимных хэшей вместо того, чтобы быть
всегда обрабатываются как блоки "до".
· Форматы теперь могут быть вложены в блоки кода в регулярных выражениях и других кавычках.
конструкции ("/(?{...})/" и "qq /${...}/") [perl # 114040].
· Форматы больше не создаются после ошибок компиляции.
· В отладочных сборках -DA Параметр командной строки начал сбой в Perl v5.16.0.
Это было исправлено [perl # 114368].
· Возможный сценарий взаимоблокировки, связанный с преждевременным завершением работы псевдоразветвленной системы.
дочерний элемент в сборке Windows с включенным ithreads был исправлен. Это решает
общая проблема т / op / fork.t тест зависания на Windows [perl # 88840].
· Код, который генерирует ошибки из "require ()", потенциально может прочитать один или два
байтов до начала имени файла для имен файлов длиной менее трех байтов и
окончание "/\.p?\z/". Теперь это исправлено. Обратите внимание, что этого никогда не могло случиться
в любом случае с именами модулей, заданными для "use ()" или "require ()".
· Обработка путей к модулям, указанным в "require ()", была сделана поточно-ориентированной на
ВМС.
· Исправлены неблокирующие сокеты на VMS.
· Pod теперь может быть вложен в код внутри конструкции, заключенной в кавычки, вне строки eval.
Раньше это работало только внутри строк [perl # 114040].
· «Goto ''» теперь ищет пустую метку, выдавая ошибку «goto must have label»
сообщение вместо выхода из программы [perl # 111794].
· "Goto" \ 0 "" теперь умирает с "Can't find label" вместо "goto must have label".
· Функция C "hv_store" использовалась, чтобы приводить к сбоям при использовании на "% ^ H" [perl # 111000].
· Проверка вызовов, прикрепленная к прототипу закрытия через "cv_set_call_checker", теперь копируется
к клонированным из него замыканиям. Итак, "cv_set_call_checker" теперь работает внутри атрибута
обработчик закрытия.
· Запись в $ ^ N не имела никакого эффекта. Теперь хрипит с "Модификацией чтения-
только значение "по умолчанию, но это можно изменить с помощью настраиваемого регулярного выражения.
engine, как и в случае с 1 $ [perl # 112184].
· «Undef» на глобусе управляющего символа («undef * ^ H») больше не выдает ошибочное предупреждение
насчет неоднозначности [perl # 112456].
· Для эффективности многие операторы и встроенные функции возвращают один и тот же скаляр.
каждый раз. Подпрограммы Lvalue и подпрограммы в пространстве имен CORE :: позволяли
эта деталь реализации просочиться. "print & CORE :: uc (" a "), & CORE :: uc (" b ")"
используется для печати «BB». То же самое произойдет с подпрограммой lvalue, возвращающей
возвращаемое значение «uc». Теперь в таких случаях значение копируется.
· Синтаксис "method {}" с пустым блоком или блоком, возвращающим пустой список, используемый для
сбой или использовать какое-то случайное значение, оставшееся в стеке, в качестве вызывающего. Теперь он производит
ошибка.
· "Vec" теперь работает с очень большими смещениями (> 2 ГБ) [perl # 111730].
· Изменения в настройках перегрузки теперь вступают в силу немедленно, как и изменения в наследовании.
которые влияют на перегрузку. Раньше они вступали в силу только после «благословения».
Объекты, которые были созданы до того, как у класса была какая-либо перегрузка, чтобы оставаться не
перегружен, даже если класс получил перегрузку через "использовать перегрузку" или @ISA
меняет, да еще после "благослови". Это было исправлено [perl # 112708].
· Классы с перегрузкой теперь могут наследовать резервные значения.
· Перегрузка не учитывала резервное значение 0, если были перегруженные объекты
по обе стороны от оператора присваивания, например "+ =" [perl # 111856].
· "Pos" теперь хрипит с аргументами хэша и массива вместо того, чтобы выдавать ошибочные
предупреждения.
· «While (каждый% h)» теперь подразумевает «while (defined ($ _ = each% h))», например «строка чтения» и
"риддир".
· Подпрограммы в пространстве имен CORE :: больше не аварийно завершают работу после "undef * _" при вызове без
список аргументов (& CORE :: time без скобок).
· «Unpack» больше не вызывает ошибку «'/' должно следовать за числовым типом при распаковке», когда
виноваты данные [perl # 60204].
· "Join" и "@array" теперь вызывают FETCH только один раз для привязанного $ "[perl # 8931].
· Некоторые вызовы подпрограмм, генерируемые компиляцией основных операций, затронутых "CORE :: GLOBAL"
При переопределении проверка операций выполнялась дважды. Проверка всегда идемпотентна для чистых
Код Perl, но двойная проверка может иметь значение, когда задействованы специальные средства проверки вызовов.
· Состояние гонки, существовавшее вокруг вилки, могло вызвать отправку сигнала на
parent должны обрабатываться как родителем, так и дочерним элементом. Сигналы теперь ненадолго заблокированы вокруг
fork, чтобы этого не произошло [perl # 82580].
· Реализация блоков кода в регулярных выражениях, таких как "(? {})" И
"(?? {})" был сильно переработан, чтобы устранить множество ошибок. Основной пользователь-
видимые изменения:
· Блоки кода в шаблонах теперь анализируются в том же проходе, что и окружающие
код; в частности, больше нет необходимости иметь сбалансированные брекеты: это сейчас
работ:
/ (? {$ x = '{'}) /
Это означает, что это сообщение об ошибке больше не генерируется:
Последовательность (? {...}) не завершена или не {} -балансирована в регулярном выражении
но может появиться новая ошибка:
Последовательность (? {...}) не заканчивается символом ')'
Кроме того, буквальные блоки кода в шаблонах времени выполнения компилируются только один раз,
во время компиляции perl:
для моего $ p (...) {
# этот блок кода 'FOO' компилируется один раз,
# одновременно с окружающим циклом for
/ $ p {(? {FOO;}) /;
}
· Лексические переменные теперь нормальны с точки зрения области видимости, рекурсии и поведения закрытия.
В частности, "/ A (? {B}) C /" ведет себя (с точки зрения закрытия) точно так же, как "/ A /
&& do {B} && / C / ", а" qr / A (? {B}) C / "похоже на" sub {/ A / && do {B} && / C /} ".
Итак, этот код теперь работает так, как вы могли ожидать, создавая три регулярных выражения, соответствующих 0,
1 и 2:
для моего $ i (0..2) {
нажмите @r, qr / ^ (?? {$ i}) $ /;
}
"1" = ~ $ r [1]; # Матчи
· Прагма use re 'eval' теперь требуется только для блоков кода, определенных в
время выполнения; в частности, в дальнейшем текст шаблона $ r по-прежнему
вставлены в новый шаблон и перекомпилированы, но индивидуально скомпилированы
блоки кода внутри $ r используются повторно, а не перекомпилируются, и "использовать re 'eval'"
больше не нужно:
мой $ r = qr / abc (? {....}) def /;
/ xyz $ r /;
· Операторы управления потоком больше не дают сбоев. Каждый блок кода работает в новой динамической
область видимости, поэтому «следующий» и т. д. не увидит никаких замыкающих циклов. "return" возвращает значение
из блока кода, а не из какой-либо включающей подпрограммы.
· Perl обычно кэширует компиляцию шаблонов времени выполнения и не перекомпилирует
если шаблон не изменился, но теперь он отключен, если требуется для
правильное поведение замыканий. Например:
мой $ code = '(?? {$ x})';
for my $ x (1..3) {
# перекомпилируйте, чтобы каждый раз видеть новое значение $ x
$ x = ~ / $ code /;
}
· Флаги "/ msix" и "(? Msix)" и т. Д. Теперь распространяются на возвращаемое значение из
"(?? {})"; теперь это работает:
"AB" = ~ / a (?? {'b'}) / i;
· Предупреждения и ошибки будут появляться из окружающего кода (или для времени выполнения
блоки кода, из eval), а не из "re_eval":
используйте re 'eval'; $ c = '(? {предупреждать "фу"})'; / $ c /;
/ (? {предупреждать "фу"}) /;
ранее давал:
foo в (re_eval 1) строка 1.
foo в (re_eval 2) строка 1.
а теперь дает:
foo в строке 1 (eval 1).
foo в / some / prog строка 2.
· Perl теперь можно перекомпилировать для использования любой версии Unicode. В v5.16 он работал на
Юникоды 6.0 и 6.1, но при использовании более ранних выпусков возникали различные ошибки; в
чем старше релиз, тем больше проблем.
· "Vec" больше не выдает "неинициализированные" предупреждения в контексте lvalue [perl # 9423].
· Оптимизация с использованием фиксированных строк в регулярных выражениях может вызвать серьезные
снижение производительности в крайних случаях. Это было исправлено [perl # 76546].
· В некоторых случаях, включая пустые подшаблоны в регулярном выражении (например,
"(? :)" или "(?: |)") могут отключить некоторые оптимизации. Это было исправлено.
· Сообщение «Не удается найти номер операции», которое выдает «prototype» при передаче строки.
например "CORE :: nonexistent_keyword" теперь передает UTF-8 и встроенные NUL без изменений
[perl # 97478].
· «Прототип» теперь обрабатывает магические переменные как 1 доллар так же, как немагические переменные
при проверке префикса CORE :: вместо того, чтобы рассматривать их как имена подпрограмм.
· В многопоточном perls блок кода времени выполнения в регулярном выражении может повредить
имя пакета хранится в дереве операций, что приводит к неправильному чтению в «вызывающей стороне» и, возможно,
вылетает [perl # 113060].
· Ссылка на прототип закрытия ("\ & {$ _ [1]}" в обработчике атрибута для закрытия) нет
больше приводит к копии подпрограммы (или ошибкам утверждения при отладке
строит).
· "Eval '__PACKAGE__'" теперь возвращает правильный ответ на многопоточных сборках, если текущая
пакет был назначен (как в "* ThisPackage :: = * ThatPackage ::") [perl
№ 78742].
· Если пакет удален кодом, который он вызывает, "вызывающий" может увидеть
кадр стека, принадлежащий этому удаленному пакету. "вызывающий" может вылететь, если тайник
адрес памяти был повторно использован для скаляра, и подстановка была выполнена на том же самом
скаляр [perl # 113486].
· "UNIVERSAL :: can" больше не обрабатывает свой первый аргумент по-разному в зависимости от того,
это строка или число внутри.
· "Open" с помощью "<&" для режима проверяет, является ли третий аргумент числом в
определение того, следует ли рассматривать его как дескриптор файла или имя дескриптора. Волшебный
такие переменные, как $ 1, всегда не проходили числовую проверку и рассматривались как дескриптор
имена.
· Обработка магических переменных ($ 1, галстуки) "warn" претерпела несколько исправлений.
"FETCH" теперь вызывается только один раз для связанного аргумента или связанного $ @ [perl # 97480]. Связанный
переменные, возвращающие объекты, преобразованные в строку как "", больше не игнорируются. Связанный $ @
что случилось вернуть ссылку предыдущий время, когда он использовался, больше не
игнорируются.
· "Warn" "" теперь обрабатывает $ @ с числом в нем одинаково, независимо от того,
произошло через "$ @ = 3" или "$ @ =" 3 "". Раньше он игнорировал первое. Теперь он добавляет
"\ t ... поймано", как всегда с "$ @ =" 3 "".
· Числовые операторы магических переменных (например, «$ 1 + 1»), используемые для использования с плавающей запятой.
операции, даже если целочисленные операции были более подходящими, что приводило к потере
точность на 64-битных платформах [perl # 109542].
· Унарное отрицание больше не обрабатывает строку как число, если строка использовалась
как число в какой-то момент. Итак, если $ x содержит строку «собаки», возвращается «- $ x».
«-собаки», даже если в какой-то момент произошло «$ y = 0 + $ x».
· В Perl v5.14 исправлено, что "-'- 10 '" возвращает "10", а не "+10". Но волшебные переменные
($ 1, связи) до сих пор не исправлялись [perl # 57706].
· Унарное отрицание теперь обрабатывает строки последовательно, независимо от внутреннего "UTF8"
флаг.
· В Perl v5.16.0 введена регрессия с участием "tr /СПИСОК ПОИСКА / СПИСОК ЗАМЕНЫ / " и
было исправлено. Только первый экземпляр должен иметь значение, если персонаж
появляется более одного раза в "СПИСОК ПОИСКА ". При некоторых обстоятельствах последняя инстанция
отменял все предыдущие. [perl # 113584]
· Регулярные выражения, такие как "qr / \ 87 /", ранее автоматически вставляли символ NUL, таким образом
совпадение, как если бы было написано «qr / \ 00087 /». Теперь это совпадает, как если бы это было
записывается как «qr / 87 /» с сообщением о том, что последовательность «\ 8» не распознана.
· «__SUB__» теперь работает в специальных блоках («BEGIN», «END» и т. Д.).
· Создание потока в Windows теоретически может привести к сбою, если выполняется внутри
Блок «НАЧАТЬ». Он по-прежнему не работает должным образом, но больше не дает сбоев [perl
№ 111610].
· "\ & {''}" (С пустой строкой) теперь автоматически оживляет заглушку, как и любое другое дополнительное имя, и
больше не выдает ошибку «Невозможно создать подпрограмму» [perl # 94476].
· Исправлена регрессия, представленная в v5.14.0, в которой некоторые вызовы "re"
модуль сокрушит $ _ [perl # 113750].
· "Do FILE" теперь всегда либо устанавливает, либо очищает $ @, даже если файл не может быть прочитан. Этот
гарантирует, что тестирование $ @ first (как рекомендовано в документации) всегда возвращает
правильный результат.
· Итератор массива, используемый для конструкции "each @array", теперь правильно сбрасывается, когда
@array очищен [perl # 75596]. Это происходит, например, когда массив глобально
присваивается, как в "@array = (...)", но не когда его ценности назначены. С точки зрения
XS API, это означает, что "av_clear ()" теперь сбрасывает итератор.
Это отражает поведение итератора хеширования, когда хеш очищается.
· "$ Class-> can", "$ class-> isa" и "$ class-> DOES" теперь возвращают правильные результаты,
независимо от того, существует ли этот пакет, на который ссылается $ class [perl # 47113].
· Поступающие сигналы больше не очищают $ @ [perl # 45173].
· Разрешить объявления my () с пустым списком переменных [perl # 113554].
· Во время синтаксического анализа подпрограммы, объявленные после ошибок, больше не оставляют заглушек [perl # 113712].
· Замыкания, не содержащие строковых выражений, больше не привязаны к содержащим их подпрограммам,
позволяя переменным, закрытым внешними подпрограммами, быть освобожденными, когда внешняя подпрограмма
освобожден, даже если внутренняя подпрограмма все еще существует [perl # 89544].
· Дублирование дескрипторов файлов в памяти при открытии с остановленным режимом "<& =" или "> & ="
работает правильно в v5.16.0. Это заставляло новый дескриптор ссылаться на другой
скалярная переменная. Это было исправлено [perl # 113764].
· Выражения "qr //" больше не вызывают сбой с пользовательскими механизмами регулярных выражений, которые не
установить "off" во время компиляции регулярного выражения [perl # 112962].
· "Удалить локальное" больше не дает сбой с некоторыми магическими массивами и хешами [perl
№ 112966].
· "Локально" на элементах определенных магических массивов и хэшей, используемых не для упорядочивания, чтобы иметь
элемент удаляется при выходе из области видимости, даже если элемент не существовал до "local".
· «Скаляр (запись)» больше не возвращает несколько элементов [perl # 73690].
· Преобразование строк в числа с плавающей запятой больше не приводит к неправильному анализу некоторых строк в разделе "использовать
locale "[perl # 109318].
· Отмирающие фильтры @INC больше не пропускают память [perl # 92252].
· Реализации перегруженных операций теперь вызываются в правильном контексте.
Это позволяет, среди прочего, иметь возможность правильно переопределить "<>" [perl # 47119].
· Указание только «резервной» клавиши при вызове «использовать перегрузку» теперь ведет себя правильно
[perl # 113010].
· "Sub foo {my $ a = 0; while ($ a) {...}}" и "sub foo {while (0) {...}}" сейчас
вернуть то же самое [perl # 73618].
· Отрицание строки теперь ведет себя так же, как «использовать целое число»; как и без [perl
№ 113012].
· "Chr" теперь возвращает символ замены Unicode (U + FFFD) для -1, независимо от
внутреннее представительство. -1 используется для переноса, если аргумент был привязан или строка
внутренне.
· Использование "формата" после освобождения вложенного вложенного фрагмента могло привести к сбою с perl v5.12.0, если
формат ссылается на лексические переменные из внешнего подпрограммы.
· Использование "формата" после того, как его вложенная подпрограмма была неопределенной, может привести к сбою с perl v5.10.0,
если формат ссылается на лексические переменные из внешнего подпрограммы.
· Использование "формата", определенного внутри замыкания, который ссылается на лексические переменные.
извне, никогда по-настоящему не работал, если только вызов "записи" не находился непосредственно внутри
закрытие. В v5.10.0 он даже начал вылетать. Теперь копия этого закрытия ближайшего
верхняя часть стека вызовов используется для поиска этих переменных.
· Форматы, закрывающие переменные в специальных блоках, больше не дают сбоев, если существует заглушка
с тем же именем, что и специальный блок, до компиляции специального блока.
· Синтаксический анализатор больше не запутывается, рассматривая "eval foo ()" как синтаксическую ошибку, если
предшествует "print;" [perl # 16249].
· Возвращаемое значение "syscall" больше не усекается на 64-битных платформах [perl
№ 113980].
· Постоянное сворачивание больше не приводит к тому, что "print 1? FOO: BAR" печатается на дескриптор FOO.
[perl # 78064].
· "Do subname" теперь вызывает указанную подпрограмму и вместо этого использует имя файла, которое она возвращает
открытия файла с именем "subname".
· Подпрограммы, найденные проверочными хуками rv2cv (зарегистрированными модулями XS), теперь выполняются
во внимание при определении, должен ли "foo bar" быть дополнительным вызовом
"foo (bar)" или вызов метода "" bar "-> foo".
· "CORE :: foo :: bar" больше не обрабатывается специально, что позволяет использовать глобальные переопределения.
вызывается напрямую через "CORE :: GLOBAL :: uc (...)" [perl # 113016].
· Вызов неопределенной подгруппы, typeglob которой был undefined, теперь производит обычное
Ошибка «Неопределенная подпрограмма вызвана» вместо «Не указана ссылка на КОД».
· Исправлены две ошибки, связанные с @ISA. "* ISA = * glob_without_array" и "undef
*ЭТО; @ {* ISA} "не позволит будущим модификациям @ISA обновить внутреннюю
кеши, используемые для поиска методов. Случай * glob_without_array был регрессом от
Перл v5.12.
· Оптимизация регулярных выражений иногда приводила к сбою "$" с "/ m" или
неправильные совпадения [perl # 114068].
· «__SUB__» теперь работает в блоке «сортировки», когда включающая подпрограмма заранее объявлена
с "sub foo;" синтаксис [perl # 113710].
· Свойства Unicode применяются только к кодовым точкам Unicode, что приводит к некоторым тонкостям.
когда регулярные выражения сопоставляются с указанными выше кодовыми точками Unicode. Существует
предупреждение сгенерировано, чтобы привлечь ваше внимание к этому. Однако это предупреждение было
генерируется некорректно в некоторых случаях, например, при синтаксическом анализе программы.
Соответствия не-Unicode, такие как «\ w» и «[: word:]», не должны вызывать предупреждение, поскольку
их определения не ограничивают их применением только к кодовым точкам Unicode. Сейчас
сообщение создается только при сопоставлении с "\ p {}" и "\ P {}". Остается
ошибка, [perl # 114148], для очень немногих свойств в Unicode, которые соответствуют только одному
кодовая точка. Предупреждение не генерируется, если они сопоставляются с указанным выше Unicode.
кодовая точка.
· Неинициализированные предупреждения, в которых упоминаются хэш-элементы, будут упоминать имя элемента только в том случае, если
его не было в первой корзине хеш-кода из-за ошибки «off-by-one».
· Ошибка оптимизатора регулярных выражений могла привести к неправильному поведению многострочного символа "^" в
наличие разрывов строк, таких что "" / \ n \ n "= ~ m # \ A (?: ^ / $) # im" не будет соответствовать
[perl # 115242].
· Неудачная «вилка» в контексте списка больше не повреждает стек. "@a = (1, 2, вилка, 3)"
используется для поглощения 2 и присвоения "(1, undef, 3)", если вызов "fork" не удался.
· Исправлены многочисленные утечки памяти, в основном связанные с умирающими переменными,
классы символов регулярных выражений и блоки кода, а также синтаксические ошибки.
· Назначение регулярного выражения ("$ {qr //}") переменной, которая содержит
Число с плавающей запятой больше не вызывает сбоев утверждения при отладке сборок.
· Присвоение регулярного выражения скаляру, содержащему число, больше не вызывает
последующая нумификация для получения случайных чисел.
· Назначение регулярного выражения магической переменной больше не стирает магию.
Это регресс по сравнению с v5.10.
· Назначение регулярного выражения благословенному скаляру больше не приводит к сбоям. Этот
также был регрессом по сравнению с v5.10.
· Регулярное выражение теперь может быть присвоено связанным элементам хэша и массива с выравниванием
в струны.
· Нумерация регулярного выражения больше не приводит к неинициализированному предупреждению.
· Отрицательные индексы массива больше не приводят к игнорированию СУЩЕСТВУЮЩИХ методов связанных переменных.
Это регресс по сравнению с v5.12.
· Отрицательные индексы массива больше не приводят к сбоям в работе с массивами, не привязанными к объектам.
· «$ Byte_overload. = $ Utf8» больше не приводит к двойному кодированию UTF-8, если левый
скаляр произвел строку UTF-8 при последнем вызове перегрузки.
· "Goto & sub" теперь использует текущее значение @_ вместо использования массива
подпрограмма изначально вызывалась с использованием. Теперь это означает "local @_ = (...); goto & sub"
работает [perl # 43077].
· Если отладчик вызывается рекурсивно, он больше не топчет свои собственные лексические
переменные. Раньше при рекурсии все вызовы имели один и тот же набор лексических
переменные [perl # 115742].
· * _ {ARRAY}, возвращаемый подпрограммой, больше не становится самопроизвольно пустым.
· При использовании "say" для печати привязанного дескриптора файла значение "$ \" является правильным.
локализован, даже если ранее он был undef. [perl # 119927]
Известный Проблемы
· Строки с флагом UTF8 в% ENV в HP-UX 11.00 содержат ошибки
Взаимодействие строк с флагом UTF8 и% ENV в HP-UX 11.00 в настоящее время является изворотливым.
каким-то еще не полностью диагностированным способом. Ожидайте неудачных тестов в т / op / magic.tмаркетологов. На втором месте Instagram –
неизвестное поведение при хранении широких символов в окружении.
Некролог
Ходжунг Юн (AMORETTE), 24 года, из Сеула, Южная Корея, отправился на длительный отдых 8 мая 2013 года.
с фигуркой ламы и карточкой TIMTOADY с автографом. Он был блестящим молодым Perl 5 и 6.
хакер и преданный участник Seoul.pm. Он программировал Perl, говорил на Perl, ел Perl и
любил Perl. Мы полагаем, что он все еще программирует на Perl на своем сломанном ноутбуке IBM.
где-то. Его будет не хватать.
Благодарности
Perl v5.18.0 представляет собой примерно 12 месяцев разработки, начиная с Perl v5.16.0 и
содержит примерно 400,000 строк изменений в 2,100 файлах от 113 авторов.
Perl продолжает процветать уже третье десятилетие благодаря активному сообществу пользователей.
и разработчики. Следующие люди, как известно, внесли улучшения, которые
стал Perl v5.18.0:
Аарон Крейн, Аарон Тревена, Абхиджит Менон-Сен, Адриан М. Энаке, Алан Хаггай Алави,
Александр Черный, Эндрю Там, Энди Догерти, Антон Никишаев, Аристотель Пагальцис,
Августина Блэр, Боб Эрнст, Брэд Гилберт, Брено Дж. Де Оливейра, Брайан Карлсон, Брайан
Фрейзер, Чарли Гонсалес, Чип Зальценберг, Крис «BinGOs» Уильямс, Кристиан Хансен,
Колин Куски, Крейг А. Берри, Дагфинн Илмари Маннсакер, Дэниел Драган, Дэниел Перретт,
Дарин Макбрайд, Дэйв Рольски, Дэвид Голден, Дэвид Ледбитер, Дэвид Митчелл, Дэвид Никол,
Доминик Харгривз, Э. Чороба, Эрик Рассол, Эван Миллер, отец Хризостомос, Флориан
Рагвиц, Франсуа Перрад, Джордж Грир, Горо Фудзи, Х.Мерин Бранд, Герберт Бройнунг, Хьюго
ван дер Санден, Игорь Зайцев, Джеймс Э. Кинан, Ян Дюбуа, Жасмин Ахуджа, Джерри Д. Хедден,
Джесс Робинсон, Джесси Люрс, Хоакин Ферреро, Джоэл Бергер, Джон Гудиер, Джон Пикок,
Карен Этеридж, Карл Уильямсон, Картик Раджагопалан, Кент Фредрик, Леон Тиммерманс,
Лукас Холт, Лукас Май, Маркус Холланд-Мориц, Маркус Янсен, Мартин Хаш, Мэтью
Хорсфолл, Макс Майшайн, Майкл Г. Шверн, Михаэль Шредер, Мориц Ленц, Николас
Кларк, Нико Тыни, Олег Нестеров, Патрик Хегглунд, Пол Грин, Пол Джонсон, Пол
Маркиз, Питер Мартини, Рафаэль Гарсиа-Суарес, Рейни Урбан, Рене Беккер, Реза
Розендаль, Рикардо Синьес, Робин Баркер, Рональд Дж. Кимбалл, Руслан Закиров, Сальвадор
Фандин ~ о, Сойер Икс, Скотт Лэннинг, Сергей Алексеев, Шон М. Мур, Шираката Кентаро,
Шломи Фиш, Сизиф, Smylers, Стеффен Мюллер, Стив Хэй, Стив Питерс, Стивен
Шубигер, Салливан Бек, Свен Стрикрот, Себастьян Апергис-Трамони, Томас Сибли,
Тобиас Лейх, Том Вайант, Тони Кук, Вадим Коновалов, Винсент Пит, Фолькер Шац, Уолт
Манковски, Ив Ортон, Зефрам.
Приведенный выше список почти наверняка неполный, поскольку он автоматически создается из
история контроля версий. В частности, он не включает имена (очень много
признательны) участников, которые сообщили о проблемах в систему отслеживания ошибок 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.
Используйте perl5180delta в Интернете с помощью сервисов onworks.net