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

Значок OnWorks

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

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

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

ПРОГРАММА:

ИМЯ


perl5004delta - что нового в perl5.004

ОПИСАНИЕ


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

Поддержанный Среды


Perl5.004 «из коробки» строится на Unix, Plan 9, LynxOS, VMS, OS / 2, QNX, AmigaOS и
Windows NT. Perl также работает в Windows 95, но его нельзя построить там из-за отсутствия
разумный интерпретатор команд.

Основные изменения


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

Список назначение в % ENV работает
«% ENV = ()» и «% ENV = @list» теперь работают должным образом (кроме VMS, где он генерирует
фатальная ошибка).

Изменить в "Не могу разместить Фу.pm in @INC " ошибка
Ошибка «Не удается найти Foo.pm в @INC» теперь для упрощения перечисляет содержимое @INC.
отладка.

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

$ PERL5OPT охрана окружающей среды переменная
Теперь вы можете поместить параметры Perl в переменную среды $ PERL5OPT. Если Perl не
запущенный с проверками на наличие заражений, он будет интерпретировать эту переменную, как если бы ее содержимое появилось
в строке "#! perl" в начале вашего скрипта, за исключением того, что дефисы не обязательны.
PERL5OPT можно использовать только для установки следующих переключателей: - [DIMUdmw].

ограничения on -М, -м, и -T кредита
Опции "-M" и "-m" больше не разрешены для "#!" строка скрипта. Если сценарий
нужен модуль, он должен вызывать его с помощью прагмы "use".

Команда -T опция также запрещена на "#!" строки сценария, если она не присутствовала в
Командная строка Perl. Благодаря способу "#!" работает, это обычно означает, что -T должен быть в
первый аргумент. Таким образом:

#!/ usr / bin / perl -Т -ш

вероятно будет работать для исполняемого сценария, вызываемого как "имя сценария", в то время как:

#!/ usr / bin / perl -ш -Т

вероятно, выйдет из строя при тех же условиях. (Системы, отличные от Unix, вероятно, не последуют за
это правило.) Но "perl scriptname" гарантированно не сработает, так как тогда нет никаких шансов
-T быть найденным в командной строке до того, как он будет найден в "#!" линия.

Ещё необходимость предупреждение
Если вы удалили -w вариант из ваших сценариев Perl 5.003, потому что он также сделал Perl
подробный, мы рекомендуем вам попробовать вернуть его при обновлении до Perl 5.004. Каждый
новая версия Perl имеет тенденцию удалять некоторые нежелательные предупреждения, добавляя новые предупреждения, которые
может отловить ошибки в ваших скриптах.

Устарело: Унаследованный «АВТОЗАГРУЗКА» для неметоды
До Perl 5.004 функции "AUTOLOAD" рассматривались как методы (с использованием @ISA
иерархии), даже когда функция, которая должна быть загружена автоматически, вызывалась как простая функция (например,
«Foo :: bar ()»), а не метод (например, «Foo-> bar ()» или «$ obj-> bar ()»).

Perl 5.005 будет использовать поиск методов только для методов "AUTOLOAD". Однако есть
значительная база существующего кода, который может использовать старое поведение. Итак, в качестве промежуточного
шаг, Perl 5.004 выдает необязательное предупреждение, когда не-метод использует унаследованный
«АВТОЗАГРУЗКА».

Простое правило: наследование не будет работать при автозагрузке не-методов. Простой
исправление для старого кода: в любом модуле, который раньше зависел от наследования "AUTOLOAD" для не-
методы из базового класса с именем "BaseClass", выполните "* AUTOLOAD = \ & BaseClass :: AUTOLOAD"
во время запуска.

предварительно устарела % ПЕРЕГРУЗКА is нет дольше годный к употреблению
Использование% OVERLOAD для определения перегрузки было объявлено устаревшим в версии 5.003. Перегрузка теперь определена
используя прагму перегрузки. % OVERLOAD по-прежнему используется внутри компании, но не должен использоваться
Скрипты Perl. Смотрите перегрузку для более подробной информации.

подпрограмма Аргументы создали Важно когда они модифицировало
В Perl 5.004 несуществующие элементы массива и хеш-функции, используемые в качестве параметров подпрограммы, являются
создаются только в том случае, если они действительно назначены (через @_).

Ранние версии Perl по-разному обрабатывают такие аргументы. Версии Perl 5.002
и 5.003 всегда создавали их. Их принесли версии Perl 5.000 и 5.001.
к существованию только в том случае, если они не были первым аргументом (что почти наверняка
ошибка). Более ранние версии Perl никогда не создавали их.

Например, с учетом этого кода:

undef @a; undef% a;
суб-шоу {print $ _ [0]};
подмена {$ _ [0] ++};
показать ($ a [2]);
изменить ($ a {b});

После выполнения этого кода в Perl 5.004 $ a {b} существует, а $ a [2] - нет. В Perl 5.002
и 5.003, существовали бы как $ a {b}, так и $ a [2] (но значение $ a [2] было бы
неопределенный).

В группе вектор Сменный $)
Специальная переменная $) всегда (ну, по крайней мере, в Perl 5) отражала не только
текущая эффективная группа, а также список групп, возвращаемый функцией "getgroups ()" C
функция (если есть). Однако до этого выпуска не было возможности вызвать
функция C "setgroups ()" из Perl.

В Perl 5.004 присвоение $) абсолютно симметрично с его проверкой: первое число
в его строковом значении используется как эффективный gid; если после первого есть числа
один, они передаются функции C "setgroups ()" (если она есть).

Исправлена разбор of $$ , & $ , и так далее
Версии Perl до 5.004 неверно интерпретировали любой маркер типа, за которым следовали «$» и цифра.
Например, «$$ 0» ошибочно означало «$ {$} 0» вместо «$ {$ 0}». Эта ошибка
(в основном) исправлено в Perl 5.004.

Однако разработчики Perl 5.004 не смогли исправить эту ошибку полностью, потому что по крайней мере
два широко используемых модуля зависят от старого значения «$$ 0» в строке. Итак, Perl 5.004
все еще интерпретирует "$$ "старым (ломанным) способом внутри строк; но он порождает это
сообщение как предупреждение. А в Perl 5.005 эта особая обработка исчезнет.

Исправлена локализация of $ , $ &, и так далее
Версии Perl до 5.004 не всегда правильно локализовали специальные, связанные с регулярными выражениями.
переменные. Perl 5.004 локализует их, как всегда говорилось в документации.
Это может привести к тому, что $ 1, $ 2 и т. Д. Больше не будут установлены там, где их используют существующие программы.

Нет сброс of $. on безоговорочно Закрыть
В документации Perl 5.0 всегда говорилось, что $. является сбросить, когда уже открытый
дескриптор файла открывается повторно без промежуточного вызова «закрыть». Из-за ошибки версии perl
5.000 через 5.003 сделал сбросить $. при этом обстоятельстве; Perl 5.004 этого не делает.

"wantarray" май возвращают недеф
Оператор wantarray возвращает истину, если ожидается, что подпрограмма вернет список, и
в противном случае - ложь. В Perl 5.004 "wantarray" может также возвращать неопределенное значение, если
возвращаемое значение подпрограммы не будет использоваться вообще, что позволяет подпрограммам избегать
трудоемкий расчет возвращаемого значения, если оно не будет использоваться.

"eval EXPR » определяет ценностное of EXPR in скаляр контекст
Perl (версия 5), используемый для определения значения EXPR непоследовательно, иногда неправильно
использование окружающего контекста для определения. Теперь значение EXPR (до того, как
анализируется eval) всегда определяется в скалярном контексте. После анализа он выполняется как
раньше, предоставив контекст, который предоставила область, окружающая eval. Этот
change делает поведение Perl4 совместимым, помимо исправления ошибок, связанных с
непоследовательное поведение. Эта программа:

@a = qw (время сейчас самое время);
напечатать eval @a;
print '|', скалярный eval @a;

раньше печатал что-то вроде «timenowis881399109 | 4», но теперь (и в perl4) печатает «4 | 4».

изменения в порча проверки
Ошибка в предыдущих версиях могла не обнаруживать некоторые небезопасные условия при заражении.
включены проверки. (Проверки заражения используются в сценариях setuid или setgid, или когда
явно включен с параметром вызова "-T".) Хотя это маловероятно, это может
вызвать сбой ранее работающего сценария, что следует рассматривать как благословение
поскольку это указывает на то, что потенциально серьезная дыра в безопасности была только что закрыта.

Новые ограничения при заражении включают:

Нет glob () или <*>
Эти операторы могут порождать оболочку C (csh), что невозможно сделать безопасным. Этот
ограничение будет снято в будущей версии Perl, когда будет реализована подстановка
без использования внешней программы.

Не запускается при заражении $ CDPATH, $ ENV, $ BASH_ENV
Эти переменные среды могут изменять поведение порожденных программ (особенно
оболочки) способами, которые подрывают безопасность. Так что теперь они рассматриваются как опасные в
способ $ IFS и $ PATH.

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

Новое опкод модуль и пересмотрен Безопасно модуль
Новый модуль кода операции поддерживает создание, изменение и применение масок кода операции.
Обновленный модуль Safe имеет новый API и реализован с помощью нового модуля Opcode.
Прочтите новую документацию по коду операции и Safe.

Встраивание улучшению
В более старых версиях Perl невозможно было создать более одного интерпретатора Perl.
экземпляр внутри одного процесса без утечек, как сито, и / или сбоев. Ошибки
все, что вызвало такое поведение, было исправлено. Однако вы все равно должны позаботиться о том, чтобы
встраивание Perl в программу C. См. Обновленную справочную страницу perlembed для получения советов о том, как
управлять своими переводчиками.

внутренний изменение: дескриптор файла класс основанный on IO :: * классов
Дескрипторы файлов теперь хранятся внутри как тип IO :: Handle. Модуль FileHandle все еще
поддерживается для обратной совместимости, но теперь это просто интерфейс для IO :: *
модули, в частности IO :: Handle, IO :: Seekable и IO :: File. Мы предлагаем, но не
требовать, чтобы вы использовали модули IO :: * в новом коде.

В соответствии с этим изменением * GLOB {FILEHANDLE} теперь является просто обратно совместимым синонимом.
для * GLOB {IO}.

внутренний изменение: ПерлиО абстракция интерфейс
Теперь можно собрать Perl с помощью пакета ввода-вывода sfio от AT&T вместо stdio. Видеть
perlapio для получения дополнительных сведений, а УСТАНОВИТЬ файл о том, как его использовать.

Новое и менялась синтаксис
$ coderef -> (ПАРАМЕТРЫ)
Ссылка на подпрограмму теперь может быть дополнена стрелкой и (возможно, пустым)
список параметров. Этот синтаксис обозначает вызов указанной подпрограммы с
заданные параметры (если есть).

Этот новый синтаксис следует шаблону "$ hashref -> {FOO}" и "$ aryref -> [$ foo]": вы
теперь можно записать «& $ subref ($ foo)» как «$ subref -> ($ foo)». Все эти стрелочные термины могут быть
прикованный; таким образом, "& {$ table -> {FOO}} ($ bar)" теперь может быть записано "$ table -> {FOO} -> ($ bar)".

Новое и менялась встроенная постоянная
__ПАКЕТ__
Текущее имя пакета во время компиляции или неопределенное значение, если нет
текущий пакет (из-за директивы package;). Как «__FILE__» и «__LINE__»,
«__PACKAGE__» делает вставлять в строки.

Новое и менялась встроенная переменные
$ ^ E Расширенное сообщение об ошибке на некоторых платформах. (Также известен как $ EXTENDED_OS_ERROR, если вы
"использовать английский").

$ ^ H Текущий набор синтаксических проверок, включенных с помощью "use strict". См. Документацию
"строгий" для более подробной информации. Не совсем новый, но недавно задокументированный. Потому что это
предназначен для внутреннего использования основными компонентами Perl, здесь нет длинного имени "использовать английский"
для этой переменной.

$ ^ M По умолчанию нехватка памяти не устраняется. Однако, если скомпилирован для этого,
Perl может использовать содержимое $ ^ M как аварийный пул после умереть ()с этим
сообщение. Предположим, что ваш Perl был скомпилирован с помощью -DPERL_EMERGENCY_SBRK и использовался
Perl-файл malloc. потом

$ ^ M = 'а' x (1 << 16);

выделит буфер 64 КБ для использования в аварийной ситуации. Увидеть УСТАНОВИТЬ файл для
информация о том, как включить эту опцию. В качестве сдерживающего фактора для случайного использования этого
расширенная функция, для этой переменной нет длинного имени "использовать английский".

Новое и менялась встроенная Функции
удалить по кусочкам
Теперь это работает. (например, "удалить @ENV {'PATH', 'MANPATH'}")

стадо
теперь поддерживается на большем количестве платформ, при эмуляции предпочитает fcntl вместо lockf и всегда
промывает перед (разблокировкой).

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

Новые преобразования в Perl's sprintf () составляют:

% ia синоним% d
Указатель% pa (адрес значения Perl в шестнадцатеричном формате)
% n special: * сохраняет * количество символов, выведенных на данный момент
в следующую переменную в списке параметров

Новые флаги между "%" и преобразованием:

# восьмеричный префикс с "0", шестнадцатеричный с "0x"
h интерпретирует целое число как тип C "короткий" или "беззнаковый короткий"
V интерпретирует целое число как стандартный целочисленный тип Perl

Кроме того, если во флагах появится число, вместо него можно использовать звездочку ("*"),
в этом случае Perl использует следующий элемент в списке параметров как заданное число (это
равно ширине поля или точности). Если ширина поля, полученная через "*", равна
отрицательный, он имеет тот же эффект, что и флаг '-': выравнивание по левому краю.

См. «Sprintf» в perlfunc для получения полного списка преобразований и флагов.

ключи как lvalue
В качестве lvalue «ключи» позволяют увеличить количество хэш-сегментов, выделенных для
данный хеш. Это может дать вам меру эффективности, если вы знаете, что хеш
собирается стать большим. (Это похоже на предварительное расширение массива путем присвоения большего
номер в массив $ #.) Если вы скажете

ключи% hash = 200;

тогда для% hash будет выделено не менее 200 сегментов. Эти ведра будут
сохраняется, даже если вы выполните "% hash = ()"; используйте undef% hash, если хотите освободить
хранилище, пока% hash все еще находится в области видимости. Вы не можете уменьшить количество ведер
выделенный для хэша с помощью "ключей" таким образом (но вам не нужно беспокоиться о том, чтобы сделать
это случайно, так как попытки не дали результата).

мой() в структурах управления
Теперь вы можете использовать мой() (со скобками или без них) в управляющих выражениях
управляющие структуры, такие как:

while (defined (my $ line = <>)) {
$ line = lc $ line;
} Продолжить {
print $ line;
}

если ((мой $ answer = ) = ~ / ^ y (es)? $ / i) {
user_agrees ();
} elsif ($ answer = ~ / ^ n (o)? $ / i) {
user_disagrees ();
} Еще {
chomp $ answer;
die "` $ answer 'не является ни `да', ни` нет '";
}

Кроме того, вы можете объявить управляющую переменную цикла foreach как лексическую, поставив перед ней
слово «мой». Например, в:

foreach my $ i (1, 2, 3) {
some_function ();
}

$ i - лексическая переменная, и область видимости $ i распространяется до конца цикла, но не
за ней.

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

пакет() и распаковать ()
Новый формат 'w' представляет собой сжатое целое число BER (как определено в ASN.1). Его
формат - это последовательность из одного или нескольких байтов, каждый из которых обеспечивает семь битов
общая стоимость, с наиболее значимой первой. Устанавливается восьмой бит каждого байта, кроме
для последнего байта, в котором бит восемь свободен.

Если в качестве значений 'p' или 'P' задано undef, они теперь генерируют NULL-указатель.

Оба формата пакет() и распаковать () теперь не работают, если их шаблоны содержат недопустимые типы.
(Раньше недопустимые типы игнорировались.)

sysseek ()
Новый sysseek () оператор является вариантом стремиться() который устанавливает и получает файловую систему
чтение / запись позиции, используя я ищу(2) системный вызов. Это единственный надежный способ
искать перед использованием sysread () or syswrite (). Его возвращаемое значение - новая позиция, или
неопределенное значение при ошибке.

использовать ВЕРСИЮ
Если первым аргументом для "использования" является число, оно рассматривается как номер версии.
имени модуля. Если версия интерпретатора Perl меньше VERSION, то
выводится сообщение об ошибке, и Perl немедленно завершает работу. Поскольку "использование" происходит в
во время компиляции, эта проверка происходит сразу во время процесса компиляции, в отличие от
"require VERSION", который ожидает выполнения проверки. Это часто бывает полезно, если
вам необходимо проверить текущую версию Perl, прежде чем "использовать" модули библиотеки, которые имеют
изменен несовместимым образом из более старых версий Perl. (Мы стараемся не делать этого больше
чем мы должны.)

использовать СПИСОК ВЕРСИЙ МОДУЛЯ
Если аргумент ВЕРСИЯ присутствует между модулем и СПИСОК, тогда "использование" вызовет
метод VERSION в классе Module с заданной версией в качестве аргумента. По умолчанию
VERSION, унаследованный от класса UNIVERSAL, хрипит, если данная версия
больше, чем значение переменной $ Module :: VERSION. (Обратите внимание, что нет
запятая после ВЕРСИИ!)

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

прототип (ФУНКЦИЯ)
Возвращает прототип функции в виде строки (или undef, если функция не имеет
прототип). FUNCTION - это ссылка или имя функции, прототип которой
вы хотите получить. (На самом деле не ново; просто никогда раньше не документировалось.)

сранд
Начальное значение по умолчанию для srand, которое раньше было "time", было изменено. Теперь это
пьянящая смесь трудно прогнозируемых системно-зависимых значений, которых должно быть достаточно
для большинства повседневных целей.

До версии 5.004 вызов "rand" без первого вызова "srand" дал бы
одна и та же последовательность случайных чисел на большинстве или на всех машинах. Теперь, когда perl видит, что
вы называете "rand" и еще не вызываете "srand", он вызывает "srand" с
семя по умолчанию. Вам все равно следует вызывать "srand" вручную, если ваш код может когда-либо запускаться на
система до 5.004, конечно, или если вы хотите семя, отличное от значения по умолчанию.

$ _ по умолчанию
Функции, задокументированные в Camel, теперь по умолчанию имеют значение $ _, и все те, которые
do так задокументированы в perlfunc.

"m // gc" не сбрасывает позицию поиска в случае неудачи
Конструкция итерации сопоставления "m // g" всегда сбрасывала поиск по целевой строке.
позиция (которая видна через оператор "pos"), когда совпадение не удается; как
результат, следующее совпадение "m // g" после сбоя начинается снова в начале
нить. В Perl 5.004 этот сброс можно отключить, добавив "c" (для
"continue") модификатор, то есть "m // gc". Эта функция в сочетании с нулевым символом "\ G"
Утверждение ширины, позволяет объединять совпадения в цепочку. См. Perlop и perlre.

«m // x» игнорирует пробелы перед? * + {}
Конструкция «m // x» всегда предназначалась для игнорирования всех неэкранированных пробелов.
Однако до Perl 5.004 пробелы имели эффект экранирования модификаторов повтора.
как «*» или «?»; например, «/ a * b / x» (неправильно) интерпретировалось как «/ a \ * b / x». Эта ошибка
исправлена ​​в 5.004.

вложенные замыкания "sub {}" теперь работают
До выпуска 5.004 вложенные анонимные функции работали некорректно. Они делают
сейчас.

форматы работают правильно при изменении лексики
Так же, как анонимные функции, содержащие изменяющиеся лексические переменные (например,
переменная лексического индекса для цикла "foreach") форматы теперь работают правильно. Например,
раньше это молча терпело неудачу (печатались только нули), но теперь все в порядке:

мой $ i;
foreach $ i (1 .. 10) {
записывать;
}
формат =
мой я @ #
$i
.

Однако он по-прежнему не работает (без предупреждения), если foreach находится в подпрограмме:

мой $ i;
сабвуфер {
foreach $ i (1 .. 10) {
записывать;
}
}
фу;
формат =
мой я @ #
$i
.

Новое встроенная методы
Пакет "UNIVERSAL" автоматически содержит следующие методы, которые наследуются
все остальные классы:

isa (КЛАСС)
"isa" возвращается правда если его объект благословлен в подкласс "CLASS"

"isa" также экспортируется и может вызываться как подпрограмма с двумя аргументами. Это позволяет
возможность проверить, на что указывает ориентир. Пример:

используйте УНИВЕРСАЛЬНЫЙ qw (isa);

if (isa ($ ref, 'ARRAY')) {
...
}

может (МЕТОД)
"can" проверяет, есть ли у его объекта метод под названием "МЕТОД", если да, то
возвращается ссылка на саб; если нет, то недеф возвращается.

ВЕРСИЯ ([НЕОБХОДИМО])
«ВЕРСИЯ» возвращает номер версии класса (пакета). Если аргумент НЕОБХОДИМО
после этого он проверит, что текущая версия (как определено переменной $ VERSION
в данном пакете) не менее NEED; он умрет, если это не так. Этот
метод обычно вызывается как метод класса. Этот метод автоматически вызывается
форма «ВЕРСИЯ» употребления.

используйте A 1.2 qw (некоторые импортированные сабы);
# подразумевает:
A-> ВЕРСИЯ (1.2);

ПРИМЕЧАНИЕ: «can» напрямую использует внутренний код Perl для поиска методов, а «isa» использует очень
аналогичный метод и стратегия кеширования. Это может вызвать странные эффекты, если код Perl
динамически изменяет @ISA в любом пакете.

Вы можете добавить другие методы в класс UNIVERSAL с помощью кода Perl или XS. Тебе не нужно
"используйте UNIVERSAL", чтобы сделать эти методы доступными для вашей программы. Это
необходимо только в том случае, если вы хотите, чтобы "isa" была доступна как обычная подпрограмма в текущем
пакет.

РУЧКА сейчас поддержал
См. Perltie для других видов галстук()s.

TIEHANDLE имя класса, СПИСОК
Это конструктор класса. Это означает, что ожидается возврат объекта
какой-то. Ссылка может использоваться для хранения некоторой внутренней информации.

дополнительная РУЧКА {
Распечатать " \ п ";
мой $ i;
вернуть благословение \ $ i, сдвиг;
}

ПЕЧАТЬ, СПИСОК
Этот метод будет запускаться каждый раз при печати привязанного дескриптора. Помимо его
Самостоятельная ссылка также ожидает список, который был передан функции печати.

суб ПЕЧАТЬ {
$ r = сдвиг;
$$ r ++;
вернуть печать соединения ($, => карта {uc} @_), $ \;
}

ПЕЧАТЬ, СПИСОК
Этот метод будет запускаться каждый раз, когда привязанный дескриптор печатается с
Функция printf (). Помимо ссылки на себя, он также ожидает, что формат и список
который был передан функции printf.

суб PRINTF {
сдвиг;
мой $ fmt = shift;
напечатать sprintf ($ fmt, @_). "\ n";
}

ПРОЧИТАЙТЕ этот СПИСОК
Этот метод будет вызываться, когда дескриптор считывается из "read" или "sysread"
функции.

суб ПРОЧИТАТЬ {
$ r = сдвиг;
мой ($ buf, $ len, $ offset) = @_;
print "READ вызвано, \ $ buf = $ buf, \ $ len = $ len, \ $ offset = $ offset";
}

ПРОЧИТАЙТЕ это
Этот метод будет вызываться при чтении дескриптора. Метод должен вернуть
undef, когда данных больше нет.

подпрограмма READLINE {
$ r = сдвиг;
return "PRINT вызвал $$ r раз \ n"
}

GETC это
Этот метод будет вызываться при вызове функции "getc".

sub GETC {print «Не использовать GETC, получить Perl»; вернуть «а»; }

УНИЧТОЖАЙТЕ это
Как и в случае с другими типами связей, этот метод будет вызываться, когда привязанный дескриптор
вот-вот будет уничтожен. Это полезно для отладки и, возможно, для очистки.

суб УНИЧТОЖИТЬ {
Распечатать " \ п ";
}

Маллок улучшения
Если perl скомпилирован с использованием malloc, включенного в дистрибутив perl (то есть, если "perl
-V: d_mymalloc "равно 'define'), тогда вы можете распечатать статистику памяти во время выполнения, запустив
Таким образом, Perl:

env PERL_DEBUG_MSTATS = 2 perl your_script_here

Значение 2 означает вывод статистики после компиляции и при выходе; со значением 1,
статистика печатается только при выходе. (Если вам нужна статистика на произвольном
раз вам потребуется установить дополнительный модуль Devel :: Peek.)

Malloc.c распознает три новых флага компиляции. (Они не действуют, если perl
скомпилирован с системой таНос ().)

-DPERL_EMERGENCY_SBRK
Если этот макрос определен, нехватка памяти не обязательно должна быть фатальной ошибкой: память
пул можно выделить путем присвоения специальной переменной $ ^ M. См. «$ ^ M».

-DPACK_MALLOC
Выделение памяти Perl происходит по сегментам с размерами, близкими к степени двойки. Потому что
эти накладные расходы malloc могут быть большими, особенно для данных размером ровно степень двойки.
Если "PACK_MALLOC" определен, perl использует немного другой алгоритм для небольших
выделения (длиной до 64 байтов), что позволяет уменьшить накладные расходы до 1
байт для распределений, которые являются степенями двойки (и встречаются довольно часто).

Ожидаемая экономия памяти (с 8-байтовым выравниванием в «alignbytes») составляет около 20% для
типичное использование Perl. Ожидаемое замедление из-за дополнительных накладных расходов malloc находится в
доли процента (трудно измерить из-за влияния сохраненной памяти на
скорость).

-DTWO_POT_OPTIMIZE
Подобно "PACK_MALLOC", этот макрос улучшает распределение данных с размером, близким к
степень двойки; но это работает для больших распределений (начиная с 16 КБ по умолчанию).
Такое распределение типично для больших хешей и специализированных скриптов, особенно
обработка изображений.

В последних системах тот факт, что perl требует от системы 2M для распределения 1M, будет
не влияет на скорость выполнения, так как хвост такого фрагмента не будет
коснулся (и, следовательно, не потребует реальной памяти). Однако это может привести к
преждевременная ошибка нехватки памяти. Итак, если вы будете манипулировать очень большими блоками с помощью
размеров, близких к степени двойки, было бы разумно определить этот макрос.

Ожидаемая экономия памяти составляет 0-100% (100% в приложениях, которым требуется больше всего памяти в
таких 2 ** n кусков); ожидаемое замедление темпов роста незначительно.

Прочее затрат улучшения
Функции, у которых есть пустой прототип и которые ничего не делают, кроме возврата фиксированного значения, являются
теперь встроен (например, "sub PI () {3.14159}").

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

Поддержка для Ещё Операционный системы


Поддержка следующих операционных систем является новой в Perl 5.004.

Win32
Perl 5.004 теперь включает поддержку создания «родного» Perl под Windows NT с использованием
Компилятор Microsoft Visual C ++ (версии 2.0 и выше) или компилятор Borland C ++
(версии 5.02 и выше). Полученный perl можно использовать под Windows 95 (если он
установлен в том же каталоге, что и в Windows NT). Этот порт
включает поддержку инструментов для создания расширений Perl, таких как ExtUtils :: MakeMaker и h2xs, поэтому
что многие расширения, доступные в Comprehensive Perl Archive Network (CPAN), теперь могут быть
легко собирается под Windows NT. Видеть http://www.perl.com/ для получения дополнительной информации о CPAN и
ЧИТАЙТЕ.win32 в дистрибутиве perl для получения более подробной информации о том, как начать сборку
этот порт.

Также существует поддержка сборки perl в среде Cygwin32. Cygwin32 - это набор
инструментов GNU, которые позволяют компилировать и запускать многие программы Unix под Windows NT
предоставляя в основном Unix-подобный интерфейс для компиляции и выполнения. Видеть
README.cygwin32 в дистрибутиве perl для получения более подробной информации об этом порте и о том, как получить
набор инструментов Cygwin32.

План 9
Увидеть README.plan9 в дистрибутиве perl.

QNX
Увидеть README.qnx в дистрибутиве perl.

АмигаОС
Увидеть README.amigaos в дистрибутиве perl.

Прагмата


Существуют шесть новых прагматических модулей:

используйте МОДУЛЬ автозагрузки => qw (sub1 sub2 sub3)
Откладывает запрос "Требовать МОДУЛЬ" до тех пор, пока кто-нибудь не вызовет одну из указанных подпрограмм (которая
должен быть экспортирован МОДУЛЕМ). Эту прагму следует использовать с осторожностью и только тогда, когда
необходимо.

использовать блиб
используйте blib 'dir'
Похож на MakeMaker 'блиб' структура каталогов, начиная с директория (или текущий
каталог) и работает резервное копирование до пяти уровней родительских каталогов.

Предназначен для использования в командной строке с -M вариант как способ тестирования произвольных скриптов
против неустановленной версии пакета.

использовать константу ИМЯ => ЗНАЧЕНИЕ
Предоставляет удобный интерфейс для создания констант времени компиляции, см. «Константа
Функции »в perlsub.

использовать локаль
Сообщает компилятору включить (или отключить) использование локалей POSIX для встроенных
операций.

Когда действует "использовать языковой стандарт", текущий языковой стандарт LC_CTYPE используется для обычных
выражения и отображение регистра; LC_COLLATE для упорядочивания строк; и LC_NUMERIC для
числовое форматирование в printf и sprintf (но в печати). LC_NUMERIC всегда
используется при записи, поскольку лексическая область видимости форматов в лучшем случае проблематична.

Каждое выражение «использовать языковой стандарт» или «без языкового стандарта» влияет на операторы до конца включающего БЛОКА.
или, если не внутри БЛОКА, до конца текущего файла. Локали можно переключать
и запросил с POSIX :: setlocale ().

См. Perllocale для получения дополнительной информации.

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

использовать vmsish
Включите специальные языковые функции VMS. В настоящее время существует три специфичных для VMS
доступные функции: 'status', что делает $? и "система" возвращает подлинный статус VMS
значения вместо эмуляции POSIX; 'exit', который заставляет "exit" использовать настоящую VMS.
значение статуса вместо предположения, что «exit 1» является ошибкой; и "время", что делает
все время относительно местного часового пояса в соответствии с традициями VMS.

Модули


необходимые Updates
Хотя Perl 5.004 совместим почти со всеми модулями, работающими с Perl 5.003,
есть несколько исключений:

Требуемая версия модуля для Perl 5.004
------ -------------------------------
Фильтр Фильтр-1.12
Библиотека LWP www-perl-5.08
Tk Tk400.202 (-w шумит)

Кроме того, программа списка рассылки majordomo версии 1.94.1 не работает с Perl 5.004.
(ни с Perl 4), потому что он выполняет недопустимое регулярное выражение. Эта ошибка исправлена
в версии majordomo 1.94.2.

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

Модули информация резюме
Совершенно новые модули, расположенные по темам, а не строго в алфавитном порядке:

Интерфейс веб-сервера CGI.pm («Общий интерфейс шлюза»)
CGI / Apache.pm Поддержка модуля Apache Perl
CGI / Carp.pm Ошибки сервера журнала с полезным контекстом
CGI / Fast.pm Поддержка FastCGI (постоянный серверный процесс)
CGI / Push.pm Поддержка server push
CGI / Switch.pm Простой интерфейс для нескольких типов серверов

Интерфейс CPAN к всеобъемлющей сети архивов Perl
CPAN :: FirstTime Утилита для создания файла конфигурации CPAN
CPAN :: Nox Запускает CPAN, избегая скомпилированных расширений

IO.pm Интерфейс верхнего уровня для классов IO :: *
IO / File.pm IO :: модуль расширения файла Perl
IO / Handle.pm IO :: Handle extension Perl-модуль
IO / Pipe.pm IO :: модуль расширения трубы Perl
IO / Seekable.pm IO :: модуль Perl расширения Seekable
IO / Select.pm IO :: Выбрать модуль расширения Perl
IO / Socket.pm IO :: модуль Perl расширения сокетов

Opcode.pm Отключить именованные коды операций при компиляции кода Perl

ExtUtils / Embed.pm Утилиты для встраивания Perl в программы на C
ExtUtils / testlib.pm Исправляет @INC для использования только что созданного расширения.

FindBin.pm Найти путь к выполняющейся в данный момент программе

Class / Struct.pm Объявить структурные типы данных как классы Perl
File / stat.pm Интерфейс по имени для встроенной статистики Perl
Net / hostent.pm Интерфейс по имени для встроенного в Perl gethost *
Net / netent.pm Интерфейс по имени для встроенного в Perl getnet *
Net / protoent.pm Интерфейс по имени для встроенного в Perl getproto *
Net / servent.pm Интерфейс по имени для встроенного в Perl getserv *
Time / gmtime.pm Интерфейс по имени для встроенного в Perl gmtime
Time / localtime.pm Интерфейс по имени для встроенного локального времени Perl
Time / tm.pm Внутренний объект для Time :: {gm, local} time
User / grent.pm Интерфейс по имени для встроенного в Perl getgr *
User / pwent.pm Интерфейс по имени для встроенного в Perl getpw *

Tie / RefHash.pm Базовый класс для связанных хэшей со ссылками в качестве ключей

UNIVERSAL.pm Базовый класс для * ВСЕХ * классов

Фкнтл
Теперь поддерживаются новые константы в существующих модулях Fcntl при условии, что ваш
операционная система их поддерживает:

F_GETOWN F_SETOWN
O_ASYNC O_DEFER O_DSYNC O_FSYNC O_SYNC
O_EXLOCK O_SHLOCK

Эти константы предназначены для использования с операторами Perl. sysopen () и fcntl () и
базовые модули базы данных, такие как SDBM_File. Для точного значения этих и других Fcntl
константы, пожалуйста, обратитесь к документации вашей операционной системы для fcntl () и открытый().

Кроме того, модуль Fcntl теперь предоставляет эти константы для использования с оператором Perl.
стадо():

LOCK_SH LOCK_EX LOCK_NB LOCK_UN

Эти константы определены во всех средах (потому что там, где нет стадо() система
вызов, Perl эмулирует его). Однако по историческим причинам эти константы не являются
экспортируются, если они явно не запрошены с тегом ": flock" (например, "использовать Fcntl
':стадо'").

IO
Модуль ввода-вывода предоставляет простой механизм для одновременной загрузки всех модулей ввода-вывода. В настоящее время
Это включает:

IO :: Ручка
IO :: Seekable
IO :: Файл
IO :: Труба
IO :: Socket

Дополнительную информацию о любом из этих модулей см. В соответствующей документации.

Математика :: Комплекс
Модуль Math :: Complex был полностью переписан и теперь поддерживает больше операций.
Они перегружены:

+ - * / ** <=> neg ~ abs sqrt exp log sin cos atan2 "" (преобразовать в строку)

И эти функции теперь экспортируются:

пи я ре им аргумент
log10 logn ln cbrt корень
загар
csc sec детская кроватка
асин акос атан
acsc асек акот
Sinh Cosh Tanh
csch sech coth
Асин Акош Атанх
акш асек акот
cplx cplxe

Math :: Trig
Этот новый модуль обеспечивает более простой интерфейс к частям Math :: Complex для тех, кому нужно
тригонометрические функции только для действительных чисел.

DB_Файл
В DB_File было внесено довольно много изменений. Вот несколько основных моментов:

· Исправлено несколько ошибок.

· По запросу общественности добавлена ​​поддержка стандартной хеш-функции. существуют().

· Сделал его совместимым с Berkeley DB 1.86.

· В интерфейсе RECNO добавлены отрицательные индексы.

· Изменены флаги по умолчанию с O_RDWR на O_CREAT | O_RDWR и режим по умолчанию с 0640
в 0666.

· Сделано DB_File автоматически импортировать открытый() константы (O_RDWR, O_CREAT и т. д.) из
Fcntl, если есть.

· Обновленная документация.

Обратитесь к разделу ИСТОРИЯ в DB_File.pm для получения полного списка изменений. Все
после того, как DB_File 1.01 был добавлен с 5.003.

Сеть :: Пинг
Существенное переписывание - добавлена ​​поддержка как для udp-эха, так и для реальных ICMP-запросов.

Объектно-ориентированный переопределения для встроенная Операторы
Многие из возвращаемых списков встроенных функций Perl теперь имеют объектно-ориентированные переопределения. Эти:

File :: stat
Net :: hostent
Net :: netent
Net :: protoent
Сеть :: сервент
Время :: gmtime
Время :: местное время
Пользователь :: grent
Пользователь :: pwent

Например, теперь вы можете сказать

используйте File :: stat;
используйте User :: pwent;
$ his = (stat ($ filename) -> st_uid == pwent ($ whoever) -> pw_uid);

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


pod2html
Отправляет преобразованный HTML в стандартный вывод
Команда pod2html Утилита, включенная в Perl 5.004, совершенно новая. По умолчанию он отправляет
преобразованный HTML в его стандартный вывод, вместо того, чтобы записывать его в файл, подобный Perl
5.003 года pod2html сделал. Использовать --outfile = ИМЯ ФАЙЛА возможность записи в файл.

xsubpp
"void" XSUB теперь по умолчанию ничего не возвращают
Из-за ошибки документации / реализации в предыдущих версиях Perl файлы XSUB с
Тип возврата «void» фактически возвращал одно значение. Обычно это значение было
GV для XSUB, но иногда это было уже освобожденное или повторно используемое значение, которое
иногда приводил к сбою программы.

В Perl 5.004, если XSUB объявлен как возвращающий "void", он фактически возвращает no
значение, то есть пустой список (хотя есть исключение обратной совместимости; см.
ниже). Если ваш XSUB действительно возвращает SV, вы должны указать ему тип возврата
«СВ *».

Для обратной совместимости xsubpp пытается угадать, действительно ли "пустой" XSUB
"void" или если он хочет вернуть "SV *". Это делается путем изучения текста
XSUB: если xsubpp находит то, что похоже на задание ST(0) предполагается, что
Тип возврата XSUB на самом деле "SV *".

C Язык API изменения


"gv_fetchmethod" и "perl_call_sv"
Функция "gv_fetchmethod" находит метод для объекта, как и в Perl 5.003.
GV, который он возвращает, может быть записью кэша метода. Однако в Perl 5.004 кеш метода
записи не видны пользователям; следовательно, они больше не могут быть переданы напрямую в
"perl_call_sv". Вместо этого вы должны использовать макрос «GvCV» на GV, чтобы извлечь его CV,
и передайте резюме в "perl_call_sv".

Наиболее вероятным признаком передачи результата «gv_fetchmethod» в «perl_call_sv» является
Perl выдает ошибку "Неопределенная подпрограмма вызвана" на второй призыв к данному
метод (поскольку при первом вызове кеша нет).

"perl_eval_pv"
Новая функция, удобная для оценки строк кода Perl внутри кода C. Эта функция
возвращает значение из оператора eval, которое можно использовать вместо получения
глобальные переменные из таблицы символов. См. Подробности в perlguts, perlembed и perlcall, а также
примеры.

Расширенный API для управления хешами
Изменилась внутренняя обработка хеш-ключей. Старый API хеш-таблицы все еще полностью
поддерживаются и, вероятно, останутся таковыми. Дополнения к API позволяют передавать ключи как
"SV *", так что "связанным" хэшам можно давать реальные скаляры в качестве ключей, а не простые
строки (несвязанные хэши по-прежнему могут использовать только строки в качестве ключей). Новые расширения должны использовать
новые функции доступа к хешу и макросы, если они хотят использовать клавиши «SV *». Эти
дополнения также делают возможным манипулирование "HE *" (хеш-записями), которые могут быть больше
эффективный. См. Подробности в perlguts.

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


Были обновлены многие из базовых и библиотечных модулей. Эти новые модули включены в раздел 1:

Perldelta
Этот документ.

Perlfaq
Часто задаваемые вопросы.

Perllocale
Поддержка локали (интернационализация и локализация).

перлтут
Учебник по программированию Perl OO.

перлапио
Внутренний интерфейс абстракции ввода-вывода Perl.

Perlmodlib
Библиотека модулей Perl и рекомендуемые методы создания модулей. Извлеченный из
perlmod (который в результате намного меньше).

перлдебаг
Хотя это и не ново, оно было значительно обновлено.

перлсек
Хотя это и не ново, оно было значительно обновлено.

Новое Диагностика


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

(W) Предупреждение (необязательно).
(D) Прекращение поддержки (необязательно).
(S) Серьезное предупреждение (обязательно).
(F) Фатальная ошибка (устранимая).
(P) Внутренняя ошибка, которую вы никогда не должны видеть (устранимая).
(X) Очень фатальная ошибка (невозможно устранить).
(A) Сообщение об ошибке пришельца (не сгенерированное Perl).

"моя" переменная% s маскирует предыдущее объявление в той же области
(W) Лексическая переменная была повторно объявлена ​​в той же области видимости, что эффективно устраняет
весь доступ к предыдущему экземпляру. Это почти всегда опечатка.
Обратите внимание, что более ранняя переменная все еще будет существовать до конца области или до тех пор, пока
все закрывающие ссылки на него уничтожаются.

Аргумент% s не является элементом или фрагментом HASH
(F) Аргумент в пользу удалять() должен быть хеш-элементом, например

$ foo {$ bar}
$ ref -> [12] -> {"susie"}

или хеш-фрагмент, например

@foo {$ bar, $ baz, $ xyzzy}
@ {$ ref -> [12]} {"susie", "queue"}

Выделение слишком велико:% lx
(X) Вы не можете выделить больше 64 КБ на машине MS-DOS.

Распределение слишком велико
(F) Вы не можете выделить более 2 ^ 31 + «небольшое количество» байтов.

Применение% s к% s будет действовать на скаляр (% s)
(W) Операторы сопоставления с образцом (//), подстановки (s ///) и транслитерации (tr ///)
работать со скалярными значениями. Если вы примените один из них к массиву или хешу, он будет
преобразовать массив или хэш в скалярное значение (длина массива или совокупность
информация о хэше), а затем работайте над этим скалярным значением. Это наверное не то, что ты
предназначено сделать. Альтернативы см. В «grep» в perlfunc и «map» в perlfunc.

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

Попытка использовать ссылку как lvalue в substr
(W) Вы указали ссылку в качестве первого аргумента для substr () используется как lvalue,
что довольно странно. Возможно, вы сначала забыли разыменовать его. См. «Substr» в
перфункц.

Голое слово "% s" относится к несуществующему пакету.
(W) Вы использовали квалифицированное голое слово в форме "Foo ::", но компилятор не увидел другого
использует это пространство имен до этой точки. Возможно, вам нужно заранее объявить пакет?

Невозможно переопределить активную подпрограмму сортировки% s
(F) Perl оптимизирует внутреннюю обработку подпрограмм сортировки и сохраняет указатели в
их. Вы пытались переопределить одну такую ​​подпрограмму сортировки, когда она была активна в данный момент,
что не допускается. Если вы действительно хотите это сделать, вам следует написать "sort {& func}"
@x "вместо" sort func @x ".

Невозможно использовать голое слово ("% s") в качестве ссылки% s при использовании "strict refs"
(F) "Строгие ссылки" допускаются только жесткими ссылками. Символические ссылки
запрещено. См. Perlref.

Невозможно разрешить метод `% s ', перегружающий`% s' в пакете `% s '
(P) Внутренняя ошибка при попытке разрешить перегрузку, указанную в имени метода (как
в отличие от ссылки на подпрограмму).

Переопределена постоянная подпрограмма% s
(S) Вы переопределили подпрограмму, которая ранее допускалась для встраивания. Видеть
«Постоянные функции» в perlsub для комментариев и обходных путей.

Постоянная подпрограмма% s undefined
(S) Вы не определили подпрограмму, которая ранее допускалась для встраивания. Видеть
«Постоянные функции» в perlsub для комментариев и обходных путей.

Метод копирования не вернул ссылку
(F) Метод, который перегружает "=", содержит ошибки. См. «Конструктор копирования» в разделе «Перегрузка».

умер
(F) Вы прошли умереть () пустая строка (эквивалент "die" "") или вы ее назвали
без аргументов, и оба $ @ и $ _ были пустыми.

Выход из псевдоблока через% s
(W) Вы выходите из довольно специальной конструкции блока (например, блока сортировки или подпрограммы)
нетрадиционными средствами, такими как goto или оператор управления циклом. См. "Сортировка" в
перфункц.

Слишком длинный идентификатор
(F) Perl ограничивает идентификаторы (имена переменных, функций и т. Д.) До 252 символов.
для простых имен, несколько больше для составных имен (например, $ A :: B). Вы превысили
Ограничения Perl. В будущих версиях Perl эти произвольные
ограничения.

Недопустимый символ% s (возврат каретки)
(F) Во вводе обнаружен символ возврата каретки. Это ошибка, а не
предупреждение, потому что символы возврата каретки могут разорвать многострочные строки, включая
здесь документы (например, "print <

Недопустимый переключатель в PERL5OPT:% s
(X) Переменная среды PERL5OPT может использоваться только для установки следующих переключателей:
- [DIMUdmw].

Целочисленное переполнение в шестнадцатеричном формате
(S) Буквальное шестнадцатеричное число, которое вы указали, слишком велико для вашей архитектуры. На
32-битная архитектура. Самый большой шестнадцатеричный литерал - 0xFFFFFFFF.

Целочисленное переполнение в восьмеричном числе
(S) Буквальное восьмеричное число, которое вы указали, слишком велико для вашей архитектуры. На
32-битная архитектура: самый большой восьмеричный литерал - 037777777777.

внутренняя ошибка: сбой glob
(P) Что-то пошло не так с внешними программами, используемыми для "glob" и "<*. C>".
Это может означать, что ваш csh (оболочка C) не работает. Если это так, вам следует изменить все
Переменные, связанные с csh, в config.sh: если у вас есть tcsh, сделайте так, чтобы переменные ссылались на него
как если бы это был csh (например, "full_csh = '/ usr / bin / tcsh'"); в противном случае сделайте их все пустыми
(за исключением того, что «d_csh» должен быть undef), чтобы Perl подумал, что csh отсутствует. В
в любом случае после редактирования config.sh запустите "./Configure -S" и пересоберите Perl.

Недопустимая конверсия в% s: "% s"
(W) Perl не понимает данное преобразование формата. См. «Sprintf» в perlfunc.

Неверный тип в пакете: '% s'
(F) Данный символ не является допустимым типом упаковки. См. "Pack" в perlfunc.

Неверный тип в распаковке: '% s'
(F) Данный символ не является допустимым типом распаковки. Смотрите "распаковать" в perlfunc.

Имя "% s ::% s" используется только один раз: возможна опечатка.
(W) Типографические ошибки часто проявляются в уникальных именах переменных. Если бы у вас был хороший
причина наличия уникального имени, затем просто упомяните его еще раз, чтобы подавить
сообщение (прагма "use vars" предназначена только для этой цели).

Нулевое изображение в строке формы
(F) Первый аргумент строки формы должен быть допустимой спецификацией изображения формата. Это
оказался пустым, что, вероятно, означает, что вы указали ему неинициализированное значение.
См. Perlform.

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

Недостаточно памяти!
(X | F) таНос () функция вернула 0, указывая на то, что осталось недостаточно
память (или виртуальная память) для удовлетворения запроса.

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

Недостаточно памяти во время запроса% s
(F) таНос () функция вернула 0, указывая на то, что осталось недостаточно
память (или виртуальная память) для удовлетворения запроса. Однако запрос был рассмотрен
достаточно большой (по умолчанию время компиляции - 64 КБ), поэтому возможность выключения путем захвата
эта ошибка разрешена.

паника: frexp
(P) Библиотечная функция frexp () не удалось, что сделало printf ("% f") невозможным.

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

Вы, наверное, написали что-то вроде этого:

@list = qw (
a # комментарий
b # еще один комментарий
);

когда вы должны были написать это:

@list = qw (
a
b
);

Если вам действительно нужны комментарии, составьте свой список по старинке, с цитатами и
запятые:

@список = (
'a', # комментарий
'b', # еще один комментарий
);

Возможная попытка разделить слова запятыми
(W) qw () списки содержат элементы, разделенные пробелами; поэтому запятые не нужны
разделить предметы. (Возможно, вы использовали другие разделители, чем круглые скобки
показано здесь; брекеты также часто используются.)

Вы, наверное, написали что-то вроде этого:

qw! а, б, в!;

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

qw! abc!;

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

Обнаружена заглушка при разрешении метода `% s ', перегружающего`% s' в% s
(P) Разрешение перегрузки по дереву @ISA может быть нарушено путем импорта заглушек. Заглушки
никогда не должны создаваться неявно, но явные вызовы "can" могут это нарушить.

Слишком поздно для "-Tвариант
(X) #! строка (или локальный эквивалент) в сценарии Perl содержит -T вариант, но
Perl не запускался с -T в его списке аргументов. Это ошибка, потому что
время, когда Perl обнаруживает -T в сценарии уже слишком поздно, чтобы как следует испортить все из
окружающая среда. Так что Perl сдаётся.

попытка отвязать, пока существует% d внутренних ссылок
(W) Копия объекта, возвращенная из «галстук» (или «связанный»), все еще действительна, когда «развязать»
назывался.

Неизвестный символ% s
(F) Парсер Perl не знает, что делать с указанным символом в вашем Perl.
скрипт (или eval). Возможно, вы пытались запустить сжатый скрипт, двоичную программу или
каталог как программа на Perl.

Неподдерживаемая функциональная вилка
(F) Ваша версия исполняемого файла не поддерживает разветвление.

Обратите внимание, что в некоторых системах, таких как OS / 2, могут быть разные разновидности Perl.
исполняемые файлы, некоторые из которых могут поддерживать fork, а некоторые нет. Попробуйте изменить имя, которое вы называете
Perl до "perl_", "perl__" и так далее.

Использование "$$ "означать" $ {$} " устарел
(D) Версии Perl до 5.004 неверно интерпретировали любой маркер типа, за которым следовали "$" и
цифра. Например, «$$ 0» неправильно было означало «$ {$} 0» вместо «$ {$ 0}».
Эта ошибка (в основном) исправлена ​​в Perl 5.004.

Однако разработчики Perl 5.004 не смогли исправить эту ошибку полностью, потому что на
как минимум два широко используемых модуля зависят от старого значения «$$ 0» в строке. Итак, Perl
5.004 по-прежнему интерпретирует "$$ "по старинке (ломаной) внутри струн; но это
генерирует это сообщение как предупреждение. А в Perl 5.005 эта особая обработка будет
прекратиться.

Значение% s может быть «0»; тест с определено ()
(W) В условном выражении вы использовали , <*> (glob), "each ()" или
readdir () как логическое значение. Каждая из этих конструкций может возвращать значение «0»;
это сделало бы условное выражение ложным, что, вероятно, не то, что вы
предназначена. При использовании этих конструкций в условных выражениях проверьте их значения.
с "определенным" оператором.

Переменная "% s" может быть недоступна
(W) Внутренний (вложенный) анонимный подпрограмма находится внутри названный подпрограмма, и вне
это другая подпрограмма; а анонимная (самая внутренняя) подпрограмма обращается к
лексическая переменная, определенная во внешней подпрограмме. Например:

sub внешнее {my $ a; ниже среднего {sub {$ a}}}

Если анонимная подпрограмма вызывается или упоминается (прямо или косвенно) из
самая внешняя подпрограмма, она будет использовать переменную, как и следовало ожидать. Но если
анонимная подпрограмма вызывается или на нее ссылаются, когда внешняя подпрограмма не
активен, он будет видеть значение общей переменной, как было до и во время
* first * вызов самой внешней подпрограммы, что, вероятно, не то, что вам нужно.

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

Переменная "% s" не останется общей
(W) Внутренний (вложенный) названный подпрограмма обращается к лексической переменной, определенной в
внешняя подпрограмма.

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

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

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

Предупреждение: что-то не так
(W) Вы прошли предупреждать() пустая строка (эквивалент "предупреждать" "") или вы ее назвали
без аргументов и $ _ был пуст.

Неправильно сформированное логическое имя |% s | в prime_env_iter
(W) Предупреждение, характерное для VMS. При подготовке к
перебирать% ENV, что нарушает синтаксические правила, управляющие логическими именами. С
он не может быть переведен нормально, он пропускается и не отображается в% ENV. Этот
может быть безобидным явлением, поскольку некоторые программные пакеты могут напрямую изменять логические
именовать таблицы и вводить нестандартные имена, или это может указывать на то, что логическое имя
таблица была повреждена.

Получил ошибку от DosAllocMem
(P) Ошибка, характерная для OS / 2. Скорее всего, вы используете устаревшую версию
Perl, а этого в любом случае не должно происходить.

Неправильный формат PERLLIB_PREFIX
(F) Ошибка, характерная для OS / 2. PERLLIB_PREFIX должен иметь вид

префикс1; префикс2

or

префикс1 префикс2

с непустыми prefix1 и prefix2. Если "prefix1" действительно является префиксом встроенного
путь поиска библиотеки, подставляется префикс2. Ошибка может появиться, если компоненты
не найдены или слишком длинные. См. «PERLLIB_PREFIX» в README.os2.

PERL_SH_DIR слишком длинный
(F) Ошибка, характерная для OS / 2. PERL_SH_DIR - это каталог, в котором находится оболочка "sh".
См. «PERL_SH_DIR» в README.os2.

Процесс завершен SIG% s
(W) Это стандартное сообщение, выдаваемое приложениями OS / 2, в то время как приложения * nix
умереть в тишине. Это считается особенностью порта OS / 2. Легко отключить
это соответствующими обработчиками сигнатур, см. "Сигналы" в perlipc. См. Также «Процесс
прекращено SIGTERM / SIGINT "в README.os2.

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


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

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

  • 1
    авторизация
    авторизация
    AuthPass - это пароль с открытым исходным кодом
    менеджер с поддержкой популярных и
    проверенный Keepass (kdbx 3.x И kdbx 4.x ...
    Скачать авторизацию
  • 2
    Zabbix
    Zabbix
    Zabbix — это открытый корпоративный класс.
    исходное распределенное решение для мониторинга
    предназначен для наблюдения и отслеживания
    производительность и доступность сети
    серверы, устройства...
    Скачать Zabbix
  • 3
    KDiff3
    KDiff3
    Этот репозиторий больше не поддерживается
    и хранится в архивных целях. Видеть
    https://invent.kde.org/sdk/kdiff3 for
    новейший код и
    https://download.kde.o...
    Скачать KDiff3
  • 4
    USBLoaderGX
    USBLoaderGX
    USBLoaderGX — это графический интерфейс для
    USB-загрузчик Ванинкоко, основанный на
    libwiigui. Он позволяет перечислять и
    запуск игр Wii, игр Gamecube и
    доморощенный на Wii и WiiU...
    Скачать USBLoaderGX
  • 5
    Жар-птица
    Жар-птица
    СУБД Firebird предлагает функции ANSI SQL
    & работает на Linux, Windows и
    несколько Unix-платформ. Функции
    отличный параллелизм и производительность
    & сила...
    Скачать Firebird
  • 6
    KompoZer
    KompoZer
    KompoZer — это wysiwyg HTML-редактор, использующий
    кодовая база Mozilla Composer. В виде
    Разработка Нву остановлена
    в 2005 году KompoZer исправляет множество ошибок и
    добавляет ф...
    Скачать Композер
  • Больше »

Команды Linux

Ad