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

Значок OnWorks

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

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

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

ПРОГРАММА:

ИМЯ


perl5100delta - что нового в Perl 5.10.0

ОПИСАНИЕ


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

Многие исправления ошибок в 5.10.0 уже были замечены в отладочных выпусках 5.8.X; Oни
не дублируются здесь и задокументированы в наборе страниц руководства с именем
perl58 [1-8]? дельта.

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


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

В настоящее время доступны следующие новые функции: «переключатель» (добавляет оператор переключения),
say (добавляет встроенную функцию say) и state (добавляет ключевое слово state для объявления
«статические» переменные). Эти функции описаны в отдельных разделах этого документа.

Прагма "feature" также неявно загружается, когда вам требуется минимальная версия Perl.
(с конструкцией "use VERSION") больше или равно 5.9.5. См. Функцию для


Новое -E командной строки переключатель
-E эквивалентна -e, но он неявно включает все дополнительные функции (например, "использовать функцию
": 5.10" ").

Определено-или оператор
Реализован новый оператор «//» (определенное-или). Следующее выражение:

$ a // $ b

просто эквивалентно

определил $ a? $ a: $ b

и утверждение

$ c // = $ d;

теперь можно использовать вместо

$ c = $ d, если не определено $ c;

Оператор «//» имеет тот же приоритет и ассоциативность, что и «||». Особая забота
были приняты, чтобы гарантировать, что этот оператор делает то, что вы имеете в виду, не нарушая старый код, но
некоторые крайние случаи, связанные с пустым регулярным выражением, теперь могут анализироваться по-другому. Видеть
Перлоп для подробностей.

Коммутатор и Smart Совпадение оператор
В Perl 5 теперь есть оператор switch. Это доступно, когда "использовать функцию" переключатель "находится в
эффект. Эта функция вводит три новых ключевых слова: «задано», «когда» и «по умолчанию»:

given ($ foo) {
когда (/ ^ abc /) {$ abc = 1; }
когда (/ ^ def /) {$ def = 1; }
когда (/ ^ xyz /) {$ xyz = 1; }
по умолчанию {$ ничего = 1; }
}

Более полное описание того, как Perl сопоставляет переменную переключателя с «когда»
условия приведены в «Операторах переключения» в perlsyn.

Такой матч называется умный совпадение, а также его можно использовать вне
операторы switch с помощью нового оператора "~~". См. «Подробнее об интеллектуальном сопоставлении» в perlsyn.

Эта функция была предоставлена ​​Робином Хьюстоном.

Стандарт выражения
Рекурсивные шаблоны
Теперь можно писать рекурсивные шаблоны без использования конструкции "(?? {})".
Этот новый способ более эффективен и во многих случаях его легче читать.

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

/
^ # начало строки
(# запустить буфер захвата 1
<# соответствует открывающей угловой скобке
(?: # соответствует одному из:
(?> # не возвращайтесь внутрь этой группы
[^ <>] + # одна или несколько неугловых скобок
) # конец группы без возврата
| # ... или ...
(? 1) # перейдите к скобке 1 и попробуйте снова
) * # 0 или более раз.
> # совпадение с закрывающей угловой скобкой
) # конец первого буфера захвата
$ # конец строки
/x

Пользователи PCRE должны отметить, что функция рекурсивного регулярного выражения Perl позволяет выполнять обратный поиск в
рекурсивный шаблон, тогда как в PCRE рекурсия является атомарной или «притяжательной» по своей природе.
Как и в примере выше, вы можете добавить (?>) Для выборочного управления этим. (Ив Ортон)

Именованные буферы захвата
Теперь можно назвать захватывающую скобку в шаблоне и ссылаться на
захваченное содержимое по имени. Синтаксис именования: "(? ....) ". Можно
обратная ссылка на именованный буфер с символом "\ k "синтаксис. В коде новый волшебный
хэши «% +» и «% -» могут использоваться для доступа к содержимому буферов захвата.

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

с / (? .) \ k / $ + {letter} / г

Только буферы с определенным содержимым будут "видимыми" в хэше "% +", поэтому он
можно сделать что-то вроде

foreach my $ name (keys% +) {
print "содержимое буфера '$ name' равно $ + {$ name} \ n";
}

Хеш "% -" немного более полный, так как он будет содержать ссылки на массив, содержащие значения.
из всех одноименных буферов захвата, если их должно быть много.

«% +» и «% -» реализованы как связанные хэши в новом модуле.
"Связка :: Хеш :: NamedCapture".

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

/ (A) (? B) (C) (? D) /

$ 1 будет 'A', $ 2 будет 'B', $ 3 будет 'C' и $ 4 будет 'D', а не $ 1 будет 'A',
$ 2 - это 'C', $ 3 - это 'B', а $ 4 - это 'D', что ожидал бы .NET-программист. Это
считается особенностью. :-) (Ив Ортон)

Притяжательные квантификаторы
Perl теперь поддерживает синтаксис «притяжательного квантификатора» шаблона «атомарное совпадение».
По сути, притяжательный квантификатор соответствует столько, сколько может, и никогда не возвращает ничего.
Таким образом, его можно использовать для управления отслеживанием с возвратом. Синтаксис похож на нежадный
соответствие, за исключением использования символа '?' в качестве модификатора используется знак "+". Таким образом "? +",
«* +», «++», «{min, max} +» теперь являются допустимыми квантификаторами. (Ив Ортон)

Контрольные глаголы с возвратом
Механизм регулярных выражений теперь поддерживает ряд специальных команд управления возвратом:
(* THEN), (* PRUNE), (* MARK), (* SKIP), (* COMMIT), (* FAIL) и (* ACCEPT). См. Perlre для
их описания. (Ив Ортон)

Относительные обратные ссылки
Новый синтаксис «\ g {N}» или «\ gN», где «N» - десятичное целое число, позволяет использовать более безопасную форму
нотация обратных ссылок, а также разрешение относительных обратных ссылок. Это должно сделать
легче создавать и внедрять шаблоны, содержащие обратные ссылки. См. "Захват
буферы »на perlre. (Ив Ортон)

"\ K" побег
В ядро ​​добавлен функционал модуля Джеффа Пиньяна Regexp :: Keep. В
регулярные выражения, теперь вы можете использовать специальный escape-символ "\ K" как способ что-то сделать
как положительный взгляд назад с плавающей длиной. Это также полезно для таких замен, как:

s / (foo) bar / $ 1 / г

который теперь можно преобразовать в

s / foo \ Kbar // г

что намного эффективнее. (Ив Ортон)

Вертикальные и горизонтальные пробелы и перенос строки
Регулярные выражения теперь распознают escape-символы "\ v" и "\ h", соответствующие вертикальному и
горизонтальные пробелы соответственно. «\ V» и «\ H» логически соответствуют своим дополнениям.

"\ R" соответствует стандартному переносу строки, то есть вертикальному пробелу, а также множественному
последовательность символов "\ x0D \ x0A".

Дополнительные предварительные и послематчевые захваты с флагом / p
Для регулярных выражений появился новый флаг "/ p". Использование этого делает двигатель
сохранить копию части совпадающей строки перед соответствующей подстрокой в
новая специальная переменная "$ {^ PREMATCH}", часть после соответствующей подстроки
«$ {^ POSTMATCH}», а сама совпавшая подстрока - «$ {^ MATCH}».

Perl по-прежнему может сохранять эти подстроки в специальных переменных «$` »,« $ '», $ &,
но использование этих переменных в любом месте программы добавляет штраф ко всем обычным
выражение совпадает, тогда как если вы используете флаг "/ p" и новые специальные переменные
вместо этого вы платите только за регулярные выражения, в которых используется флаг.

Подробнее о новых переменных см. Perlvar; для использования обычного
флаг выражения, см. perlop и perlre.

"сказать()"
сказать() - это новая встроенная функция, доступная только в том случае, если действует "использовать функцию 'say'", т. е.
похож на Распечатать(), но это неявно добавляет новую строку к печатаемой строке. Смотрите "сказать"
в perlfunc. (Робин Хьюстон)

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

мой $ _;

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

В блоке "map" или "grep", если $ _ ранее был my'ed, тогда $ _ внутри блока будет
лексический также (и ограничен блоком).

В области, где $ _ был лексикализован, вы все еще можете иметь доступ к глобальной версии
$ _, используя $ :: _, или, проще говоря, переопределив лексическое объявление с помощью "our $ _".
(Рафаэль Гарсиа-Суарес)

Команда "_" прототип
Добавлен новый прототип персонажа. "_" эквивалентно "$", но по умолчанию $ _, если
соответствующий аргумент не предоставляется (оба символа «$» и «_» обозначают скаляр). Из-за
необязательный характер аргумента, вы можете использовать его только в конце прототипа или перед
точка с запятой.

Это имеет небольшое несовместимое последствие: прототип() функция была настроена на
возвращать "_" для некоторых встроенных функций в соответствующих случаях (например,
"прототип ('CORE :: rmdir')"). (Рафаэль Гарсиа-Суарес)

ЮНИЧЕК Блоки
«UNITCHECK», был введен новый специальный кодовый блок в дополнение к «BEGIN»,
«ПРОВЕРКА», «НАЧАЛО» и «КОНЕЦ».

Блоки "CHECK" и "INIT", хотя и полезны для некоторых специализированных целей, всегда выполняются.
при переходе между компиляцией и выполнением основной программы, и, таким образом,
бесполезны всякий раз, когда код загружается во время выполнения. С другой стороны, блоки "UNITCHECK"
выполняется сразу после того, как модуль, который их определил, был скомпилирован. См. Perlmod для получения дополнительной информации
Информация. (Алекс Гоф)

Новое Прагма, "МРО"
Добавлена ​​новая прагма «mro» (для порядка разрешения методов). Позволяет включать,
на основе класса, алгоритм, который Perl использует для поиска унаследованных методов в случае
иерархия множественного наследования. MRO по умолчанию не изменился (DFS, для Depth First
Поиск). Доступен еще один MRO: алгоритм C3. См. Mro для получения дополнительной информации.
(Брэндон Блэк)

Обратите внимание, что из-за изменений в реализации поиска по иерархии классов код, который использовал
для отмены определения * ISA-глобус, скорее всего, сломается. Во всяком случае, undef'ing * ISA была на стороне-
эффект удаления магии на массив @ISA и не должен был выполняться в первую очередь
место. Кроме того, кеш * :: ISA :: CACHE :: больше не существует; для принудительного сброса кеша @ISA,
теперь вам нужно использовать API "mro" или, проще говоря, назначить @ISA (например, с помощью "@ISA =
@ЭТО").

readdir () май возвращают a "короткая имя файла" on Windows
Команда readdir () функция может возвращать "короткое имя файла", если длинное имя файла содержит
символы вне кодовой страницы ANSI. сходным образом Cwd :: cwd () может вернуть короткий каталог
имя и glob () также может возвращать короткие имена. В файловой системе NTFS эти короткие
имена всегда могут быть представлены в кодовой странице ANSI. Это не будет верно для всех остальных
драйверы файловой системы; например, файловая система FAT хранит короткие имена файлов в кодовой странице OEM,
поэтому некоторые файлы на томах FAT остаются недоступными через API ANSI.

Точно так же $ ^ X, @INC и $ ENV {PATH} предварительно обрабатываются при запуске, чтобы убедиться, что все пути
действительны в кодовой странице ANSI (если возможно).

Команда Win32 :: GetLongPathName () функция теперь возвращает правильное длинное имя файла в кодировке UTF-8
вместо использования заменяющих символов для принудительного включения имени в кодовую страницу ANSI. Новый
Win32 :: GetANSIPathName () можно использовать функцию, чтобы превратить длинный путь в короткий
только если длинный не может быть представлен в кодовой странице ANSI.

Многие другие функции в модуле Win32 были улучшены, чтобы принимать кодировку UTF-8.
аргументы. См. Подробности в Win32.

Ридпайп () is сейчас переопределение
Встроенная функция Ридпайп () теперь можно переопределить. Отмена этого разрешения также позволяет
переопределить его аналог оператора, "qx //" (также известный как "` `"). Более того, теперь по умолчанию он равен $ _.
если аргумент не указан. (Рафаэль Гарсиа-Суарес)

По умолчанию аргумент для readline ()
readline () теперь по умолчанию используется * ARGV, если аргумент не указан. (Рафаэль Гарсиа-Суарес)

государство() переменные
Введен новый класс переменных. Переменные состояния похожи на "мой"
переменные, но объявляются с ключевым словом "state" вместо "my". Они видны
только в их лексической области видимости, но их значение является постоянным: в отличие от переменных "my", они
не является неопределенным при входе в область действия, но сохраняет свое предыдущее значение. (Рафаэль Гарсиа-Суарес,
Николас Кларк)

Чтобы использовать переменные состояния, необходимо включить их, используя

использовать функцию «состояние»;

или с помощью переключателя командной строки «-E» в однострочном тексте. См. «Постоянный частный
Переменные "в perlsub.

Stacked файлтест Операторы
В качестве новой формы синтаксического сахара теперь можно складывать операторы filetest. Ты
теперь можно написать «-f -w -x $ file» в строке, чтобы обозначить «-x $ file && -w _ && -f _». См. "-X" в
перфункц.

УНИВЕРСАЛЬНЫЙ :: ДЕЛАЕТ ()
В классе «UNIVERSAL» появился новый метод «DOES ()». Он был добавлен для решения семантических
проблемы с методом "isa ()". "isa ()" проверяет наследование, а "DOES ()" было
предназначен для переопределения, когда авторы модулей используют другие типы отношений между классами
(помимо наследования). (хроматический)

См. "$ Obj-> DOES (ROLE)" в UNIVERSAL.

Форматы
Форматы были улучшены несколькими способами. Новое поле "^ *" можно использовать для переменной ширины,
однострочный текст. Нулевые символы теперь корректно обрабатываются в строках изображения. С использованием
«@ #» и «~~» вместе теперь будут вызывать ошибку времени компиляции, поскольку эти поля формата
несовместимо. perlform был улучшен, и различные ошибки исправлены.

Байт-порядок модификаторы для пакет() и распаковать ()
Есть два новых модификатора порядка байтов: ">" (прямой порядок байтов) и "<" (прямой порядок байтов), которые могут
быть добавленным к большинству пакет() и распаковать () шаблонные символы и группы, чтобы заставить определенные
порядок байтов для этого типа или группы. Подробнее см. «Pack» в perlfunc и perlpacktut.

«нет ВЕРСИЯ"
Теперь вы можете использовать «нет», за которым следует номер версии, чтобы указать, что вы хотите использовать
версия perl старше указанной.

"чдыр", "chmod" и "чоун" on файловые ручки
"chdir", "chmod" и "chown" теперь могут работать с дескрипторами файлов, а также с именами файлов, если
система поддерживает соответственно "fchdir", "fchmod" и "fchown" благодаря предоставленному патчу
пользователя Gisle Aas.

OS группы
$ (и $) теперь возвращают группы в том порядке, в котором их возвращает ОС, благодаря Жисле Аас.
Раньше этого не было.

рекурсивный sort подписка
Теперь вы можете использовать рекурсивные подпрограммы с Сортировать(), спасибо Робину Хьюстону.

Исключения in постоянная складывающиеся
Подпрограмма сворачивания констант теперь обернута в обработчик исключений, и если сворачивание выбрасывает
исключение (например, попытка оценить 0/0), perl теперь сохраняет текущее дерево опций,
вместо того, чтобы прерывать всю программу. Без этого изменения программы не будут компилироваться
если бы у них были выражения, которые генерировали исключения, даже если те
выражения были в коде, который никогда не мог быть достигнут во время выполнения. (Николас Кларк, Дэйв
Митчелл)

Источник фильтры in @ИНК
Можно улучшить механизм перехвата подпрограмм в @INC, добавив источник
фильтр поверх дескриптора файла, открытый и возвращенный хуком. Эта функция была запланирована
давным-давно, но до сих пор не работал. См. "Require" в perlfunc для
Детали. (Николас Кларк)

Новое в нашей внутренней среде, переменные
"$ {^ RE_DEBUG_FLAGS}"
Эта переменная контролирует, какие флаги отладки действуют для регулярного выражения.
двигатель при работе в режиме "использовать повторно" отладку "". Подробности смотрите в re.

"$ {^ CHILD_ERROR_NATIVE}"
Эта переменная дает собственный статус, возвращенный последним закрытием канала, обратным апострофом
команда, успешный вызов ждать() or waitpid (), Или из система() оператор. Видеть
perlvar для подробностей. (Предоставлено Жисль Ос.)

"$ {^ RE_TRIE_MAXBUF}"
См. «Три-оптимизация чередования буквальных строк».

"$ {^ WIN32_SLOPPY_STAT}"
См. «Неряшливая статистика в Windows».

Прочее
"unpack ()" теперь по умолчанию распаковывает переменную $ _.

"mkdir ()" без аргументов теперь по умолчанию $ _.

Улучшен вывод внутреннего дампа, поэтому непечатаемые символы, такие как
символы новой строки и backspace выводятся в нотации "\ x", а не в восьмеричном формате.

Команда -C опцию больше нельзя использовать на "#!" линия. Все равно там не работало,
поскольку стандартные потоки уже настроены на этом этапе выполнения perl
устный переводчик. Вы можете использовать binmode () вместо этого получить желаемое поведение.

UCD 5.0.0
Копия базы данных символов Unicode, включенная в Perl 5, обновлена ​​до версии
5.0.0.

СУМАСШЕДШИЙ
MAD, что означает Прочее Атрибут Оформление торжеств, все еще в разработке
что привело к преобразованию Perl 5 в Perl 6. Чтобы включить его, необходимо передать аргумент
"-Dmad" Настроить. Полученный Perl несовместим на двоичном уровне с обычным Perl 5.10,
и имеет штрафы за место и скорость; более того, не все регрессионные тесты проходят с ним.
(Ларри Уолл, Николас Кларк)

убийство() on Windows
На платформах Windows «kill (-9, $ pid)» теперь уничтожает дерево процессов. (В Unix это обеспечивает
сигнал для всех процессов в одной группе процессов.)

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


упаковка и UTF-8 струны
Семантика пакет() и распаковать () в отношении данных в кодировке UTF-8 было изменено.
Обработка теперь по умолчанию является символом на символ, а не байтом на байт в
базовая кодировка. В частности, код, который использовал такие вещи, как "pack (" a * ", $ string)", чтобы увидеть
через кодировку строки теперь просто вернет исходную строку $. Упакованы
строки также могут быть обновлены во время обработки, когда вы сохраняете обновленные символы. Ты
можно получить старое поведение, используя «использовать байты».

Чтобы соответствовать пакет(), "C0" в распаковать () шаблонов указывает, что данные должны
обрабатываться в символьном режиме, т.е. посимвольно; напротив, «U0» в
распаковать () указывает режим UTF-8, в котором упакованная строка обрабатывается в кодировке UTF-8
Форма Unicode на побайтовой основе. В отношении Perl 5.8.X все наоборот, но теперь
согласовано между пакет() и распаковать ().

Кроме того, «C0» и «U0» также могут использоваться в пакет() шаблоны указать соответственно
символьный и байтовый режимы.

«C0» и «U0» в середине формата упаковки или распаковки теперь переключаются на указанный
режим кодирования с учетом группировки парных знаков. Раньше паренсы игнорировались.

Также есть новый пакет() символьный формат "W", который предназначен для замены старого
«С». «C» сохраняется для беззнаковых символов, закодированных как байты во внутреннем представлении строк.
"W" представляет беззнаковые (логические) значения символов, которые могут быть больше 255. Это
поэтому более надежен при работе с данными, потенциально закодированными в UTF-8 (поскольку "C" будет переносить
значения вне диапазона 0..255 и не соблюдают кодировку строки).

На практике это означает, что форматы пакетов теперь не зависят от кодирования, за исключением "C".

Для единообразия "А" в распаковать () формат теперь обрезает все пробелы Unicode с конца
Струна. До Perl 5.9.2 он удалял только классические символы пробела ASCII.

Байт / символ считать которая in распаковать ()
Новая распаковать () шаблонный символ "." возвращает количество байтов или символов.
(в зависимости от выбранного режима кодирования, см. выше) прочитал пока.

Команда $* и $# переменные встали на сторону было удаленный
$ *, который был объявлен устаревшим и заменен модификаторами регулярного выражения "/ s" и "/ m", был удален.

Устаревшая переменная $ # (формат вывода чисел) удалена.

Добавлено два новых серьезных предупреждения: «$ # / $ * больше не поддерживается».

substr () lзначения нет дольше фиксированная длина
Lvalue, возвращаемые формой с тремя аргументами substr () раньше была "фиксированная длина"
window "в исходной строке. В некоторых случаях это могло вызвать неожиданные действия на
расстояние или другое неопределенное поведение. Теперь длина окна подстраивается под
длина присвоенной ему строки.

анализ of "-f _"
Идентификатор «_» теперь должен быть голым словом после оператора filetest. Это решает
количество ошибок синтаксического анализа, когда определена глобальная подпрограмма "_".

":уникальный"
Атрибут ": unique" отключен, поскольку его текущая реализация была
в корне ошибочны и небезопасны.

эффект of псевдокомментарии in Eval
Значение времени компиляции переменной подсказки "% ^ H" теперь может быть передано в eval ("") uated
код. Это делает более полезным реализацию лексических прагм.

Как побочный эффект этого, перегруженность констант теперь распространяется на eval ("").

ChDir FOO
Голый аргумент в пользу chdir () теперь распознается как дескриптор файла. Предыдущие выпуски
интерпретировал голое слово как имя каталога. (Жисль Аас)

Управляемость of .pmc файлов
Старая особенность perl заключалась в том, что перед тем, как "требовать" или "использовать" искать файл с .вечера
расширение, они сначала будут искать похожее имя файла с .pmc расширение. Если этот файл
найден, он будет загружен вместо любого потенциально существующего файла, заканчивающегося на .вечера
расширение.

Ранее .pmc файлы были загружены только в том случае, если они были более свежими, чем совпадающие .вечера .
Начиная с 5.9.4, они всегда будут загружаться, если они существуют.

$ ^ V is сейчас a "версия" объект вместо of a v-строка
$ ^ V все еще можно использовать с форматом% vd в printf, но любые операции на уровне символов
теперь будет обращаться к строковому представлению объекта "версия", а не к порядковым номерам
v-образная струна. Выражения типа «substr ($ ^ V, 0, 2)» или «split //, $ ^ V» больше не работают и
надо переписать.

@- и @+ in паттеранами
Специальные массивы «@ -» и «@ +» больше не интерполируются в регулярных выражениях.
(Садахиро Томоюки)

$ АВТОЗАГРУЗКА сейчас be испорченный
Если вы вызываете подпрограмму по испорченному имени, и если она подчиняется функции AUTOLOAD, то
$ AUTOLOAD будет (правильно) испорчен. (Рик Делани)

Порча и Printf
Когда Perl запущен в режиме заражения, «printf ()» и «sprintf ()» теперь будут отклонять любые испорченные
аргумент формата. (Рафаэль Гарсиа-Суарес)

недеф и сигнал обработчики
Отмена определения или удаление обработчика сигнала с помощью "undef $ SIG {FOO}" теперь эквивалентна настройке
это «ПО УМОЛЧАНИЮ». (Рафаэль Гарсиа-Суарес)

стриктуры и разыменование in определено ()
"use strict 'refs'" игнорировал жесткую ссылку в аргументе определено (), так как
в :

используйте строгие ссылки;
мой $ x = 'foo';
if (определено $$ x) {...}

Теперь это правильно выдает ошибку времени выполнения «Невозможно использовать строку в качестве СКАЛЯРНОЙ ссылки, пока
"строгие ссылки" в использовании ".

«defined @ $ foo» и «defined% $ bar» теперь также подчиняются «strict 'refs'» (то есть $ foo
и $ bar должны быть там правильными ссылками.) ("defined (@foo)" и "defined (% bar)" -
в любом случае нежелательные конструкции.) (Николас Кларк)

"(?п{})" и было удаленный
Конструкция регулярного выражения "(? P {})", которая устарела в Perl 5.8, теперь
удаленный. Вместо этого используйте "(?? {})". (Рафаэль Гарсиа-Суарес)

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

Удаление of байткодом компилятор и of perlcc
perlcc, загрузчик байтов и вспомогательные модули (B :: C, B :: CC, B :: Bytecode и т. д.) являются
больше не распространяется с исходниками perl. Эти экспериментальные инструменты никогда не работали
надежно, и из-за отсутствия добровольцев, чтобы поддерживать их в соответствии с Perl
наработок интерпретатора, было решено удалить их вместо того, чтобы отправлять сломанный
версия тех. Последнюю версию этих модулей можно найти в perl 5.9.4.

Однако структура компилятора B по-прежнему поддерживается ядром Perl, как и более полезные
разрешенные модули (среди прочих, B :: Deparse и B :: Concise).

Удаление of JPL
JPL (Java-Perl Lingo) был удален из архива исходных текстов perl.

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

Раньше исключение не возникало, пока Perl не пытался использовать
рекурсивное наследование при разрешении метода или выполнении поиска "$ foo-> isa ($ bar)".

предупреждения :: включено и предупреждения :: warnif менялась в в пользу пользователей of модули
Поведение в 5.10.x благоприятствует человеку, использующему модуль; Поведение в 5.8.x благоприятствует
модуль записи;

Предположим следующий код:

основные вызовы Foo :: Bar :: baz ()
Foo :: Bar наследуется от Foo :: Base
Foo :: Bar :: baz () вызывает Foo :: Base :: _ bazbaz ()
Foo :: Base :: _ bazbaz () вызывает: warnings :: warnif ('substr', 'какое-то предупреждение
сообщение');

В версии 5.8.x код предупреждает, когда Foo :: Bar содержит «предупреждения об использовании»; Неважно, если
В Foo :: Base или main включены предупреждения, чтобы отключить предупреждение о необходимости изменения Foo :: Bar.

В версии 5.10.0 и новее код предупреждает, когда main содержит «предупреждения об использовании»; Не важно
если в Foo :: Base или Foo :: Bar включены предупреждения, чтобы отключить предупреждение, которое нужно изменить
основной.

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


Модернизация individual ядро модули
Еще больше основных модулей теперь также доступны отдельно через CPAN. Если вы хотите
обновите один из этих модулей, вам не нужно ждать выхода новой версии perl. Изнутри
оболочка cpan, запустив команду 'r', сообщит о модулях с доступными обновлениями.
См. "Perldoc CPAN" для получения дополнительной информации.

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

"МРО"
Эта новая прагма позволяет изменить алгоритм, используемый для разрешения унаследованных методов. Видеть
«Новая Прагма,« МРО »вверху.

Область действия прагмы sort
Прагма sort теперь имеет лексическую область видимости. Раньше его влияние было глобальным.

Охват "bignum", "bigint", "bigrat"
Три числовые прагмы «bignum», «bigint» и «bigrat» теперь имеют лексическую область видимости.
(Тел.)

"база"
Прагма «base» теперь предупреждает, если класс пытается наследовать от самого себя. (Кертис «Овидий»
По)

«строгие» и «предупреждения»
"strict" и "warnings" теперь будут громко жаловаться, если они загружаются через некорректный
корпус (как в «использовать строгий;»). (Йохан Вроманс)

"версия"
Модуль «версия» обеспечивает поддержку объектов версии.

"предупреждения"
Прагма «warnings» больше не загружает «Carp». Это означает, что код, который использовал
Подпрограммы "Carp", не загруженные во время компиляции, могут нуждаться в корректировке;
как правило, следующий (ошибочный) код больше не будет работать и потребует
скобки добавляются после имени функции:

использовать предупреждения;
требуется карп;
Карп :: исповедуй "аргх";

"Меньше"
«less» теперь делает что-то полезное (или, по крайней мере, пытается). Фактически, это было
превратилась в лексическую прагму. Итак, теперь в ваших модулях вы можете проверить,
попросили использовать меньше процессора или памяти, меньше магии или, может быть, даже меньше жира.
Смотрите меньше, чтобы получить больше. (Джошуа бен Джор)

Новое модули
· "Encoding :: warnings" от Одри Танг - это модуль для выдачи предупреждений всякий раз, когда ASCII
Символьная строка, содержащая байты старшего разряда, неявно преобразуется в UTF-8. Это
лексическая прагма начиная с Perl 5.9.4; на более старых версиях Perl эффект глобален.

· "Module :: CoreList" Ричарда Клэмпа - это небольшой удобный модуль, который расскажет, что
версии основных модулей поставляются с любыми версиями Perl 5. Он поставляется с командой:
линейный интерфейс, "corelist".

· "Math :: BigInt :: FastCalc" - это XS-совместимая и, следовательно, более быстрая версия
"Math :: BigInt :: Calc".

· «Compress :: Zlib» - это интерфейс к библиотеке сжатия zlib. Он поставляется с
связанная версия zlib, поэтому наличие работающей zlib не является обязательным условием для ее установки.
Используется "Archive :: Tar" (см. Ниже).

· «IO :: Zlib» - это интерфейс в стиле «IO ::» для «Compress :: Zlib».

· "Archive :: Tar" - модуль для работы с "tar" архивами.

· "Digest :: SHA" - это модуль, используемый для вычисления многих типов дайджестов SHA, был
включен для поддержки SHA в модуле CPAN.

· Добавлены "ExtUtils :: CBuilder" и "ExtUtils :: ParseXS".

· Добавлен "Hash :: Util :: FieldHash" от Анно Сигеля. Этот модуль обеспечивает поддержку
для поле хэши: хеши, которые поддерживают связь ссылки со значением в
поточно-безопасный способ сборки мусора. Такие хеши полезно реализовать наизнанку.
объекты.

· Добавлен "Module :: Build" Кена Уильямса. Это альтернатива
«ExtUtils :: MakeMaker» для сборки и установки модулей Perl.

· Добавлен "Module :: Load" Йоса Буманса. Он предоставляет единый интерфейс для загрузки
Модули Perl и .pl файлы.

· Добавлен "Module :: Loaded", автор Jos Boumans. Используется для отметки модулей как загруженных
или выгружен.

· Добавлен "Package :: Constants" Джоса Буманса. Это простой помощник, чтобы перечислить все
константы, объявленные в данном пакете.

· Добавлен "Win32API :: File" Тая Маккуина (для сборок Windows). Этот модуль
обеспечивает низкоуровневый доступ к системным вызовам API Win32 для файлов / каталогов.

· "Locale :: Maketext :: Simple", необходимый для CPANPLUS, представляет собой простую оболочку для
"Locale :: Maketext :: Lexicon". Обратите внимание, что "Locale :: Maketext :: Lexicon" не входит в
ядро Perl; поведение "Locale :: Maketext :: Simple" постепенно ухудшается, когда
последнего нет.

· «Params :: Check» реализует общий механизм анализа / проверки входных данных. Он используется
КПАНПЛЮС.

· «Term :: UI» упрощает задачу задавать вопросы в командной строке терминала.

· «Object :: Accessor» предоставляет интерфейс для создания средств доступа для каждого объекта.

· "Module :: Pluggable" - это простой фреймворк для создания модулей, которые принимают подключаемые суб-
модули.

· "Module :: Load :: Conditional" предоставляет простые способы запроса и, возможно, загрузки установленных
модули.

· «Time :: Piece» предоставляет объектно-ориентированный интерфейс для функций времени, перекрывая
Модульное местное время() и gmtime ().

· «IPC :: Cmd» помогает находить и запускать внешние команды, возможно, в интерактивном режиме.

· «File :: Fetch» ​​обеспечивает простой универсальный механизм выборки файлов.

· «Журнал :: Сообщение» и «Журнал :: Сообщение :: Простой» используются функцией журнала «CPANPLUS».

· «Архив :: Извлечь» - это общий механизм извлечения архива для .tar (простой, сжатый
или bzip) или .zip файлы.

· «CPANPLUS» предоставляет API и инструмент командной строки для доступа к зеркалам CPAN.

· "Pod :: Escapes" предоставляет служебные программы, которые полезны при декодировании последовательностей Pod E <...>.

· "Pod :: Simple" теперь является серверной частью для нескольких связанных с Pod модулей, включенных в
Перл.

Выбранный изменения в Основные Модули
"Атрибут :: Обработчики"
«Attribute :: Handlers» теперь может сообщать вызывающий файл и номер строки. (Дэйвид
Фельдман)

Все интерпретируемые атрибуты теперь передаются как ссылки на массив. (Дэмиан Конвей)

"Б :: Линт"
«B :: Lint» теперь основан на «Module :: Pluggable», поэтому его можно расширять с помощью плагинов.
(Джошуа бен Джор)

"B" Теперь можно получить доступ к лексическим подсказкам прагмы ("% ^ H") с помощью метода
B :: COP :: hints_hash (). Он возвращает объект «B :: RHE», который, в свою очередь, может использоваться для получения
ссылка на хэш через метод B :: RHE :: HASH (). (Джошуа бен Джор)

"Нить"
Так как старая модель потоковой передачи 5005thread была удалена в пользу ithreads
схема, модуль "Thread" теперь является оболочкой совместимости, которая будет использоваться в старом коде
Только. Он был удален из списка динамических расширений по умолчанию.

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


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

Он также может отображать родительское дерево наследования данного класса с буквой «i».
команда.

птар
«ptar» - это чистая реализация «tar» на Perl, которая поставляется с «Archive :: Tar».

птардифф
"ptardiff" - небольшая утилита, используемая для генерации различий между содержимым tar.
архив и дерево каталогов. Как и ptar, он поставляется с Archive :: Tar.

shasum
"shasum" - это утилита командной строки, используемая для печати или проверки дайджестов SHA. Это приходит
с новым модулем "Дайджест :: SHA".

основной список
Утилита «corelist» теперь установлена ​​с perl (см. «Новые модули» выше).

h2ph и h2xs
«h2ph» и «h2xs» были сделаны более устойчивыми по отношению к «современному» коду C.

«h2xs» реализует новую опцию «--use-xsloader» для принудительного использования «XSLoader» даже в
обратно совместимые модули.

Исправлена ​​обработка имен авторов с апострофами.

Любые перечисления с отрицательными значениями теперь пропускаются.

перливп
"perlivp" больше не проверяет наличие * .ph файлы по умолчанию. Используйте новую опцию "-a" для запуска
ВСЕ тесты.

найти2perl
«find2perl» теперь принимает «-print» как действие по умолчанию. Раньше это нужно было
указано явно.

В «find2perl» исправлено несколько ошибок, касающихся «-exec» и «-eval». Так же
были добавлены параметры "-path", "-ipath" и "-iname".

config_data
config_data - это новая утилита, которая поставляется вместе с Module :: Build. Он предоставляет команду:
линейный интерфейс для настройки модулей Perl, использующих фреймворк Module :: Build
настраиваемости (то есть модули * :: ConfigData, содержащие локальную конфигурацию
информацию для своих родительских модулей.)

cpanp
Добавлена ​​оболочка CPANPLUS "cpanp". ("cpanp-run-perl", помощник для CPANPLUS
операция, тоже была добавлена, но не предназначена для прямого использования).

cpan2dist
«cpan2dist» - это новая утилита, поставляемая с CPANPLUS. Это инструмент для создания
дистрибутивы (или пакеты) из модулей CPAN.

pod2html
Вывод «pod2html» был улучшен, чтобы его можно было настраивать с помощью CSS. Некоторые
Также были исправлены проблемы с форматированием. (Яри Аалто)

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


Справочная страница perlpragma описывает, как писать собственные лексические прагмы на чистом Perl.
(то, что возможно, начиная с 5.9.4).

Новая справочная страница perlglossary - это глоссарий терминов, используемых в документации Perl,
технические и прочие, любезно предоставленные O'Reilly Media, Inc.

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

Справочная страница perlreapi описывает интерфейс интерпретатора perl, который используется для написания
подключаемые механизмы регулярных выражений (автор - AEvar Arnfjoer` Bjarmason).

Справочная страница perlunitut - это руководство по программированию с использованием Unicode и строковых кодировок в
Perl, любезно предоставлен Джурдом Ваалбоером.

Добавлена ​​новая страница руководства, perlunifaq (часто задаваемые вопросы о Perl Unicode) (Джурд Ваалбоер).

На странице руководства perlcommunity дается описание сообщества Perl в Интернете и в
реальная жизнь. (Эдгар «Тризор» Беринг)

Страница справочника CORE документирует пространство имен "CORE ::". (Тел.)

Давно существующая функция регулярных выражений "/(?{...})/", устанавливающая $ _ и pos () теперь задокументировано.

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


На месте сортировка
Сортировка массивов на месте ("@a = sort @a") теперь оптимизирована, чтобы избежать создания временной копии.
массива.

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

лексический массив доступ
Доступ к элементам лексических массивов через числовую константу от 0 до 255 теперь доступен.
Быстрее. (Раньше это было только для глобальных массивов.)

XS-помощь СВАШГЕТ
Код на чистом Perl, который Perl использовал для получения свойств Unicode и транслитерации.
отображение было переопределено в XS.

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

Некоторые из основных модулей были преобразованы для использования этой функции в своей системе.
зависимые константы - как результат "использовать POSIX;" теперь занимает примерно на 200К меньше памяти.

"PERL_DONT_CREATE_GVSV"
Новый флаг компиляции «PERL_DONT_CREATE_GVSV», представленный как опция в Perl 5.8.8,
включен по умолчанию в perl 5.9.3. Это предотвращает создание Perl пустого скаляра с помощью
каждый новый typeglob. Подробнее см. Perl589delta.

Слабый Рекомендации более дешевый
Создание слабой ссылки сейчас O(1) , а не О (п), любезно предоставлено Николасом Кларком. Слабый
ссылка на удаление остается О (п), но если удаление происходит только при выходе из программы, это может быть
пропущено полностью.

Сортировать() улучшения
Сальвадор Фандиньо предоставил улучшения для уменьшения использования памяти при сортировке и повышения скорости
до некоторых случаев.

Память Оптимизации
Некоторые внутренние структуры данных (typeglobs, GV, CV, форматы) были реструктурированы, чтобы
используйте меньше памяти. (Николас Кларк)

UTF-8 кэш оптимизация
Код кеширования UTF-8 теперь более эффективен и используется чаще. (Николас Кларк)

небрежный состояние on Windows
В Windows perl's стат () функция обычно открывает файл для определения количества ссылок и
обновить атрибуты, которые могли быть изменены с помощью жестких ссылок. Параметр
$ {^ WIN32_SLOPPY_STAT} до истинного значения ускоряет стат () не выполняя эту операцию.
(Ян Дюбуа)

Стандарт выражения Оптимизации
Двигатель де-рекурсивен
Механизм регулярных выражений больше не является рекурсивным, что означает, что использованные шаблоны
переполнение стека либо умрет с полезными объяснениями, либо завершится,
что, поскольку они и раньше могли взорвать стек, вероятно, займет очень много времени.
время случиться. Если вы время от времени испытывали переполнение стека (или segfault)
и обновите, чтобы обнаружить, что теперь perl, по-видимому, зависает, ищите вырожденный
регулярное выражение. (Дэйв Митчелл)

Символьные классы с одним символом, рассматриваемые как литералы
Классы одного персонажа теперь обрабатываются так же, как если бы персонаж был
используется как литерал, что означает, что код, использующий классы символов в качестве механизма экранирования
увидит ускорение. (Ив Ортон)

Оптимизация чередования буквальных строк
По возможности чередования оптимизируются в более эффективные структуры согласования.
Чередования строковых литералов объединяются в дерево и сопоставляются одновременно.
Это означает, что вместо времени O (N) для согласования N чередований в данной точке,
новый код работает в O(1 раз. Была добавлена ​​новая специальная переменная $ {^ RE_TRIE_MAXBUF}.
добавлен для точной настройки этой оптимизации. (Ив Ортон)

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

Оптимизация начальной точки Aho-Corasick
Когда паттерн начинается с легкого чередования и нет ничего лучше
доступных оптимизаций, механизм регулярных выражений будет использовать сопоставление Aho-Corasick, чтобы найти
Начальная точка. (Ив Ортон)

погрузка и Конфигурация Улучшения


Конфигурация улучшению
"-Dusesitecustomize"
Настройку @INC во время выполнения можно включить, передав флаг "-Dusesitecustomize"
Настроить. Когда включено, это заставит Perl работать $ sitelibexp / sitecustomize.pl
прежде всего. Затем этот сценарий можно настроить для добавления дополнительных записей в
@ИНК.

Перемещаемые установки
Теперь есть поддержка Configure для создания перемещаемого дерева Perl. Если вы настроите
с "-Duserelocatableinc", затем пути в @INC (и все остальное в% Config)
может быть необязательно размещен по пути к исполняемому файлу perl.

Это означает, что если строка "... /" находится в начале любого пути, она
заменяется каталогом $ ^ X. Таким образом, перемещение может быть настроено на индивидуальном уровне.
основа каталога, хотя по умолчанию с "-Duserelocatableinc" все
переехал. Первоначальная установка выполняется с исходным настроенным префиксом.

strlcat () и strlcpy ()
Теперь процесс настройки определяет, strlcat () и strlcpy () имеются.
Когда они недоступны, используется собственная версия perl (из общедоступной версии Расс Олбери).
доменная реализация). Теперь они используются в различных местах интерпретатора perl. (Стив
Питерс)

"d_pseudofork" и "d_printf_format_null"
Новая переменная конфигурации, доступная как $ Config {d_pseudofork} в модуле Config,
было добавлено, чтобы различать настоящие вилка () поддержка от поддельной псевдо-вилки, используемой на
Платформы Windows.

Была добавлена ​​новая переменная конфигурации "d_printf_format_null", чтобы узнать,
Форматы, подобные printf, могут иметь значение NULL.

Настроить справку
«Настроить -h» был расширен наиболее часто используемыми параметрами.

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

Поддержка компиляторов Borland
Сборка компиляторов Borland на Win32 должна работать более плавно. Особенно
Стив Хэй отошел в сторону от многих предупреждений, выдаваемых их компиляторами и
по крайней мере одна внутренняя ошибка компилятора C.

Статическая сборка в Windows
Расширения Perl в Windows теперь могут быть статически встроены в Perl DLL.

Кроме того, теперь можно создать «perl-static.exe», который не зависит от Perl.
DLL на Win32. За подробностями обращайтесь к make-файлам Win32. (Вадим Коновалов)

файлы ppport.h
Все ppport.h файлы в модулях XS, связанных с perl, теперь автоматически генерируются при сборке
время. (Маркус Холланд-Мориц)

Совместимость с C ++
Были предприняты попытки сделать Perl и основные модули XS компилируемыми с различными
Компиляторы C ++ (хотя с некоторыми компиляторами на
некоторые из протестированных платформ.)

Поддержка 64-битного компилятора Microsoft
Улучшена поддержка сборки Perl с помощью 64-разрядного компилятора Microsoft.
(активное состояние)

Visual C + +
Perl теперь можно скомпилировать с Microsoft Visual C ++ 2005 (и 2008 Beta 2).

Сборки Win32
Все сборки win32 (MS-Win, WinCE) были объединены и очищены.

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

Новое Or Улучшенный Платформы
Сообщается, что Perl работает на Symbian OS. См. Perlsymbian для получения дополнительной информации.

Было внесено множество улучшений в обеспечение правильной работы Perl на z / OS.

Сообщается, что Perl работает с DragonFlyBSD и MidnightBSD.

Сообщается также, что Perl работает с NexentaOS ( http://www.gnusolaris.org/ ).

Улучшен порт VMS. См. Perlvms.

Добавлена ​​поддержка Cray XT4 Catamount / Qk. Видеть подсказки / catamount.sh в источнике
распространение кода для получения дополнительной информации.

Патчи от поставщиков были объединены для RedHat и Gentoo.

DynaLoader :: dl_unload_file () теперь работает в Windows.

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


стриктуры в блоках regexp-eval
"strict" не действовало в блоках regexp-eval ("/(?{...})/").

призвание CORE :: require ()
CORE :: require () и CORE :: do () всегда анализировались как требуют () и делать() когда они были
переопределено. Теперь это исправлено.

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

({foo => "bar"}) [0] {foo}

Раньше это была синтаксическая ошибка; "->" был обязательным.

"категория без предупреждений" правильно работает с -w
Ранее при запуске с глобально включенными предупреждениями с помощью "-w" выборочное отключение
определенных категорий предупреждений фактически отключит все предупреждения. Это - сейчас
фиксированный; теперь "без предупреждений 'io';" отключит предупреждения только в классе «io».
Раньше он по ошибке отключал все предупреждения.

улучшения потоков
Были закрыты несколько утечек памяти в ithread. Кроме того, ithreads стали меньше памяти -
интенсивный.

"Threads" теперь является модулем двойной жизни, также доступным на CPAN. Он был расширен в
много способов. А убийство() доступен для потоковой сигнализации. Можно получить нить
статус или список запущенных или присоединяемых потоков.

Для выхода из приложения используется новый метод «thread-> exit ()» (это
по умолчанию для основного потока) или только из текущего потока (это значение по умолчанию для
все остальные темы). С другой стороны, Выход() встроенный теперь всегда вызывает все
приложение для прекращения. (Джерри Д. Хедден)

chr () и отрицательные значения
chr () при отрицательном значении теперь дает "\ x {FFFD}", символ замены Unicode,
кроме случаев, когда действует прагма "bytes", где младшие восемь бит значения
используемый.

PERL5SHELL и заражение
В Windows переменная среды PERL5SHELL теперь проверяется на наличие искажений.
(Рафаэль Гарсиа-Суарес)

Использование * FILE {IO}
Тесты файлов "stat ()" и "-X" теперь обрабатывают дескрипторы файлов * FILE {IO} как * FILE.
(Стив Питерс)

Перегрузка и реблессинг
Теперь перегрузка работает, когда ссылки возвращаются в другой класс. Внутри,
это было реализовано перемещением флага "перегрузки" со ссылки на
референт, который по логике находится там, где он всегда должен был быть. (Николас Кларк)

Перегрузка и UTF-8
Несколько ошибок, связанных с обработкой UTF-8 с объектами с перегруженной строковой обработкой.
были исправлены. (Николас Кларк)

исправлены утечки памяти eval
Традиционно "синтаксическая ошибка eval" сильно просочилась. Многие (но не все) из них
утечки теперь устранены или уменьшены. (Дэйв Митчелл)

Случайное устройство в Windows
В предыдущих версиях perl читал файл / DEV / urandom если он существовал при посеве
его генератор случайных чисел. Этот файл вряд ли существует в Windows, и если бы он был
вероятно, не будет содержать соответствующих данных, поэтому perl больше не пытается читать их на
Windows. (Алекс Дэвис)

PERLIO_DEBUG
Переменная среды "PERLIO_DEBUG" больше не действует для сценариев setuid.
и для скриптов, запускаемых с -T.

Более того, с Perl с поддержкой потоков использование "PERLIO_DEBUG" может привести к внутреннему
переполнение буфера. Это было исправлено.

PerlIO :: скалярные и доступные только для чтения скаляры
PerlIO :: scalar теперь предотвращает запись в скаляры только для чтения. Кроме того, стремиться() Сейчас
поддерживается с файловыми дескрипторами на основе PerlIO :: скаляр, базовая строка - нулевая.
заполняется по мере необходимости. (Рафаэль, Яркко Хиетаниеми)

учиться() и UTF-8
учиться() никогда не работал со строками UTF-8, но мог приводить к ложным результатам. Теперь это
не использовать данные UTF-8. (Ив Ортон)

Критические сигналы
Сигналы SIGILL, SIGBUS и SIGSEGV теперь всегда доставляются "небезопасным" способом.
(в отличие от других сигналов, которые откладываются до тех пор, пока интерпретатор perl не достигнет
достаточно стабильное состояние; см. «Отложенные сигналы (безопасные сигналы)» в perlipc). (Рафаэль)

@ Исправление перехвата INC
Когда модуль или файл загружается через ловушку @ INC, и когда эта ловушка устанавливает
запись имени файла в% INC, __FILE__ теперь устанавливается для этого модуля в соответствии с
содержимое этой записи% INC. (Рафаэль)

Исправление переключателя "-t"
Ключи «-w» и «-t» теперь можно использовать вместе, не беспокоясь о том,
категории предупреждений активированы. (Рафаэль)

Копирование дескрипторов файлов UTF-8
Дублирование дескриптора файла с набором слоев PerlIO ": utf8" теперь будет правильно переносить
этот слой на дублированном дескрипторе файла. (Рафаэль)

Локализация хеш-элементов
Локализация хеш-элемента, ключ которого был указан как переменная, не сработала правильно, если
переменная была изменена, пока местный() был в силе (как в "local $ h {$ x}; ++ $ x").
(Бо Линдберг)

Новое or Изменено Диагностика


Использование неинициализированного значения
Perl теперь попытается сообщить вам имя переменной (если таковая имеется), которая не была определена.

Устаревшее использование мой() в ложном условном
Новое предупреждение об устаревании, Устаревшее использование of мой() in ложный условный, Была
добавлено, чтобы предостеречь от использования сомнительной и устаревшей конструкции

мой $ x, если 0;

См. Perldiag. Вместо этого используйте переменные "состояния".

! = ~ должно быть! ~
Новое предупреждение: «! = ~ Должно быть! ~», Чтобы предотвратить эту ошибку в написании не-
оператор сопоставления.

Новая строка в строке, выровненной по левому краю
Предупреждение Новая линия in выровненный по левому краю string был удален.

Слишком поздно для опции "-T"
Ошибка Слишком поздно для "-Т" вариант был переформулирован для большей наглядности.

Переменная "% s"% s маскирует предыдущее объявление
Это предупреждение теперь выдается в более последовательных случаях; короче, когда один из
задействованные объявления - это "моя" переменная:

мой $ x; мой $ x; # предупреждает
мой $ x; наш $ x; # предупреждает
наш $ x; мой $ x; # предупреждает

С другой стороны, следующее:

наш $ x; наш $ x;

теперь выдает предупреждение "" наша "переменная% s повторно объявлена".

readdir ()/closedir ()/так далее. попытка использовать недопустимый дескриптор dirhandle
Эти новые предупреждения теперь выдаются, когда дескриптор dirhandle используется, но либо закрыт, либо
не совсем дирхэндл.

Открытие dirhandle / filehandle% s также как файл / каталог
Добавлено два предупреждения об устаревании: (Rafael)

Открытие дескриптора dirhandle% s также в виде файла
Открытие дескриптора файла% s также как каталога

Использование -P не рекомендуется
Переключатель командной строки Perl "-P" теперь не рекомендуется.

v-строка, используемая / требующаяся, не переносима
Perl предупредит вас о потенциальных проблемах с обратной совместимостью с помощью "use
ВЕРСИЯ "синтаксис.

перл -V
"perl -V" имеет несколько улучшений, что делает его более удобным для использования из сценариев оболочки, чтобы получить
значение переменных конфигурации. Подробности смотрите в perlrun.

Изменено Внутренности


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

При компиляции ядра perl с помощью gcc включается столько флагов предупреждений gcc, сколько есть
возможно на платформе. (Это стремление к чистоте не распространяется на код XS, потому что
мы не можем гарантировать аккуратность кода, который мы не писали.) Подобные флаги строгости имеют
были добавлены или ужесточены для различных других компиляторов C.

Переупорядочивание of SVt_ * постоянная
Относительный порядок констант, определяющих различные типы «SV», изменился; в
в частности, «SVt_PVGV» был перемещен перед «SVt_PVLV», «SVt_PVAV», «SVt_PVHV» и
«SVt_PVCV». Маловероятно, что это будет иметь значение, если у вас нет кода, который явно
делает предположения об этом порядке. (Иерархия наследования объектов "B :: *" имеет
были изменены, чтобы отразить это.)

Ликвидация of СВт_ПВБМ
В связи с этим был удален внутренний тип "SVt_PVBM". Этот специальный тип
"SV" использовалось оператором "index" и частями механизма регулярного выражения для облегчения быстрого
Матчи Бойера-Мура. Его внутреннее использование было заменено «SV» типа «SVt_PVGV».

Новое напишите SVt_BIND
Был добавлен новый тип "SVt_BIND", готовый к реализации проекта Perl 6 на
5. Реализации намеренно еще нет, и они еще не могут быть созданы или
уничтожены.

Удаление of CPP Символы
Символы препроцессора C "PERL_PM_APIVERSION" и "PERL_XS_APIVERSION", которые были
должен указывать номер версии самого старого бинарно-совместимого Perl (соответственно исходный код
совместимы) с нынешним, не использовались, а иногда имели неверные значения. Они
был удален.

Меньше космосе is использовал by ОПС
Структура «BASEOP» теперь занимает меньше места. Поле op_seq было удалено и
заменено одинарным битовым полем op_opt. op_type теперь имеет длину 9 бит. (Как следствие,
класс «B :: OP» больше не предоставляет метод «seq».)

Новое синтаксический анализатор
Парсер perl теперь генерируется bison (раньше он генерировался byacc.) В результате
он кажется более надежным.

Кроме того, Дэйв Митчелл улучшил вывод отладки лексера в «-DT».

Используйте of "const"
Энди Лестер внес много улучшений, чтобы определить, какие параметры функции и локальные
переменные фактически могут быть объявлены компилятору C как «константы». Стив Петерс представил новые
* _set макросы и переработано ядро, чтобы использовать их, а не назначать макросы в LVALUE
контекст.

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

«AvFLAGS» и было удаленный
Макрос "AvFLAGS" удален.

"средний_*" изменения
Функции «av _ * ()», используемые для управления массивами, больше не принимают нулевые параметры «AV *».

$ ^ H и % ^ H
Реализация специальных переменных $ ^ H и% ^ H была изменена, чтобы можно было реализовать
лексические прагмы в чистом Perl.

B :: модули наследование менялась
Изменилась иерархия наследования модулей "B ::"; "B :: NV" теперь наследуется от "B :: SV"
(раньше унаследовал от "B :: IV").

Anonymous хэш и массив конструкторы
Конструкторы анонимного хэша и массива теперь принимают 1 операцию в optree вместо 3, теперь
что pp_anonhash и pp_anonlist возвращают ссылку на хэш / массив, когда op
отмечен OPf_SPECIAL. (Николас Кларк)

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


Остается проблема с реализацией лексического $ _: он не работает.
внутри блоков "/(?{...})/". (См. Тест TODO в t / op / mydef.t.)

Операторы Stacked filetest не будут работать, когда действует прагма filetest, потому что
они полагаются на стат () буфер "_" заполняется, и проверка файлов не выполняется стат ().

UTF-8 проблемам
Обработка Unicode по-прежнему нечеткая в нескольких местах, где это зависит от
помечена ли внутренняя строка как UTF-8. Это будет сделано более последовательным в Perl
5.12, но это будет невозможно без определенной обратной несовместимости.

Платформа Конкретный Проблемы


При компиляции с g ++ и поддержкой потоков в Linux сообщается, что $! останавливается
работает правильно. Это связано с тем, что glibc предоставляет два strerror_r(3)
реализация, и perl выберет не тот.

Reporting ошибки


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

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

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


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

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

  • 2
    ГИФЛИБ
    ГИФЛИБ
    giflib — это библиотека для чтения и
    написание гифок. Это API и ABI
    совместим с libungif, который был в
    широкое использование при сжатии LZW
    алгоритм был...
    Скачать ГИФЛИБ
  • 3
    Alt-F
    Alt-F
    Alt-F предоставляет бесплатный и открытый исходный код
    альтернативная прошивка для DLINK
    DNS-320/320L/321/323/325/327L and
    ДНР-322Л. Alt-F имеет Samba и NFS;
    поддерживает ext2 / 3/4 ...
    Скачать Alt-F
  • 4
    USM
    USM
    Usm — это унифицированный пакет slackware.
    менеджер, который занимается автоматическим
    разрешение зависимости. Он объединяет
    различные репозитории пакетов, включая
    slackware, slacky, р...
    Скачать УСМ
  • 5
    Chart.js
    Chart.js
    Chart.js — это библиотека Javascript, которая
    позволяет дизайнерам и разработчикам рисовать
    все виды диаграмм с использованием HTML5
    элемент полотна. Chart js предлагает отличный
    множество ...
    Скачать Chart.js
  • 6
    iReport-Designer для JasperReports
    iReport-Designer для JasperReports
    ПРИМЕЧАНИЕ. Поддержка iReport/Jaspersoft Studio.
    Объявление: Начиная с версии 5.5.0,
    Jaspersoft Studio станет официальным
    дизайнерский клиент для JasperReports. я докладываю
    воля...
    Скачать iReport-Designer для JasperReports
  • Больше »

Команды Linux

Ad