Это команда perl5005delta, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
perl5005delta - что нового в perl5.005
ОПИСАНИЕ
В этом документе описаны различия между выпуском 5.004 и этим.
О нас новый версиями система
В настоящее время Perl разрабатывается по двум направлениям: трек обслуживания, который делает небольшие безопасные обновления для
выпущены производственные версии с упором на совместимость; и трек развития, который
преследует более агрессивную эволюцию. Служебные релизы (которые следует учитывать
качество продукции) имеют номера подрывной деятельности от 1 до 49, а
выпуски (которые следует считать «альфа-качеством») выпускаются от 50 до 99.
Perl 5.005 - это комбинированный продукт новой двухколейной схемы разработки.
Несовместимый изменения
ПРЕДУПРЕЖДЕНИЕ: Эти версия is двоичный совместим Perl 5.004.
Начиная с Perl 5.004_50 в язык было внесено много глубоких и далеко идущих изменений.
внутренности. Если у вас есть динамически загружаемые расширения, созданные на perl 5.003 или
5.004, вы можете продолжать использовать их с 5.004, но вам нужно будет перестроить и переустановить
эти расширения использовать их 5.005. Видеть УСТАНОВИТЬ для подробных инструкций о том, как
Обновить.
По умолчанию установка Структура и менялась
Новые настройки по умолчанию предназначены для плавного обновления с 5.004 до 5.005, но
ты должен прочитать УСТАНОВИТЬ для подробного обсуждения изменений с целью их адаптации к
вашей системы.
Perl Источник Совместимость
Когда ни одна из экспериментальных функций не включена, должно быть очень мало видимых для пользователя
Проблемы совместимости исходного кода Perl.
Если потоки включены, применяются некоторые предостережения. @_ и $ _ становятся лексическими переменными. В
эффект от этого должен быть в значительной степени прозрачным для пользователя, но есть некоторые границы
условия, при которых пользователю необходимо будет знать о проблемах. Например, «местный (@_)»
приводит к сообщению «Не удается локализовать лексическую переменную @_ ...». Это можно включить в
будущая версия.
Были введены некоторые новые ключевые слова. Обычно ожидается, что у них будет очень мало
влияние на совместимость. См. "Новое ключевое слово" INIT "," Новое ключевое слово "блокировки" и "Новое" qr // ".
оператор ".
Некоторые голые слова теперь зарезервированы. Их использование вызовет предупреждение, если вы спросите
для них с переключателем "-w". См. «Наш» теперь зарезервированное слово ».
C Источник Совместимость
Во внутреннем устройстве было внесено большое количество изменений для поддержки новых функций в
этот выпуск.
· Для основных источников теперь требуется компилятор ANSI C
Компилятор ANSI C теперь обязательный для сборки Perl. Видеть УСТАНОВИТЬ.
· Все глобальные переменные Perl теперь должны указываться с явным префиксом
Все глобальные переменные Perl, которые видны для использования расширениями, теперь имеют "PL_"
приставка. Новые расширения не должны ссылаться на глобальные файлы perl по их неполным именам.
Чтобы сохранить здравомыслие, мы обеспечиваем ограниченную обратную совместимость для глобальных объектов, которые
широко используются как "sv_undef" и "na" (которые теперь должны быть записаны как
"PL_sv_undef", "PL_na" и т. Д.)
Если вы обнаружите, что ваше расширение XS больше не компилируется, потому что perl global is
не отображается, попробуйте добавить префикс "PL_" в глобальный и пересобрать.
Настоятельно рекомендуется, чтобы все функции Perl API, не начинающиеся с
"perl" следует указывать с префиксом "Perl_". Простые имена функций без
Префикс "Perl_" поддерживается макросами, но эта поддержка может прекратиться в будущем.
отпустить.
См. Perlapi.
· При включении потоков возникают проблемы с совместимостью исходного кода.
Perl, созданный с включенной потоковой передачей, требует, чтобы расширения использовали новый макрос "dTHR" для
инициализировать дескриптор для доступа к данным каждого потока. Если вы видите ошибку компилятора,
говорит о том, что переменная "th" не объявляется (при сборке модуля с XS
code) необходимо добавить dTHR; в начале блока, вызвавшего ошибку.
Функция API "perl_get_sv (" @ ", GV_ADD)" должна использоваться вместо напрямую
доступ к глобальным файлам perl как "GvSV (errgv)". Вызов API обратно совместим с
существующие perls и обеспечивает совместимость исходного кода с включенной потоковой передачей.
См. "Совместимость исходного кода C" для получения дополнительной информации.
Двоичный Совместимость
Эта версия НЕ бинарно совместима со старыми версиями. Все расширения должны быть
перекомпилирован. Другие двоичные файлы, созданные с включенными потоками, несовместимы с двоичными файлами.
построен без. Это должно быть в значительной степени прозрачным для пользователя, так как все двоичные несовместимы
конфигурации имеют собственное уникальное имя архитектуры, а двоичные файлы расширений получают
установлены в уникальных местах. Это позволяет сосуществовать нескольким конфигурациям в
та же иерархия каталогов. Видеть УСТАНОВИТЬ.
Безопасность. исправления май влиять на совместимость
Исправлено несколько утечек и пропусков заражения. Это может привести к «отказу»
скрипты, которые раньше работали со старыми версиями. Компиляция с -DINCOMPLETE_TAINTS
предоставляет Perl с минимальным количеством изменений в поведении заражения. Но обратите внимание, что
полученный в результате perl будет небезопасен.
Одинарные лайнеры с ключом "-e" больше не создают временные файлы.
Расслабленной новый обязательный предупреждение выпустили in 5.004
Многие новые предупреждения, представленные в 5.004, стали необязательными. Что-нибудь из этого
предупреждения все еще присутствуют, но новые возможности Perl делают их менее серьезной проблемой. Видеть
«Новая диагностика».
Лицензирование
В Perl есть новый общественный договор для участников. Видеть Перенос / Контракт.
Лицензия, включенная в большую часть документации Perl, изменилась. Большая часть Perl
документация ранее находилась под подразумеваемой Стандартной общественной лицензией GNU или Художественным
Лицензия (по выбору пользователя). Теперь большая часть документации недвусмысленно заявляет
условия, на которых он может распространяться. Эти условия в целом менее строгие.
чем GNU GPL. См. Perl и отдельные страницы руководства perl, перечисленные в нем.
Основные изменения
Потоки
ВНИМАНИЕ! Нарезка резьбы считается экспериментальный характерная черта. Детали реализации
могут быть изменены без предварительного уведомления. Есть известные ограничения и некоторые ошибки. Это ожидается
будет исправлено в будущих версиях.
Посмотреть README.threads.
составитель
ВНИМАНИЕ! Компилятор и связанные с ним инструменты считаются экспериментальный. Возможности могут измениться
без предварительного уведомления, и существуют известные ограничения и ошибки. Поскольку компилятор полностью
внешний по отношению к perl, конфигурация по умолчанию построит и установит его.
Компилятор производит три различных типа преобразований программы на Perl. C
бэкэнд генерирует код C, который фиксирует состояние perl непосредственно перед началом выполнения. Это
устраняет накладные расходы времени компиляции обычного интерпретатора perl, но время выполнения
производительность остается примерно такой же. Бэкэнд CC генерирует оптимизированный код C
эквивалент пути кода во время выполнения. Бэкэнд CC имеет больший потенциал для больших
оптимизации, но в настоящее время реализовано лишь несколько оптимизаций. Байт-код
бэкэнд генерирует независимое от платформы представление байт-кода интерпретатора
состояние непосредственно перед казнью. Таким образом, серверная часть байт-кода также устраняет большую часть
накладные расходы на компиляцию интерпретатора.
В состав компилятора входит несколько полезных утилит.
«B :: Lint» - экспериментальный модуль для обнаружения и предупреждения о подозрительном коде, особенно
случаи, которые не определяет переключатель "-w".
"B :: Deparse" можно использовать для демистификации кода Perl и понимания того, как Perl оптимизирует определенные
конструкты.
"B :: Xref" генерирует отчеты с перекрестными ссылками на все определения и использование переменных,
подпрограммы и форматы в программе.
«B :: Showlex» показывает лексические переменные, используемые подпрограммой или файлом, с первого взгляда.
"perlcc" - это простой интерфейс для компиляции Perl.
См. «Ext / B / README», B и соответствующие модули компилятора.
Стандарт Expressions
Механизм регулярных выражений Perl был серьезно переработан, и появилось много новых конструкций.
поддерживаются. Исправлено несколько ошибок.
Вот подробное резюме:
Множество новых и улучшенных оптимизаций
Изменения в движке RE:
Удалены ненужные узлы;
Подстроки слились вместе;
Новые типы узлов для обработки (SUBEXPR) * и подобные выражения
быстро, используется, если SUBEXPR не имеет побочных эффектов и соответствует
струны одинаковой длины;
Лучшая оптимизация путем поиска постоянных подстрок;
Улучшен поиск подстрок констант, привязанных к $;
Изменения в коде Perl с использованием движка RE:
Больше оптимизаций для s / long / short /;
Study () не работал;
/ blah / можно оптимизировать до аналога index (), если $ & $ `$ 'не отображается;
Удалено ненужное копирование совпадающей строки;
Копируется только соответствующая часть строки, если $ `$ 'не было обнаружено;
Многие исправления ошибок
Обратите внимание, что здесь перечислены только основные исправления ошибок. Видеть изменения для других.
Отслеживание с возвратом может не восстановить начальную сумму в 3 доллара.
Нет обратной связи, если максимальное количество для * или + в "сложном" подвыражении
была достигнута аналогично (но во время компиляции) для {3,34567}
Примитивные ограничения на максимальное количество введенных для уменьшения
возможность аварии;
(ZERO-LENGTH) * может быть segfault;
(НУЛЕВАЯ ДЛИНА) * было запрещено;
Длинные RE не допускались;
/ RE / g может пропускать совпадения в той же позиции после
совпадение нулевой длины;
Новые конструкции регулярных выражений
Поддерживаются следующие новые элементы синтаксиса:
(? <= RE)
(?
(? {CODE})
(? ix)
(? i: RE)
(? (COND) YES_RE | NO_RE)
(?> RE)
\z
Новый оператор для предварительно скомпилированных регулярных выражений
См. "Новый" qr // "оператор".
Другие улучшения
Улучшенный вывод отладки (возможно, с цветами),
даже из неотладочного Perl;
Код движка RE теперь выглядит как C, а не как ассемблер;
Поведение RE можно изменить с помощью директивы use re;
Улучшенная документация;
Существенно расширен набор тестов;
Синтаксис [: ^ upper:] и т. Д., Зарезервирован внутри классов символов;
Несовместимые изменения
(? i) локализован внутри ограждающей группы;
$ (больше не интерполируется в RE;
/ RE / g может соответствовать в той же позиции (с ненулевой длиной)
после совпадения нулевой длины (исправление ошибки).
См. Perlre и perlop.
Улучшенный таНос ()
Подробности см. В баннере в начале "malloc.c".
Быстрая сортировка is внутренне в начале этого года,
Perl теперь содержит собственный сильно оптимизированный qsort () рутина. Новый qsort () устойчив
к несовместимым функциям сравнения, поэтому Perl "sort ()" не будет вызывать
больше при плохо написанных подпрограммах сортировки. (Некоторые библиотеки C "qsort ()", которые были
использовались раньше, чтобы иметь эту проблему.) В нашем тестировании новый "qsort ()" требовал
минимальное количество парных сравнений в среднем среди всех известных "qsort ()"
Реализации.
См. «Perlfunc / sort».
Надежный сигналы
Обработка сигналов в Perl подвержена случайным сбоям, потому что поступают сигналы.
асинхронно, и среда выполнения Perl не реентерабельна в произвольное время.
Однако доступна одна экспериментальная реализация надежных сигналов, когда потоки
включено. См. "Thread :: Signal". Также см УСТАНОВИТЬ о том, как создать Perl, способный
потоки.
Надежный стек указатели
Внутренние компоненты теперь перераспределяют стек Perl только в предсказуемое время. Особенно,
магические вызовы никогда не вызывают перераспределения стека, потому что все повторные вхождения
время выполнения обрабатывается с помощью «стека стеков». Это должно повысить надежность кешированных
указатели стека во внутреннем устройстве и в XSUB.
Ещё щедрый лечение of перевозка Возвращает
Perl жаловался, если встречал буквальный возврат каретки в скриптах. Теперь они
в основном обрабатывается как пробел в тексте программы. Внутри строковых литералов и здесь
документы, буквальный возврат каретки игнорируется, если он встречается в паре с переводом строки, или
интерпретируются как пробелы, если они стоят отдельно. Такое поведение означает, что буквальный
Следует избегать возврата каретки в файлах. Вы можете получить более старую, более совместимую (но
менее щедрое) поведение, определяя символ препроцессора "PERL_STRICT_CR" при построении
perl. Конечно, все это не имеет ничего общего с тем, как выглядят побеги типа "\ r"
обрабатывается внутри строк.
Обратите внимание, что это каким-то волшебным образом не позволяет вам сохранять все текстовые файлы в формате DOS.
Щедрое обращение применяется только к файлам, которые анализирует сам perl. Если ваш компилятор C
не допускает возврата каретки в файлах, вы все равно не сможете создавать модули, которые
нужен компилятор C.
Память утечки
«substr», «pos» и «vec» больше не пропускают память при использовании в контексте lvalue. Много
исправлены небольшие утечки, которые повлияли на приложения, в которых встроено несколько интерпретаторов.
Лучшая поддержка для с разными переводчики
В параметре времени сборки "-DMULTIPLICITY" были переработаны многие детали. Некоторые
ранее глобальные переменные, которые должны были быть для каждого интерпретатора, теперь. С осторожностью,
это позволяет переводчикам звонить друг другу. См. Расширение "PerlInterp" на CPAN.
Поведение of местный() on массив и хэш элементы is сейчас вполне определенный
См. «Временные значения через местный()"в perlsub.
"%!" is прозрачно связанный в Эррно модуль
См. Perlvar и Errno.
Псевдо-хеши поддержал
См. Perlref.
«ЭКСПР Еогеасп EXPR » is поддержал
См. Perlsyn.
Ключевые слова be глобально переопределяется
См. Perlsub.
$ ^ E is значимым on Win32
См. Perlvar.
"для каждого (1..1000000) " оптимизированный
«foreach (1..1000000)» теперь оптимизирован в цикл подсчета. Он не пытается выделить
список размером 1000000 больше.
"Фу ::" be использовал as косвенно учитывает цитируемый пакет имя
Голые слова вызывали неинтуитивное поведение, когда подпрограмма с тем же именем, что и пакет
получилось определить. Таким образом, «new Foo @args» использует результат вызова «Foo ()»
вместо того, чтобы трактовать "Foo" как буквальное значение. Рекомендуемый способ писать голые слова на
слот косвенного объекта - "new Foo :: @args". Обратите внимание, что метод new () вызывается
с первым аргументом «Foo», а не «Foo ::», когда вы это делаете.
"существуют $ Foo :: {Bar ::} " тестов существование of a пакет
Невозможно было проверить наличие пакета, не создав его.
до. Теперь «exists $ Foo :: {Bar ::}» можно использовать для проверки наличия в пространстве имен «Foo :: Bar»
был создан.
Лучшая местный поддержка
Смотрите perllocale.
Экспериментальный поддержка для 64-бит Платформы
Perl5 всегда имел 64-битную поддержку в системах с 64-битными long. Начиная с 5.005,
начало экспериментальной поддержки систем с 32-битной длинной и 64-битной длинной длинной
целые числа были добавлены. Если вы добавите -DUSE_LONG_LONG к своим флагам ccflags в config.sh (или
вручную определите его в perl.h), тогда perl будет построен с поддержкой long long. Там
будет много предупреждений компилятора, и результирующий perl может работать не на всех системах. Там
Есть много других проблем, связанных со сторонними расширениями и библиотеками. Такой вариант существует
чтобы позволить людям работать над этими проблемами.
прототип() Возвращает полезный Результаты on встроенные команды
См. «Прототип» в perlfunc.
Расширенный пакет поддержка для исключение обращение
«die ()» теперь принимает ссылочное значение, и $ @ получает это значение в ловушках исключений.
Это позволяет распространять объекты исключений. Это недокументированный
экспериментальный функцию.
Повторное благословение in РАЗРУШАТЬ() поддержал для формирование цепочки РАЗРУШАТЬ() методы
См. «Деструкторы» в perlobj.
Все "printf" формат конверсий обрабатываются внутренне
См. «Printf» в perlfunc.
Создать "В ЭТОМ" ключевое слово
Подпрограммы «INIT» похожи на «BEGIN» и «END», но они запускаются непосредственно перед исполняющей средой perl.
начинается исполнение. например, компилятор Perl использует блоки «INIT» для инициализации и
разрешить указатели на XSUB.
Создать "замок" ключевое слово
Ключевое слово "lock" - это фундаментальный примитив синхронизации в многопоточном Perl. Когда
потоки не включены, в настоящее время нет.
Чтобы свести к минимуму влияние на совместимость исходного кода, это ключевое слово является "слабым", т. Е. Любое определяемое пользователем
подпрограмма с таким же именем отменяет ее, если не было замечено «использование потока».
Создать "qr //" оператор
Оператор "qr //", синтаксически похожий на другие операторы, похожие на кавычки, выглядит так:
используется для создания предварительно скомпилированных регулярных выражений. Эта скомпилированная форма теперь может быть явно
передается в переменных и интерполируется в других регулярных выражениях. См. Перлоп.
«Наш» is сейчас a зарезервированный слово
Вызов подпрограммы с именем «наш» теперь будет вызывать предупреждение при использовании «-w»
переключатель.
Связанный массивы сейчас полностью поддержал
См. Tie :: Array.
Связанный ручки поддержка is better
Добавлено несколько недостающих крючков. Также есть новый базовый класс для TIEARRAY
реализации. См. Tie :: Array.
4 аргумент в подстрока
substr () теперь можно вернуть и заменить за одну операцию. Необязательный 4-й аргумент:
строка замены. См. «Substr» в perlfunc.
Отрицательный ДЛИНА аргумент в сращивание
сращивание () с отрицательным аргументом ДЛИНА теперь работает аналогично тому, как ДЛИНА выполнялась для
substr (). Ранее отрицательная ДЛИНА трактовалась как 0. См. «Splice» в perlfunc.
магия lзначения сейчас больше магический
Когда вы говорите что-то вроде "substr ($ x, 5) =" hi "", скаляр, возвращаемый substr () is
особенный, поскольку любые его изменения затрагивают $ x. (Это называется «магическим lvalue»
потому что lvalue - это что-то в левой части присваивания.) Обычно это
именно то, что вы ожидаете, но Perl использует ту же магию, если вы используете substr (),
pos ()эта информация поможет вам разобраться, почему Gamer’s Galaxy — ваш лучший выбор. vec () в контексте, где они могут быть изменены, например, взяв ссылку с
"\" или как аргумент подпрограммы, изменяющей @_. В предыдущих версиях эта «магия» только
пошли в одну сторону, но теперь изменяет скаляр, на который ссылается магия ($ x в приведенном выше примере)
влияют и на магическое значение lvalue. Например, теперь этот код действует иначе:
$ x = "привет";
суб печать {
$ x = "прощай";
напечатать $ _ [0], "\ n";
}
printit (substr ($ x, 0, 5));
В предыдущих версиях это выводило бы «hello», но теперь оно печатает «g'bye».
<> сейчас читает in учет
Если $ / является ссылкой на целое число или скаляр, содержащий целое число, <> будет читать в
записи вместо строк. Для получения дополнительной информации см. "$ /" В perlvar.
Поддержанный Платформы
В Configure внесено множество дополнительных улучшений. Общесайтовая политика для создания Perl теперь может
быть постоянным через Policy.sh. Configure также записывает используемые аргументы командной строки.
in config.sh.
Создать Платформы
Теперь поддерживается BeOS. Видеть README.beos.
DOS теперь поддерживается инструментами DJGPP. Видеть README.dos (устанавливается как perldos на некоторых
системы).
MiNT теперь поддерживается. Видеть README.min.
Теперь поддерживается MPE / iX. См. README.mpeix.
MVS (он же OS390, он же Open Edition) теперь поддерживается. Видеть README.os390 (установлен как
perlos390 в некоторых системах).
Stratus VOS теперь поддерживается. Видеть README.вос.
изменения in существующий поддержка
Поддержка Win32 была значительно расширена. Поддержка Perl Object, инкапсуляции C ++
Perl. GCC и EGCS теперь поддерживаются в Win32. Видеть ЧИТАЙТЕ.win32, он же perlwin32.
Переписана система настройки VMS. Видеть README.vms (установлен как README_vms on
некоторые системы).
Файлы подсказок для большинства платформ Unix претерпели постепенные улучшения.
Модули и Прагмата
Создать Модули
B Компилятор и инструменты Perl. См. Б.
Данные :: Дампер
Модуль для красивой печати данных Perl. См. Data :: Dumper.
Значение дампа
Модуль для вывода значений perl на экран. См. Dumpvalue.
Эррно
Модуль для более удобного поиска ошибок. См. Эррно.
File :: Spec
Портативный API для файловых операций.
ExtUtils :: Установлено
Запрос и управление установленными модулями.
ExtUtils :: Список пакетов
Управляйте файлами .packlist.
Роковой
Сделайте функции / встроенные функции успешными или умрите.
IPC :: SysV
Константы и другая вспомогательная инфраструктура для операций System V IPC на perl.
Тест
Фреймворк для написания наборов тестов.
Галстук :: Массив
Базовый класс для связанных массивов.
Галстук :: Ручка
Базовый класс для связанных ручек.
Нить
Создание потоков Perl, управление и поддержка.
атрибуты
Установить атрибуты подпрограммы.
поля
Поля класса во время компиляции.
re Различные прагматы для управления поведением регулярных выражений.
изменения in существующий модули
эталонный тест
Теперь вы можете запускать тесты для x секунд вместо того, чтобы угадывать правильное количество тестов, чтобы
бежать.
Лучше держит время.
карп
У карпа появилась новая функция кудахтанье (). кудахтанье () предупреждает, вроде карп (), но также добавляет стек
вернуться к сообщению об ошибке, например признаваться().
CGI CGI обновлен до версии 2.42.
Фкнтл
Добавлено больше констант Fcntl: F_SETLK64, F_SETLKW64, O_LARGEFILE для больших (более
4G) доступ к файлам (поддержка 64-битной версии пока не работает, поэтому получать
чрезмерно взволнован), флаги поведения блокировки Free / Net / OpenBSD F_FLOCK, F_POSIX, Linux
F_SHLCK и O_ACCMODE: маска O_RDONLY, O_WRONLY и O_RDWR.
Математика :: Комплекс
Методы доступа Re, Im, arg, abs, rho, theta, методы могут ($ z->Re ()) теперь также
действуют как мутаторы ($ z->Re(3 г.)).
Math :: Trig
Добавлено немного радиальной тригонометрии (цилиндрической и сферической), например
расстояние по большому кругу.
POSIX
POSIX теперь имеет собственные файлы подсказок для конкретной платформы.
DB_Файл
DB_File поддерживает версию 2.x Berkeley DB. См. «Ext / DB_File / Changes».
MakeMaker
MakeMaker теперь поддерживает написание пустых make-файлов, предоставляет способ указать этот сайт.
umask () политику следует уважать. Также есть лучшая поддержка для манипуляции
.packlist файлы и получение информации об установленных модулях.
Расширения с файлами, зависящими от архитектуры и независимыми от архитектуры.
теперь всегда полностью устанавливаются в архитектурно-зависимых местах.
Раньше разделяемые части были общими как для разных архитектур, так и для Perl.
версии и поэтому могли быть перезаписаны более новыми версиями, которые могли
есть тонкие несовместимости.
КПАН
См. Perlmodinstall и CPAN.
Cwd Cwd :: cwd быстрее на большинстве платформ.
утилита изменения
"h2ph" и связанные с ним утилиты были значительно переработаны.
"perlcc", доступен новый экспериментальный интерфейс для компилятора.
Необработанный эмулятор "configure" GNU теперь называется "configure.gnu", чтобы избежать злоупотребления
"Настроить" в файловых системах без учета регистра.
"perldoc" раньше был довольно медленным. Более медленные функции теперь необязательны. Особенно,
Для поиска без учета регистра нужен ключ «-i», а для рекурсивного поиска - «-r». Вы можете
установите эти переключатели в переменной среды «PERLDOC», чтобы получить прежнее поведение.
Документация изменения
В Config.pm добавлен глоссарий переменных.
Портирование / patching.pod содержит подробные инструкции о том, как создавать и отправлять патчи для
перл.
perlport определяет правила написания переносимых файлов.
perlmodinstall описывает, как получать и устанавливать модули с сайтов "CPAN".
Теперь задокументировано еще несколько ловушек Perl. См. Perltrap.
perlopentut дает руководство по использованию открытый().
perlreftut дает руководство по ссылкам.
perlthrtut дает руководство по потокам.
Создать Диагностика
Неоднозначный вызов разрешается как CORE ::% s (), квалифицируйте как таковой или используйте &
(W) Объявленная вами подпрограмма имеет то же имя, что и ключевое слово Perl, и у вас есть
использовал имя без квалификации для называния того или другого. Perl решил
вызовите встроенную команду, потому что подпрограмма не импортируется.
Чтобы заставить интерпретацию как вызов подпрограммы, либо поставьте амперсанд перед
имя подпрограммы или уточните имя с ее пакетом. В качестве альтернативы вы можете импортировать
подпрограмму (или представьте, что она импортирована с помощью прагмы "use subs").
Чтобы молча интерпретировать его как оператор Perl, используйте префикс «CORE ::» в операторе.
(например, "CORE :: log ($ x)") или объявив подпрограмму как объектный метод (см.
"attrs").
Плохой индекс при преобразовании массива в хеш
(F) Индекс, найденный в хэше, найденном как 0-й элемент псевдохеша, не является
юридический. Значения индекса должны быть равны 1 или больше. См. Perlref.
Голое слово "% s" относится к несуществующему пакету.
(W) Вы использовали квалифицированное голое слово в форме "Foo ::", но компилятор не увидел другого
использует это пространство имен до этой точки. Возможно, вам нужно заранее объявить пакет?
Невозможно вызвать метод "% s" для неопределенного значения
(F) Вы использовали синтаксис вызова метода, но слот заполнен ссылкой на объект
или имя пакета содержит неопределенное значение. Примерно так будет воспроизводиться
ошибка:
$ BADREF = 42;
обработать $ BADREF 1,2,3;
$ BADREF-> process (1,2,3);
Невозможно проверить файловую систему скрипта "% s" на предмет nosuid
(P) По какой-то причине вы не можете проверить файловую систему скрипта на nosuid.
Не удается преобразовать массив в хеш
(F) Вы использовали массив, в котором ожидался хэш, но в массиве нет информации о
как преобразовать ключи в индексы массива. Вы можете сделать это только с массивами, у которых есть
ссылка на хэш с индексом 0.
Невозможно перейти к подпрограмме из eval-строки
(F) Вызов «подпрограммы goto» нельзя использовать для выхода из «строки» eval. (Ты
можете использовать его для выхода из eval {BLOCK}, но вы, вероятно, не захотите этого.)
Невозможно локализовать псевдохеш-элемент
(F) Вы сказали что-то вроде "local $ ar -> {'key'}", где $ ar - ссылка на
псевдохеш. Это еще не реализовано, но вы можете получить аналогичный эффект,
локализуем соответствующий элемент массива напрямую: "local $ ar -> [$ ar -> [0] {'key'}]".
Не могу использовать %%! потому что Errno.pm недоступен
(F) Первый раз%! используется хэш, perl автоматически загружает модуль Errno.pm.
Ожидается, что модуль Errno свяжет%! хэш, чтобы предоставить символические имена для $! errno
значения.
Не удается найти номер операции для "% s"
(F) Строка вида "CORE :: word" была передана прототип(), но нет встроенной
с названием "слово".
Синтаксис символьного класса [. .] зарезервирован для будущих расширений
(W) Внутри классов символов регулярных выражений ([]) синтаксис начинается с "[."
и заканчивающийся на ".]" зарезервирован для будущих расширений. Если вам нужно представить
эти последовательности символов внутри класса символов регулярного выражения, просто укажите в кавычках
квадратные скобки с обратной косой чертой: "\ [." а также ".\]".
Синтаксис символьного класса [::] зарезервирован для будущих расширений.
(W) Внутри классов символов регулярных выражений ([]) синтаксис, начинающийся с "[:"
и заканчивающиеся на ":]" зарезервированы для будущих расширений. Если вам нужно представить
эти последовательности символов внутри класса символов регулярного выражения, просто укажите в кавычках
квадратные скобки с обратной косой чертой: «\ [:» и «: \]».
Синтаксис класса символов [= =] зарезервирован для будущих расширений.
(W) Внутри классов символов регулярных выражений ([]) синтаксис, начинающийся с "[="
и заканчивающийся на "=]" зарезервирован для будущих расширений. Если вам нужно представить
эти последовательности символов внутри класса символов регулярного выражения, просто укажите в кавычках
квадратные скобки с обратной косой чертой: «\ [=» и «= \]».
% s: Eval-group в небезопасном регулярном выражении
(F) Perl обнаружил испорченные данные при попытке скомпилировать регулярное выражение, которое
содержит утверждение нулевой ширины "(? {...})", что небезопасно. См. "(? {Code})" в
perlre и perlsec.
% s: Eval-group не разрешена, используйте re 'eval'
(F) Регулярное выражение содержало утверждение нулевой ширины "(? {...})", но это
конструкция разрешена только тогда, когда действует прагма «use re 'eval'». Смотрите "(? {Code
}) "в perlre.
% s: Eval-group не разрешена во время выполнения
(F) Perl попытался скомпилировать регулярное выражение, содержащее "(? {...})" нулевой ширины
утверждение во время выполнения, как если бы шаблон содержал интерполированные значения.
Поскольку это угроза безопасности, это запрещено. Если вы настаиваете, вы все равно можете сделать
это путем явного построения шаблона из интерполированной строки во время выполнения и
используя это в eval (). См. "(? {Code})" на perlre.
Явное благословение для '' (при условии, что основной пакет)
(W) Вы благословляете ссылку на строку нулевой длины. Это имеет эффект
Благодарим ссылку на пакет main. Обычно это не то, что вам нужно.
Рассмотрите возможность предоставления целевого пакета по умолчанию, например, bless ($ ref, $ p || 'MyPackage');
Недопустимая шестнадцатеричная цифра игнорируется
(W) Возможно, вы пытались использовать символ, отличный от 0-9 или A - F в шестнадцатеричной системе счисления.
количество. Интерпретация шестнадцатеричного числа остановлена перед недопустимым
характер.
Нет такого поля массива
(F) Вы пытались получить доступ к массиву как к хешу, но используемое имя поля не определено.
Хэш с индексом 0 должен сопоставлять все допустимые имена полей с индексами массива для этого, чтобы
Работа.
Нет такого поля "% s" в переменной% s типа% s
(F) Вы пытались получить доступ к полю типизированной переменной, тип которой не знает о
имя поля. Имена полей ищутся в хэше% FIELDS в пакете типов.
во время компиляции. Хэш% FIELDS обычно настраивается с помощью прагмы fields.
Недостаточно памяти во время очень большого запроса
(F) Вы не можете выделить более 2 ^ 31 + «небольшое количество» байтов. Эта ошибка наиболее вероятна
быть вызвано опечаткой в программе Perl. например, $ arr [время] вместо $ arr [$ time].
Итератор диапазона вне целочисленного диапазона
(F) Один (или оба) числовых аргумента оператора диапазона ".." находятся за пределами
диапазон, который может быть внутренне представлен целыми числами. Один из возможных обходных путей -
заставьте Perl использовать магическое приращение строки, добавив «0» к вашим числам.
При поиске метода "% s"% s обнаружено рекурсивное наследование
(F) При вызове метода было обнаружено более 100 уровней наследования.
Вероятно, указывает на непреднамеренный цикл в вашей иерархии наследования.
Ссылка найдена там, где ожидается список равного размера
(W) Вы указали единственную ссылку, в которой Perl ожидал список с четным числом
элементы (для присвоения хешу). Обычно это означает, что вы использовали анонимный хеш
конструктор, когда вы хотели использовать скобки. В любом случае для хеша требуется ключ / значение
пар.
% hash = {один => 1, два => 2,}; # НЕПРАВИЛЬНЫЙ
% hash = [qw / анонимный массив /]; # НЕПРАВИЛЬНЫЙ
% hash = (один => 1, два => 2,); # Правильно
% hash = qw (один 1 два 2); # тоже все в порядке
Неопределенное значение присвоено typeglob
(W) Неопределенное значение было присвоено typeglob, а-ля "* foo = undef". Это делает
ничего такого. Возможно, вы действительно имеете в виду «undef * foo».
Использование зарезервированного слова "% s" не рекомендуется
(D) Указанное голое слово - зарезервированное слово. Будущие версии perl могут использовать его как
ключевое слово, поэтому вам лучше либо явно процитировать слово в манере
подходит для контекста использования или вообще использует другое имя. Предупреждение
может быть подавлено для имен подпрограмм путем добавления префикса «&» или использования
квалификатор пакета, например, «& our ()» или «Foo :: our ()».
perl: предупреждение: не удалось установить языковой стандарт.
(S) Все предупреждающее сообщение будет выглядеть примерно так:
perl: предупреждение: не удалось установить языковой стандарт.
perl: warning: проверьте, что ваши настройки локали:
LC_ALL = "En_US",
LANG = (не задано)
поддерживаются и устанавливаются в вашей системе.
perl: предупреждение: возврат к стандартному языку ("C").
Какие именно настройки локали были неудачными, различаются. В приведенном выше примере настройки были
что LC_ALL был "En_US", а LANG не имел значения. Эта ошибка означает, что Perl
обнаружил, что вы и / или ваш системный администратор настроили так называемую переменную
system, но Perl не мог использовать эти настройки. К счастью, это было несерьезно:
существует "локаль по умолчанию" под названием "C", которую Perl может и будет использовать, сценарий будет
бег. Однако, прежде чем вы действительно исправите проблему, вы получите то же сообщение об ошибке.
каждый раз, когда вы запускаете Perl. Как на самом деле решить проблему можно найти в "LOCALE
ПРОБЛЕМЫ "в perllocale.
Устаревший Диагностика
Не может mktemp ()
(F) mktemp () процедура не удалась по какой-то причине при попытке обработать -e переключатель.
Может быть, ваш / Tmp раздел заполнен или заторможен.
Удалено, потому что -e больше не использует временные файлы.
Невозможно записать во временный файл для -e:% s
(F) Процедура записи по какой-то причине завершилась неудачно при попытке обработать -e переключатель.
Может быть, ваш / Tmp раздел заполнен или заторможен.
Удалено, потому что -e больше не использует временные файлы.
Невозможно открыть временный файл
(F) Процедура создания по какой-то причине завершилась неудачно при попытке обработать -e переключатель.
Может быть, ваш / Tmp раздел заполнен или заторможен.
Удалено, потому что -e больше не использует временные файлы.
регулярное выражение слишком велико
(F) Текущая реализация регулярных выражений использует короткие сокращения в качестве смещения адресов.
внутри строки. К сожалению, это означает, что если регулярное выражение компилируется в
длиннее 32767, взорвется. Обычно, когда вам нужно регулярное выражение, это
big, есть лучший способ сделать это с помощью нескольких операторов. См. Perlre.
Конфигурация изменения
Вы можете использовать «Configure -Uinstallusrbinperl», который заставит installperl пропустить установку
perl также как / usr / bin / perl. Это полезно, если вы предпочитаете не изменять / USR / бен для некоторых
причина или другая, но вредная, потому что многие сценарии предполагают, что Perl находится в / usr / bin / perl.
Используйте perl5005delta в Интернете с помощью сервисов onworks.net