Spec-Zone.ru › Perl 5.38

perldiag

СОДЕРЖАНИЕ

  • ИМЯ
  • ОПИСАНИЕ
  • СМОТРИТЕ ТАКЖЕ

ИМЯ

perldiag - различные диагностические сообщения Perl

ОПИСАНИЕ

Эти сообщения классифицируются следующим образом (в порядке возрастания отчаяния):

(W) A warning (optional).
(D) A deprecation (enabled by default).
(S) A severe warning (enabled by default).
(F) A fatal error (trappable).
(P) An internal error you should never see (trappable).
(X) A very fatal error (nontrappable).
(A) An alien error message (not generated by Perl).

Большинство сообщений из первых трех вышеуказанных категорий (W, D & S) можно контролировать, используя warnings псевдоним.

Если сообщение можно контролировать с помощью warnings псевдонима, его категория предупреждений включается в классификацию с буквой в описании ниже. Например, (W closed) означает предупреждение в категории %%%CODE_BLOCK_5%%.

Необязательные предупреждения включаются, используя warnings псевдоним или переключатели -w и -W. Предупреждения могут быть перехвачены, установив $SIG{__WARN__} в ссылку на подпрограмму, которая будет вызвана при каждом предупреждении вместо его печати. См. perlvar.

Серьезные предупреждения всегда включены, если они не отключены явно с помощью warnings псевдонима или переключателя -X.

Перехватываемые ошибки могут быть перехвачены с помощью оператора eval. См. "eval" в perlfunc. Практически во всех случаях предупреждения могут быть выборочно отключены или повышены до фатальных ошибок с помощью warnings псевдонима. См. warnings.

Сообщения упорядочены по алфавиту, без учёта регистра. Некоторые из этих сообщений являются общими. Места, которые различаются, обозначаются с помощью %s или других escape-последовательностей в стиле printf. Эти escape-последовательности игнорируются при сортировке по алфавиту, как и все символы, кроме букв. Чтобы найти ваше сообщение, просто игнорируйте все, что не является буквой.

accept() на закрытом сокете %s

(W закрыт) Вы пытались выполнить accept() на закрытом сокете. Не забыли ли проверить возвращаемое значение вызова socket()? См. "accept" в perlfunc.

ADJUST — экспериментальная функция

(S experimental::class) Это предупреждение выводится, если вы используете ключевое слово ADJUST в use feature 'class'. Это ключевое слово в настоящее время экспериментальное, и его поведение может измениться в будущих релизах Perl.

Алиасинг через ссылку — экспериментальная функция

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

no warnings "experimental::refaliasing";
use feature "refaliasing";
\$x = \$y;
'%c' разрешено только после типов %s в %s

(F) Модификаторы '!', '<' и '>' разрешены в pack() или unpack() только после определённых типов. См. "pack" в perlfunc.

alpha->numify() приводит к потере информации

(W числовой) Значение типа alpha нельзя преобразовать в числовой тип без потери информации.

Неоднозначный вызов интерпретирован как CORE::%s(), укажите имя или используйте &

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

Чтобы принудительно интерпретировать это как вызов подпрограммы, поставьте амперсанд перед именем подпрограммы или укажите имя с указанием пакета. В качестве альтернативы вы можете импортировать подпрограмму (или предположить, что она импортирована с помощью use subs пragma).

Чтобы молча интерпретировать это как оператор Perl, используйте префикс CORE:: для оператора (например, CORE::log($x)) или объявите подпрограмму как метод объекта (см. "Атрибуты подпрограммы" в perlsub или attributes).

Неоднозначный диапазон в операторе транслитерации

(F) Вы написали что-то вроде tr/a-z-0//, что не имеет никакого смысла. Чтобы включить символ - в транслитерацию, поместите его либо в начало, либо в конец. (В прошлом tr/a-z-0// было синонимом tr/a-y//, что, вероятно, не соответствовало вашим ожиданиям.)

Неоднозначное использование %s интерпретировано как %s

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

Неоднозначное использование -%s интерпретировано как -&%s()

(S неоднозначный) Вы написали что-то вроде -foo, что может быть строкой "-foo", или вызовом функции foo, с отрицанием. Если вы имели в виду строку, просто напишите "-foo". Если вы имели в виду вызов функции, напишите -foo().

Неоднозначное использование %c интерпретировано как оператор %c

(S неоднозначный) %, &, и * являются инфиксными операторами (остаток, побитовое И и умножение) и начальными специальными символами (обозначающими хэши, подпрограммы и типглобы), и вы написали что-то вроде *foo * foo, что может быть интерпретировано как одно из них. Мы предположили, что вы имели в виду инфиксный оператор, но, пожалуйста, сделайте это более ясным. В данном примере вы можете написать *foo * foo(), если действительно хотели умножить глобальную переменную на результат вызова функции.

Неоднозначное использование %c{%s} интерпретировано как %c%s

(W неоднозначный) Вы написали что-то вроде @{foo}, что может означать переменную @foo, или вызов функции с именем foo и обращение к ней как к ссылке на массив. Если вы хотели переменную, вы можете просто написать @foo. Если вы хотели вызвать функцию, напишите @{foo()}, или вы просто можете не использовать переменную и функцию с одинаковым именем, чтобы избежать проблем.

Неоднозначное использование %c{%s[...]} интерпретировано как %c%s[...]
Неоднозначное использование %c{%s{...}} интерпретировано как %c%s{...}

(W неоднозначный) Вы написали что-то вроде ${foo[2]} (где foo представляет ключевое слово Perl), что может означать обращение к элементу с номером 2 массива с именем @foo, в таком случае напишите $foo[2], или вы могли иметь в виду передачу анонимного массива в функцию с именем foo, а затем выполнить скалярное обращение к возвращаемому значению. Если вы имели в виду это, напишите ${foo([2])}.

В регулярных выражениях синтаксис ${foo[2]} иногда необходим для устранения неоднозначности между индексами массивов и классами символов. /$length[2345]/, например, будет интерпретироваться как $length за которым следует класс символов [2345]. Если вам нужен индекс массива, вы можете избежать предупреждения, изменив /${length[2345]}/ на неприглядное /${\$length[2345]}/, переименовав свой массив на что-то, что не совпадает с встроенным ключевым словом, или просто отключив предупреждения с помощью no warnings 'ambiguous';.

'|' и '<' не могут быть оба указаны в командной строке

(F) Ошибка, характерная для VMS. Perl выполняет перенаправление командной строки, обнаружил, что STDIN является конвейером, и вы также попытались перенаправить STDIN с помощью '<'. Только один поток STDIN для клиента, пожалуйста.

'|' и '>' не могут быть оба указаны в командной строке

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

open(OUT,">$ARGV[0]") or die "Can't write to $ARGV[0]: $!";
while (<STDIN>) {
    print;
    print OUT;
}
close OUT;
Применение %s к %s будет действовать на скаляр(%s)

(W разное) Операторы совпадения с образцом (//), подстановки (s///) и транслитерации (tr///) работают со скалярными значениями. Если вы примените один из них к массиву или хэшу, массив или хэш будет преобразован в скалярное значение (длина массива или информация о заполненности хэша), а затем будет выполнена операция над этим скалярным значением. Вероятно, вы этого не имели в виду. См. "grep" в perlfunc и "map" в perlfunc для альтернатив.

Аргумент слишком короткий для msgsnd

(F) msgsnd() требует строку длиной не менее sizeof(long).

Аргумент "%s" не является числовым%s

(W числовой) Указанная строка была передана в качестве аргумента оператору, который ожидал числовое значение вместо неё. Если вам повезёт, сообщение укажет, какой оператор был неудачлив.

Обратите внимание, что для Inf и NaN (бесконечность и не число) определение "числового" является несколько необычным: сами строки (например, "Inf") считаются числовыми, а всё, что за ними следует, - нечисловым.

Список аргументов не закрыт для слоя PerlIO "%s"

(W слой) При добавлении слоя с аргументами в систему Perl I/O вы забыли закрывающую скобку ) списка аргументов. (Слои занимаются преобразованием данных между внешними и внутренними представлениями.) Perl остановил анализ списка слоя на этом месте и не пытался добавить этот слой. Если ваша программа не запрашивала явно неудачную операцию, это может быть результатом значения переменной среды PERLIO.

Аргумент "%s" обработан как 0 в инкременте (++)

(W числовой) Указанная строка была передана в качестве аргумента оператору ++, который ожидает либо число, либо строку, соответствующую /^[a-zA-Z]*[0-9]*\z/. См. "Автоинкремент и автодекремент" в perlop для получения дополнительной информации.

Массив, переданный в stat, будет преобразован в скаляр%s

(W синтаксис) Вы вызвали stat() для массива, но массив будет преобразован в скаляр — количество элементов в массиве.

Параметр сигнатуры должен начинаться с '$', '@' или '%'

(F) Каждое объявление параметра сигнатуры подпрограммы должно начинаться с допустимого сигила, например:

sub foo ($a, $, $b = 1, @c) {}
Параметр с множественным значением не может иметь значение по умолчанию

(F) Только скалярные параметры сигнатуры подпрограммы могут иметь значение по умолчанию; например:

sub foo ($a = 1)        {} # legal
sub foo (@a = (1))      {} # invalid
sub foo (%a = (a => b)) {} # invalid
Ошибка проверки: %s

(X) В пакете malloc, поставляемом с Perl, произошла внутренняя ошибка.

Ошибка проверки %s: файл "%s", строка %d

(X) Произошла общая ошибка проверки. Файл должен быть проверен.

Присвоенное значение не является ссылкой

(F) Вы пытались присвоить что-то, что не является ссылкой, к ссылке-lvalue (например, \$x = $y). Если вы хотели сделать $x алиасом к $y, используйте \$x = \$y.

Присвоенное значение не является ссылкой типа %s

(F) Вы пытались присвоить ссылку конструктору ссылки, но ссылки были разных типов. Нельзя создать алиас скаляра на массив или массива на хэш; типы должны совпадать.

\$x = \@y;  # error
\@x = \%y;  # error
 $y = [];
\$x = $y;   # error; did you mean \$y?
Присвоение ненулевого значения $[(невозможно)

(F) Когда функция "array_base" отключена (например, в use v5.16;, начиная с Perl 5.30), специальная переменная $[, которая устарела, теперь имеет фиксированное значение ноль.

Присваивание как списку, так и скаляру

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

Предполагается, что это НЕ класс POSIX, так как %s в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(W regexp) У вас было что-то вроде этого:

[[:alnum]]
[[:digit:xyz]

Они выглядят так, как будто они должны были быть классами POSIX [:alnum:] или [:digit:]. Если это так, то они должны быть записаны:

[[:alnum:]]
[[:digit:]xyz]

Поскольку это не законные спецификации классов POSIX, но являются законными скобочными классами символов, Perl рассматривает их как последние. В первом примере он соответствует символам ":", "[", "a", "l", "m", "n", и "u".

Если это не были предназначены для классов POSIX, это сообщение об ошибке излишне, и его можно подавить, переупорядочив вещи, такие как

[[al:num]]

или

[[:munla]]
<> в операторе require должны быть кавычки

(F) Вы написали require <file> вместо того, чтобы написать require 'file'.

Попытка доступа к запрещенному ключу '%s' в ограниченном хэше

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

Попытка благословить в освобождённый пакет

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

Попытка благословить в класс

(F) Вы пытаетесь вызвать bless с именем пакета, которое является новым стилем class. Это не обязательно, так как экземпляры, созданные конструктором, уже находятся в правильном классе. Экземпляры не могут быть созданы другими способами, такими как bless.

Попытка благословить в ссылку

(F) Аргумент CLASSNAME к оператору bless() должен быть именем пакета, в который будет благословлён полученный объект. Вы вместо этого предоставили ссылку на что-то: возможно, вы написали

bless $self, $proto;

когда вы имели в виду

bless $self, ref($proto) || $proto;

Если вы действительно хотите благословить в строковое представление ссылки, предоставленной, вам нужно преобразовать её в строку, например, с помощью:

bless $self, "$proto";
Попытка очистить удалённый массив

(S отладка) Массив был присвоен, когда он освобождался. Освобождённые значения не должны быть видимы для кода Perl. Это также может произойти, если код XS вызывает av_clear из пользовательской магической обратной связи по массиву.

Попытка удалить запрещённый ключ '%s' из ограниченного хэша

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

Попытка удалить только для чтения ключ '%s' из ограниченного хэша

(F) Неуспешный код попытался удалить ключ, значение которого было объявлено только для чтения, из ограниченного хэша.

Попытка освободить SV, не относящийся к области памяти: 0x%x

(S внутреннее) Все объекты SV должны быть выделены из областей памяти, которые будут собраны сборщиком мусора при выходе. Обнаружен объект SV, не находящийся ни в одной из этих областей памяти.

Попытка освободить несуществующую общую строку '%s'%s

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

Попытка преждевременного освобождения временной переменной: SV 0x%x

(S отладка) Уничтожаемые значения должны быть освобождены процедурой free_tmps(). Это указывает на то, что что-то ещё освобождает SV до того, как процедура free_tmps() получит возможность сделать это, что означает, что процедура free_tmps() будет освобождать неиспользуемый скаляр при попытке освободить его.

Попытка освободить неиспользуемые указатели glob

(S внутреннее) Счётчики ссылок были испорчены в алиасах символов.

Попытка освободить неиспользуемый скаляр: SV 0x%x

(S внутреннее) Perl уменьшил счётчик ссылок скаляра, чтобы проверить, достиг ли он 0, и обнаружил, что он уже ранее достиг 0 и должен был быть освобождён, и, вероятно, был освобождён. Это может указывать на то, что SvREFCNT_dec() был вызван слишком много раз, или что SvREFCNT_inc() был вызван слишком мало раз, или что SV был уничтожен, когда этого не следовало делать, или что память повреждена.

Попытка упаковать указатель на временное значение

(W pack) Вы попытались передать временное значение (например, результат функции или вычисленное выражение) в шаблон "p" pack(). Это означает, что результат содержит указатель на местоположение, которое может стать недействительным в любое время, даже до конца текущего оператора. Используйте литералы или глобальные значения в качестве аргументов шаблону "p" pack(), чтобы избежать этого предупреждения.

Попытка перезагрузки %s прервана.

(F) Вы пытались загрузить файл с use или require, который уже один раз не удалось скомпилировать. Perl не будет пытаться скомпилировать этот файл снова, пока вы не удалите его запись из %INC. См. "require" в perlfunc и "%INC" в perlvar.

Попытка установить длину освобождённого массива

(W misc) Вы попытались установить длину массива, который был освобождён. Вы можете сделать это, сохранив ссылку на скаляр, представляющий последний индекс массива, и впоследствии присвоив значение через эту ссылку. Например

$r = do {my @a; \$#a};
$$r = 503
Попытка использовать ссылку как lvalue в substr

(W substr) Вы предоставили ссылку в качестве первого аргумента к substr() в качестве lvalue, что довольно странно. Возможно, вы забыли предварительно разыменовать её. См. "substr" в perlfunc.

Атрибут прототипа (%s) игнорирует более ранние атрибуты прототипа в том же подпрограмме

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

av_reify вызван на связанном массиве

(S отладка) Это указывает на то, что что-то пошло не так, и Perl сильно запутался относительно того, @_ или @DB::args были связаны.

Неправильная длина аргумента для %s, она %u, должна быть %d

(F) Вы передали буфер неправильного размера одной из функций msgctl(), semctl() или shmctl(). В терминологии C соответствующие размеры, соответственно, sizeof(struct msqid_ds *), sizeof(struct semid_ds *) и sizeof(struct shmid_ds *).

Неправильный шаблона подстановки с оценкой

(F) Вы использовали переключатель /e, чтобы оценить замену для подстановки, но perl обнаружил синтаксическую ошибку в коде для оценки, скорее всего, ожидаемую правую фигурную скобку '}'.

Неправительное имя файла: %s

(F) Символ был передан чему-то, ожидающему имя файла, но у символа нет имени файла, связанного с ним. Возможно, вы не выполнили open() или выполнили его в другом пакете.

Неправильное free() проигнорировано

(S malloc) Внутренняя функция вызвала free() на чём-то, что никогда не было malloc()ed в первую очередь. Обязательно, но может быть отключено путём установки переменной окружения PERL_BADFREE в 0.

Это сообщение может часто наблюдаться с DB_File на системах с «жёсткой» динамической компоновкой, такой как AIX и OS/2. Это ошибка Berkeley DB, которая остаётся незамеченной, если DB использует более прощающую систему malloc().

Неправильный результат плагина infix (%zd) — не был прочитан весь идентификатор <%s>

(F) Плагин, использующий механизм PL_infix_plugin для анализа ключевого слова infix, прочитал часть имени оператора имени идентификатора, но не прочитал его полностью. Это запрещено, так как приводит к хрупким результатам разбора.

Неправильно размещённые ()

(A) Вы случайно запустили свой скрипт через csh вместо Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl.

Неправильное имя после %s

(F) Вы начали называть символ, используя префикс пакета, но не закончили символ. В частности, вы не можете интерполировать вне кавычек, поэтому

$var = 'myvar';
$sym = mypack::$var;

не то же самое, что

$var = 'myvar';
$sym = "mypack::$var";
Неправильный плагин, влияющий на ключевое слово '%s'

(F) Расширение, использующее механизм плагинов ключевых слов, нарушило API плагина.

Неправильное realloc() проигнорировано

(S malloc) Внутренняя функция вызвала realloc() на чём-то, что никогда не было malloc()ed в первую очередь. Обязательно, но может быть отключено путём установки переменной окружения PERL_BADFREE в 1.

Неправильный символ для %s

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

Неправильный символ для скаляра

(P) Внутренний запрос попросил добавить запись скаляра к чему-то, что не было записью таблицы символов.

Найден голый символ в условном выражении

(W bareword) Компилятор обнаружил голый символ там, где ожидалось условное выражение, что часто указывает на то, что || или && были обработаны как часть последнего аргумента предыдущей конструкции, например:

open FOO || die;

Это также может указывать на неправильно написанный констант, который был интерпретирован как голый символ:

use constant TYPO => 1;
if (TYOP) { print "foo" }

Предикат strict полезен для предотвращения таких ошибок.

Голый символ в require содержит "%s"
Голый символ в require отображается на запрещённое имя файла "%s"
Голый символ в require отображается на пустое имя файла

(F) Голая форма require была вызвана с именем файла, который не мог быть сгенерирован с помощью допустимого голого символа, разрешённого анализатором. Вы не должны получать эту ошибку из кода Perl, но код XS может выбросить её, если он передаст недопустимое имя модуля в Perl_load_module.

Голый символ в require не должен начинаться с двух двоеточий: "%s"

(F) В require Bare::Word, голый символ не должен начинаться с двух двоеточий. Запишите require ::Foo::Bar как require Foo::Bar вместо этого.

Не разрешено использование «голого слова» "%s", когда включён режим "строгие подстановки"

(F) При включённом режиме "строгие подстановки" голое слово разрешено только в качестве идентификатора подпрограммы в фигурных скобках или слева от символа ">=". Возможно, требуется предварительное объявление подпрограммы?

«Голое слово» "%s" ссылается на несуществующий пакет

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

Не разрешено использование «голого слова» для дескриптора файла "%s" при отключённой функции «bareword_filehandles»

(F) Вы попытались использовать голое слово для дескриптора файла при отключённой функции bareword_filehandles.

Только встроенные дескрипторы файлов STDIN, STDOUT, STDERR, ARGV, ARGVOUT и DATA могут быть использованы при отключённой функции bareword_filehandles.

Ошибка в блоке BEGIN – компиляция прервана

(F) Во время выполнения подпрограммы BEGIN было поднято неуловленное исключение. Компиляция останавливается немедленно, и интерпретатор завершается.

BEGIN небезопасен после ошибок – компиляция прервана

(F) Perl обнаружил подпрограмму BEGIN {} (или директиву use, которая подразумевает BEGIN {}) после одной или нескольких ошибок компиляции. Поскольку предполагаемая среда для BEGIN {} не могла быть гарантирована (из-за ошибок), и поскольку последующий код, вероятно, зависит от её корректной работы, Perl просто отказался от дальнейшей обработки.

\%d лучше записать как $%d

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

Двоичное число > 0b11111111111111111111111111111111 – не переносимый код

(W portable) Указанное двоичное число больше, чем 2**32-1 (4294967295), поэтому оно не переносимо между системами. См. perlport для получения дополнительной информации о проблемах переносимости.

bind() на закрытом сокете %s

(W closed) Вы попытались выполнить bind на закрытом сокете. Вы забыли проверить возвращаемое значение вызова socket()? См. "bind" в perlfunc.

binmode() для закрытого дескриптора файла %s

(W unopened) Вы попытались применить binmode() к дескриптору файла, который никогда не открывался. Проверьте свой поток управления и количество аргументов.

Размер битового вектора > 32 – не переносимый код

(W portable) Использование размеров битовых векторов больше 32 не является переносимым.

Странная копия %s

(P) Perl обнаружил попытку скопировать внутреннее значение, которое не может быть скопировано.

Странный SvTYPE [%d]

(P) При запуске новой нити или возврате значений из нити Perl столкнулся с некорректным типом данных.

Обе или ни одна конечные точки диапазона должны быть Unicode в регулярном выражении; отмечено <-- HERE в m/%s/

(W regexp) (только при use re 'strict' или внутри (?[...]))

В скобочном классе символов в шаблоне регулярного выражения у вас был диапазон, в котором точно одна из конечных точек была указана с помощью \N{}, а другая — с помощью непереносимого механизма. Perl обрабатывает диапазон как диапазон Unicode, то есть все символы в нём рассматриваются как символы Unicode, и это могут быть разные коды символов на разных платформах, на которых работает Perl. Например, [\N{U+06}-\x08] обрабатывается так, как будто вы вместо этого сказали [\N{U+06}-\N{U+08}], то есть оно сопоставляет символы, чьи коды символов в Unicode равны 6, 7 и 8. Но это \x08 может указывать на что-то другое, поэтому выводится предупреждение.

Переполнение буфера в prime_env_iter: %s

(W internal) Предупреждение, специфичное для VMS. Во время подготовки Perl для итерации по %ENV он столкнулся с логическим именем или определением символа, которое было слишком длинным, поэтому оно было усечено до показанного строкового значения.

Встроенная функция '%s' находится в экспериментальной стадии

(S experimental::builtin) Вызов функции в пространстве имён builtin::, которое в настоящее время находится на экспериментальной стадии. Существование или характер функции может измениться в будущей версии Perl.

builtin::import может вызываться только во время компиляции

(F) Метод import пакета builtin был вызван, когда код в данный момент не компилируется. Поскольку этот метод используется для введения новых лексических подпрограмм в область, которая в данный момент компилируется, это не повлияет на выполнение.

Вызванный обработчик вызова завершился

(F) Подпрограмма, вызванная из внешнего пакета через call_sv(), завершилась вызовом exit.

%s() вызван слишком рано для проверки прототипа

(W prototype) Вы вызвали функцию, имеющую прототип, прежде чем анализатор увидел определение или объявление для неё, и Perl не смог проверить, соответствует ли вызов прототипу. Вам нужно либо добавить раннее объявление прототипа для подпрограммы, о которой идёт речь, или перенести определение подпрограммы вперёд вызова, чтобы обеспечить правильную проверку прототипа. В качестве альтернативы, если вы уверены, что вызываете функцию правильно, вы можете поставить амперсанд перед именем, чтобы избежать предупреждения. См. perlsub.

Нельзя присвоить :param(%s) полю %s, так как это имя уже используется

(F) Была предпринята попытка присвоить имя параметра полю, когда это имя уже используется другим полем в том же классе или одном из его родительских классов. Это вызовет конфликт имён, поэтому это не разрешается.

Невозможно chr %f

(F) Вы передали недопустимое число (например, бесконечность или не число) в chr.

Невозможно завершить редактирование %s на месте: %s

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

Невозможно сжать %f в pack

(F) Вы попытались сжать бесконечность или не число как целое без знака с помощью BER, что не имеет смысла.

Невозможно сжать целое число в pack

(F) Аргумент pack("w",...) был слишком большим для сжатия. Формат сжатого целого числа BER может использоваться только с положительными целыми числами, и вы попытались сжать очень большое число (> 1e308). См. "pack" в perlfunc.

Невозможно сжать отрицательные числа в pack

(F) Аргумент pack("w",...) был отрицательным. Формат сжатого целого числа BER может использоваться только с положительными целыми числами. См. "pack" в perlfunc.

Невозможно преобразовать ссылку на %s в тип глобальной переменной

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

Невозможно скопировать в %s

(P) Perl обнаружил попытку копирования значения в внутренний тип, который нельзя непосредственно присвоить.

Невозможно создать класс %s, так как у него уже есть непустой массив @ISA

(F) Была предпринята попытка создать класс из пакета, у которого уже есть массив @ISA, и этот массив не пустой. Это не разрешено, так как это приведёт к классу с несогласованным наследованием.

Кодировка "%s" не найдена

(S io) Вы попытались применить несуществующую кодировку к дескриптору файла, либо с open(), либо с binmode().

Невозможно вызвать метод "%s" на экземпляре "%s"

(F) Вы попытались напрямую вызвать подпрограмму method одного класса, передав значение, являющееся экземпляром другого класса. Это не разрешается, так как метод не будет иметь доступа к правильным полям экземпляра.

Невозможно вызвать метод на неэкземпляре

(F) Вы попытались напрямую вызвать подпрограмму method класса, передав значение, не являющееся экземпляром этого класса. Это не разрешается, так как метод не будет иметь доступа к полям экземпляра.

Невозможно открыть %s как дескриптор каталога: он уже открыт как дескриптор файла

(F) Вы попытались использовать opendir() для связывания дескриптора каталога с символом (глобальной или скалярной переменной), который уже содержит дескриптор файла. Поскольку этот приём может сделать ваш код запутанным, он был устаревшим в Perl 5.10. Начиная с Perl 5.28, это является фатальной ошибкой.

Невозможно открыть %s как дескриптор файла: он уже открыт как дескриптор каталога

(F) Вы попытались использовать open() для связывания дескриптора файла с символом (глобальной или скалярной переменной), который уже содержит дескриптор каталога. Поскольку этот приём может сделать ваш код запутанным, он был устаревшим в Perl 5.10. Начиная с Perl 5.28, это является фатальной ошибкой.

Невозможно выполнить '%s' вне определения класса

(F) Вы попытались использовать одно из ключевых слов, имеющее смысл только внутри определения class, в месте, которое не находится внутри такого класса.

Невозможно упаковать %f с помощью '%c'

(F) Вы пытались преобразовать бесконечность или не число в целое число, что бессмысленно.

Невозможно вывести %f с помощью '%c'

(F) Вы попытались вывести бесконечность или не число как символ (%c), что бессмысленно. Возможно, вы имели в виду '%s', или просто строковое представление?

Невозможно повторно открыть существующий класс "%s"

(F) Вы попытались начать определение class для класса, который уже существует. Класс может иметь только один блок определения.

Невозможно связать @DB::args

(F) caller пытался установить @DB::args, но обнаружил привязку. Привязка @DB::args не поддерживается. (До добавления этой ошибки происходил сбой.)

Невозможно привязать неприводимый массив

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

Ещё нельзя переупорядочить аргументы sv_vcatpvfn() из va_list

(F) Некоторые фрагменты XS-кода пытались использовать sv_vcatpvfn() или связанную функцию со строкой формата, указывающей явные индексы для некоторых элементов, и с использованием списка аргументов C (a va_list). Это в настоящее время не поддерживается. Авторам XS, желающим это сделать, необходимо вместо этого создать массив C из SV* скаляров, содержащих аргументы.

Можно сжать только целые без знака в pack

(F) Аргумент pack("w",...) не был целым числом. Формат сжатия целых чисел BER может использоваться только с положительными целыми числами, и вы пытались сжать что-то другое. См. "pack" в perlfunc.

Нельзя "%s" за пределами блока "defer"

(F) Была предпринята попытка выхода за пределы области действия блока defer с помощью оператора управления потоком, такого как return, goto или оператора управления циклом. Это запрещено.

Нельзя "%s" за пределами блока "finally"

(F) Аналогично вышесказанному, но с участием блока finally в конце конструкции try/catch вместо блока defer.

Нельзя добавить объект к ссылке

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

Нельзя добавить нессылочное значение к объекту

(F) Благословляться могут только жёсткие ссылки. Таким образом Perl "обеспечивает" инкапсуляцию объектов. См. perlobj.

Нельзя использовать "break" в цикле topicalizer

(F) Вы вызвали break, но находитесь в блоке foreach вместо блока given. Вероятно, вы хотели использовать next или last.

Нельзя использовать "break" вне заданного блока

(F) Вы вызвали break, но не находитесь внутри блока given.

Нельзя вызвать деструктор для 0x%p при глобальном уничтожении

(S) Этого не должно происходить. Внутренний код создал деструктор с помощью mortal_destructor_sv или mortal_destructor_x, который запускается при глобальном уничтожении. Пожалуйста, попытайтесь уменьшить код, вызывающий это предупреждение, до минимального примера, а затем сообщите об ошибке на https://github.com/Perl/perl5/issues/new/choose

Нельзя вызвать метод "%s" для неопределённого значения

(F) Вы использовали синтаксис вызова метода, но ячейка, заполненная ссылкой на объект или именем пакета, содержит неопределённое значение. Что-то подобное воспроизведёт ошибку:

$BADREF = undef;
process $BADREF 1,2,3;
$BADREF->process(1,2,3);
Нельзя вызвать метод "%s" для неблагословлённой ссылки

(F) Метод должен знать, в каком пакете ему предписано выполняться. Обычно он узнаёт это из ссылки на объект, который вы предоставили, но в данном случае вы не предоставили ссылку на объект. Ссылка не является ссылкой на объект, пока она не была благословлена. См. perlobj.

Нельзя вызвать метод "%s" без ссылки на пакет или объект

(F) Вы использовали синтаксис вызова метода, но ячейка, заполненная ссылкой на объект или именем пакета, содержит выражение, возвращающее определённое значение, которое не является ссылкой на объект и не является именем пакета. Что-то подобное воспроизведёт ошибку:

$BADREF = 42;
process $BADREF 1,2,3;
$BADREF->process(1,2,3);
Нельзя вызвать mro_isa_changed_in() для анонимной таблицы символов

(P) Perl запутался, был ли хеш обычным хешем или хешем таблицы символов при попытке обновления кэшей @ISA.

Нельзя вызвать mro_method_changed_in() для анонимной таблицы символов

(F) Модуль XS пытался вызвать mro_method_changed_in на хеше, который не был привязан к таблице символов.

Невозможно перейти в %s

(F) Вы вызвали perl -x/foo/bar, но /foo/bar не является каталогом, в который можно перейти, возможно, потому что он не существует.

Невозможно привести %s к типу %s в %s

(F) Определённые типы SVs, в частности, реальные записи таблицы символов (typeglobs), не могут быть заменены. Поэтому нельзя делать такие вещи, как:

*foo += 1;

Можно сделать так

$foo = *foo;
$foo += 1;

но тогда $foo больше не содержит glob.

Нельзя использовать "continue" вне блока when

(F) Вы вызвали continue, но не находитесь внутри блока when или default.

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

(F) В Cygwin вы вызвали функцию преобразования пути с пустым путём. Только ненулевые пути являются допустимыми.

Невозможно создать почтовый ящик канала

(P) Ошибка, характерная для VMS. У процесса закончились квоты или возникли другие проблемы с подключением.

Нельзя объявить %s в "%s"

(F) В качестве переменных "my", "our" или "state" могут быть объявлены только скаляры, массивы и хеши. У них должны быть обычные идентификаторы в качестве имён.

Нельзя использовать "default" вне topicalizer

(F) Вы использовали блок default, который находится не внутри цикла foreach ни внутри блока given. (Обратите внимание, что эта ошибка выдаётся при выходе из блока default, поэтому вы не получите ошибку, если используете явное continue)

Невозможно определить класс оператора %s, предполагая BASEOP

(S) Это предупреждение указывает на проблему во внутренних механизмах Perl. Perl пытался найти класс (например, LISTOP) конкретного OP, но не смог. Вероятно, это связано с ошибкой в внутренних механизмах Perl или с ошибкой в XS-коде, который манипулирует деревьями операторов Perl.

Нельзя выполнить редактирование на месте: %s не является обычным файлом

(S inplace) Вы попытались использовать переключатель -i со специальным файлом, например, файлом в /dev, FIFO или недоступным каталогом. Файл был проигнорирован.

Нельзя выполнить редактирование на месте файла %s: %s

(S inplace) Создание нового файла завершилось ошибкой по указанной причине.

Нельзя выполнить редактирование на месте: %s не будет уникальным

(S inplace) Ваша файловая система не поддерживает имена файлов длиннее 14 символов, и Perl не смог создать уникальное имя файла во время редактирования на месте с помощью переключателя -i. Файл был проигнорирован.

Нельзя выполнить %s("%s") в локали, отличной от UTF-8; преобразовано к "%s".

(W locale) Вы 1) работаете в "use locale"; 2) текущая локаль не является UTF-8; 3) вы пытались выполнить операцию изменения регистра указанного символа Юникода; и 4) результат этой операции смешал бы правила Юникода и локальной системы, которые, вероятно, конфликтуют. Смешивание различных типов правил запрещено, поэтому операция не была выполнена; вместо этого результатом является указанное значение, являющееся лучшим доступным результатом, использующим исключительно правила Юникода. Это, практически всегда, исходный символ без изменений.

В целом, не рекомендуется смешивать локали, отличные от UTF-8, и Юникод, и эта проблема является одной из причин. Это предупреждение возникает, когда правила Юникода обычно приводят к тому, что результат этой операции будет содержать символ, находящийся в диапазоне, указанном в локали, 0..255, и, следовательно, подчиняется правилам локали, а не Юникода.

Если вы используете локаль только для её характеристик, относящихся к форматированию чисел и времени (и не LC_CTYPE), рассмотрите использование ограниченной формы директивы pragma locale (см. "The "use locale" pragma" в perllocale), например, "use locale ':not_characters'".

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

Невозможно выполнить waitpid с флагами

(F) На этой машине нет ни waitpid(), ни wait4(), поэтому эмулируется только waitpid() без флагов.

Невозможно эмулировать -%s в строке #!

(F) Строка #! указывает переключатель, который в данном контексте не имеет смысла. Например, ставить -x в строке #! было бы довольно глупо.

Невозможно %s %s-эндиан %ss на этой платформе

(F) Порядок байтов вашей платформы ни big-endian, ни little-endian, или у неё очень странный размер указателя. Возможно, упаковку и распаковку big- или little-endian значений с плавающей точкой и указателей невозможно выполнить. См. "pack" в perlfunc.

Невозможно выполнить exec "%s": %s

(W exec) Система(), exec() или вызов open для канала не смогли выполнить указанную программу по указанной причине. Типичные причины: неправильные права доступа к файлу, файл не найден в $ENV{PATH}, исполняемый файл скомпилирован для другой архитектуры, или строка #! в скрипте указывает на интерпретатор, который не может быть запущен по похожим причинам. (Возможно, ваша система вообще не поддерживает #!).

Невозможно выполнить exec %s

(F) Perl пытался выполнить указанную программу за вас, потому что так указано в строке #!. Если это не то, что вы хотели, вам может потребоваться указать "perl" в строке #! где-то.

Невозможно выполнить %s

(F) Вы использовали переключатель -S, но копии скрипта для выполнения, найденные в PATH, не имели правильных прав доступа.

Невозможно найти номер оператора для "%s"

(F) Строка вида CORE::word была передана в prototype(), но встроенной функции с именем word нет.

Невозможно найти метку %s

(F) Вы указали переход к метке, которая не упоминается нигде как доступная. См. "goto" в perlfunc.

Невозможно найти %s в PATH

(F) Вы использовали переключатель -S, но скрипт для выполнения не был найден в PATH.

Невозможно найти %s в PATH, '.' не в PATH

(F) Вы использовали переключатель -S, но скрипт для выполнения не был найден в PATH, или, по крайней мере, не с правильными правами. Скрипт существует в текущей директории, но PATH запрещает его выполнение.

Невозможно найти разделитель строки %s нигде до EOF

(F) Строки Perl могут занимать несколько строк. Это сообщение означает, что закрывающий разделитель опущен. Так как скобочные кавычки учитывают уровни вложенности, следующая строка пропущена:

print q(The character '(' starts a side comment.);

Если вы получаете эту ошибку из документа-строки, возможно, вы включили незаметные пробелы перед или после закрывающего тега, или там нет переноса строки после него. Хороший редактор кода поможет вам найти эти символы (или их отсутствие). Подробности о документах-строках см. в perlop.

Невозможно найти определение свойства Юникода "%s"
Невозможно найти определение свойства Юникода "%s" в регулярном выражении; помечено <-- HERE в m/%s/

(F) Указанное вами именованное свойство не известно Perl. Возможно, вы ошиблись в названии? Полный список доступных официальных свойств см. в "Свойства, доступные через \p{} и \P{}" в perluniprops. Если это пользовательское свойство, оно должно быть определено к моменту проверки регулярного выражения.

Если вы не имели в виду свойство Юникода, экранируйте \p, либо \\p (только \p), либо \Q\p (остальная часть строки, или до \E).

Невозможно выполнить fork: %s

(F) Во время попытки выполнить fork при открытии конвейера произошла критическая ошибка.

Невозможно выполнить fork, повторная попытка через 5 секунд

(W pipe) Fork в конвейере открылся с ошибкой EAGAIN и будет повторён через пять секунд.

Невозможно получить filespec - устаревший буфер stat?

(S) Предупреждение, характерное для VMS. Оно возникает из-за различий в проверке доступа в VMS и в модели Unix, которую предполагает Perl. В VMS проверки доступа выполняются по имени файла, а не по битам в буфере stat, чтобы учитывать ACL и другие защиты. К сожалению, Perl предполагает, что буфер stat содержит всю необходимую информацию и передает его, а не filespec, в процедуру проверки доступа. Он попытается извлечь filespec, используя имя устройства и FID, присутствующие в буфере stat, но это работает только если вы не вызывали последующую функцию CRTL stat(), потому что имя устройства перезаписывается при каждом вызове. Если появляется это предупреждение, поиск имени не удался, и процедура проверки доступа отказалась и вернула FALSE, для сохранения консервативности. (Примечание: процедура проверки доступа знает об операторе Perl stat и файловых тестах, поэтому вы никогда не должны видеть это предупреждение в ответ на команду Perl; оно возникает только если какой-либо внутренний код относится к буферам stat без должного внимания.)

Невозможно получить имя устройства почтового ящика конвейера

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

Невозможно получить значение параметра SYSGEN для MAXBUF

(P) Ошибка, характерная для VMS. Perl запросил у $GETSYI желаемый размер буферов почтового ящика и не получил ответа.

Невозможно выполнить "goto" в бинарное или списковое выражение

(F) Был выполнен оператор "goto" для перехода в середину бинарного или спискового выражения. Оттуда нельзя попасть сюда. Причина этого ограничения состоит в том, что интерпретатор запутается, сколько аргументов существует, что может привести к повреждению стека или сбою.

Эта ошибка возникает в следующих случаях:

goto F;
print do { F: }; # Can't jump into the arguments to print

goto G;
$x + do { G: $y }; # How is + supposed to get its first operand?
Невозможно выполнить "goto" в блок "defer"

(F) Был выполнен оператор goto, чтобы перейти в область действия блока defer. Это запрещено.

Невозможно выполнить "goto" в блок "given"

(F) Был выполнен оператор "goto" для перехода в середину блока given. Оттуда нельзя попасть сюда. См. "goto" в perlfunc.

Невозможно выполнить "goto" в середину цикла foreach

(F) Был выполнен оператор "goto" для перехода в середину цикла foreach. Оттуда нельзя попасть сюда. См. "goto" в perlfunc.

Невозможно выполнить "goto" за пределы псевдоблока

(F) Был выполнен оператор "goto" для перехода за пределы того, что может выглядеть как блок, но не является таковым. Это обычно происходит, если вы пытаетесь перейти за пределы блока sort() или подпрограммы, что недопустимо. См. "goto" в perlfunc.

Невозможно выполнить goto подпрограммы из eval-%s

(F) Вызов "goto подпрограмма" не может быть использован для перехода за пределы eval "строка" или блока.

Невозможно выполнить goto подпрограммы из подпрограммы сортировки (или аналогичного обратного вызова)

(F) Вызов "goto подпрограмма" не может быть использован для перехода за пределы подпрограммы сравнения для sort() или аналогичного обратного вызова (например, функции reduce() в List::Util).

Невозможно выполнить goto подпрограммы вне подпрограммы

(F) Глубоко магический вызов "goto подпрограмма" может только заменить один вызов подпрограммы другим. Он не может создать его из ничего. В общем случае, вы должны вызывать его только из подпрограммы AUTOLOAD. См. "goto" в perlfunc.

Невозможно игнорировать сигнал CHLD, принудительно установлено значение по умолчанию

(W signal) Perl обнаружил, что он запускается с сигналом SIGCHLD (иногда известным как SIGCLD) отключенным. Поскольку отключение этого сигнала повлияет на правильное определение статуса завершения дочерних процессов, Perl сбросил сигнал на значение по умолчанию. Эта ситуация обычно указывает на то, что родительская программа, в которой может выполняться Perl (например, cron), проявляет халатность.

Невозможно убить процесс с нечисловым идентификатором

(F) Идентификаторы процессов должны быть целыми числами со знаком. Попытка убить() неопределённый, пустой строкой или иначе нечисловой идентификатор процесса — это фатальная ошибка.

Невозможно выполнить "last" вне блока цикла

(F) Оператор "last" был выполнен для выхода из текущего блока, но текущий блок отсутствует. Обратите внимание, что блок "if" или "else" не считается "циклическим" блоком, а также не учитываются блоки, переданные sort(), map() или grep(). Обычно можно добиться того же эффекта, удвоив фигурные скобки, так как внутренние фигурные скобки будут считаться блоком, который выполняется один раз. См. "last" в perlfunc.

Невозможно линеаризовать анонимную таблицу символов

(F) Perl пытался вычислить порядок разрешения методов (MRO) пакета, но потерпел неудачу, так как у хранилища пакета нет имени.

Невозможно загрузить '%s' для модуля %s

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

Невозможно локализовать лексическую переменную %s

(F) Вы использовали local для переменной, ранее объявленной как лексическая переменная с помощью "my" или "state". Это недопустимо. Если вы хотите локализовать переменную пакета с тем же именем, укажите имя пакета.

Невозможно локализовать через ссылку

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

Невозможно найти %s

(F) Вы сказали выполнить do (или require, или use файл, который не удалось найти. Perl ищет файл во всех местоположениях, указанных в @INC, если имя файла не включает полный путь к файлу. Возможно, вам нужно установить переменную среды PERL5LIB или PERL5OPT, чтобы указать, где находится дополнительная библиотека, или, возможно, скрипту нужно добавить имя библиотеки в @INC. Или, возможно, вы просто ошиблись в имени файла. См. "require" в perlfunc и lib.

Невозможно найти auto/%s.al в @INC

(F) Функция (или метод) была вызвана в пакете, который допускает autoload, но функция для autoload отсутствует. Вероятнее всего, ошибка в имени функции/метода или неудача в AutoSplit файла, например, выполнив make install.

Невозможно найти загружаемый объект для модуля %s в @INC

(F) Модуль, который вы загрузили, пытается загрузить внешнюю библиотеку, например, foo.so или bar.dll, но модуль DynaLoader не смог найти эту библиотеку. См. DynaLoader.

Невозможно найти метод объекта "%s" через пакет "%s"

(F) Вы правильно вызвали метод, и он правильно указал пакет, работающий как класс, но этот пакет не определяет данный метод, ни один из его базовых классов. См. perlobj.

Невозможно найти метод объекта "%s" через пакет "%s" (возможно, вы забыли загрузить "%s"?)

(F) Вы вызвали метод для класса, которого не существует, и метод не был найден в UNIVERSAL. Это часто означает, что для метода необходим пакет, который не загружен.

Не удаётся найти метод объекта "INC", "INCDIR" или перегрузку строк через пакет "%s" %s в @INC

(F) Вы передали объект, либо напрямую, либо через ссылку на массив, в @INC, но объект не поддерживает известные методы обработки, перегрузку строк, и не является освящённой (blessed) ссылкой на код. Короче, функция require не знает, что делать с объектом. См. также "require" в perlfunc.

Не удаётся найти пакет %s для @%s::ISA

(W синтаксис) Массив @ISA содержал имя другого пакета, который, похоже, не существует.

Не удаётся найти PerlIO%s

(F) Вы пытались использовать в open() слой PerlIO, которого не существует, например, open(FH, ">:nosuchlayer", "somefile").

Невозможно выполнить присваивание списка переменной %ENV на этой системе

(F) Присваивание списка переменной %ENV не поддерживается на некоторых системах, в частности, на VMS.

Невозможно сделать загруженные символы глобальными на этой платформе во время загрузки %s

(S) Модуль передал флаг 0x01 в DynaLoader::dl_load_file() для запроса, чтобы символы из указанного файла были доступны глобально в процессе, но эта функция недоступна на этой платформе. Хотя модуль, вероятно, по-прежнему будет работать, это может помешать интерпретатору Perl загружать другие расширения на основе XS, которые должны напрямую связываться с функциями, определёнными в C или XS-коде в указанном файле.

Невозможно изменить %s в %s

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

Невозможно изменить не-lvalue вызов подпрограммы &%s
Невозможно изменить не-lvalue вызов подпрограммы &%s в %s

(F) Подпрограммы, предназначенные для использования в контексте lvalue, должны быть объявлены как таковые. См. "Lvalue подпрограммы" в perlsub.

Невозможно изменить ссылку на %s в %s присваивании

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

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

(F) Присваивание \local(@array) или \(local @array) не поддерживается, так как неясно, что оно должно делать. Если вы хотели сделать @array ссылкой на другой массив, используйте \@array = \@other_array. Если вы хотите сделать элементы массива @array псевдонимами скаляров, на которые ссылаются справа, используйте \(@array) = @scalar_refs.

Невозможно изменить ссылку на скобочный хэш в списочном присваивании

(F) Присваивание \(%hash) не поддерживается. Если вы хотели сделать %hash ссылкой на другой хэш, используйте \%hash = \%other_hash. Если вы хотите сделать элементы %hash псевдонимами скаляров, на которые ссылаются справа, используйте срез хэша: \@hash{@keys} = @those_scalar_refs.

Невозможно msgrcv для переменной только для чтения

(F) Цель msgrcv должна быть изменяемой, чтобы использоваться в качестве буфера приёма.

Нельзя использовать "next" вне блока цикла

(F) Был выполнен оператор "next" для повторения текущего блока, но текущий блок отсутствует. Обратите внимание, что блок "if" или "else" не считается "циклическим" блоком, как и блок, переданный в sort(), map() или grep(). Обычно можно получить тот же эффект, удваивая фигурные скобки, так как внутренние фигурные скобки будут рассматриваться как блок, который выполняется один раз. См. "next" в perlfunc.

Не удаётся открыть %s: %s

(S встроенный) Неявное открытие файла с помощью файлового дескриптора <>, либо неявно под -n или -p командной строки, либо явно, завершилось неудачей по указанной причине. Обычно это происходит потому, что у вас нет права на чтение файла, который вы указали в командной строке.

(F) Вы попытались вызвать perl с переключателем -e, но /dev/null (или эквивалент вашей операционной системы) не удалось открыть.

Не удаётся открыть ссылку

(W io) Вы пытались открыть ссылку на скаляр для чтения или записи, используя синтаксис open() с тремя аргументами:

open FH, '>', $ref;

но ваша версия perl скомпилирована без perlio, и эта форма open() не поддерживается.

Не удаётся открыть двунаправленную трубу

(W pipe) Вы пытались сказать open(CMD, "|cmd|"), что не поддерживается. Вы можете попробовать один из нескольких модулей в библиотеке Perl, например, IPC::Open2. В качестве альтернативы, перенаправьте вывод трубы в файл с помощью ">", а затем прочитайте его в другом файловом дескрипторе.

Не удаётся открыть файл ошибок %s в качестве stderr

(F) Ошибка, характерная для VMS. Perl выполняет перенаправление командной строки самостоятельно и не смог открыть указанный файл после '2>' или '2>>' в командной строке для записи.

Невозможно открыть входной файл %s как stdin

(F) Ошибка, характерная для VMS. Perl выполняет перенаправление командной строки самостоятельно и не смог открыть указанный файл после '<' в командной строке для чтения.

Не удаётся открыть выходной файл %s как stdout

(F) Ошибка, характерная для VMS. Perl выполняет перенаправление командной строки самостоятельно и не смог открыть указанный файл после '>' или '>>' в командной строке для записи.

Не удаётся открыть выходную трубу (имя: %s)

(P) Ошибка, характерная для VMS. Perl выполняет перенаправление командной строки самостоятельно и не смог открыть трубу для отправки данных, предназначенных для stdout.

Не удаётся открыть скрипт Perl "%s": %s

(F) Указанный скрипт не может быть открыт по указанной причине.

Если вы отлаживаете скрипт, который использует #!, и обычно полагается на поиск $PATH оболочки, опция -S заставляет perl выполнить этот поиск, так что вам не придётся вводить путь или `which $scriptname`.

Не удаётся прочитать CRTL environ

(S) Предупреждение, характерное для VMS. Perl попытался прочитать элемент %ENV из внутреннего массива среды CRTL и обнаружил, что массив отсутствует. Вам необходимо выяснить, где CRTL потерял свою среду или определить PERL_ENV_TABLES (см. perlvms), чтобы среда не проверялась.

Невозможно повторно объявить "%s" в "%s"

(F) Внутри другого объявления был найден оператор "my", "our" или "state", например my ($x, my($y), $z) или our (my $x).

Нельзя использовать "redo" вне блока цикла

(F) Был выполнен оператор "redo" для перезапуска текущего блока, но текущий блок отсутствует. Обратите внимание, что блок "if" или "else" не считается "циклическим" блоком, как и блок, переданный в sort(), map() или grep(). Обычно можно получить тот же эффект, удваивая фигурные скобки, так как внутренние фигурные скобки будут рассматриваться как блок, который выполняется один раз. См. "redo" в perlfunc.

Не удаётся удалить %s: %s, пропускается файл

(S встроенный) Вы запросили встроенное редактирование без создания резервной копии. Perl не смог удалить исходный файл для замены его изменённым файлом. Файл остался неизменным.

Невозможно переименовать временный файл для локального редактирования '%s' в '%s': %s

(F) При неявном закрытии временного файла для редактирования не удалось переименовать его в исходное имя файла.

Не удаётся переименовать %s в %s: %s, пропускается файл

(F) Переименование, выполненное переключателем -i, завершилось неудачей по какой-то причине, вероятно, потому, что у вас нет права записи в каталог.

Не удаётся повторно открыть входную трубу (имя: %s) в двоичном режиме

(P) Ошибка, характерная для VMS. Perl считал, что stdin — это труба, и попытался повторно открыть её для приема двоичных данных. К сожалению, это не удалось.

Невозможно представить символ для Ox%X на этой платформе

(F) Существует жёсткое ограничение на размер кода символа из-за фундаментальных свойств UTF-8, особенно на платформах EBCDIC. Указанное значение кода символа превышает это ограничение. Единственное решение — не использовать такое большое значение кода символа.

Невозможно сбросить %ENV на этой системе

(F) Вы вызвали reset('E') или аналогичное, что пыталось сбросить все переменные в текущем пакете, начинающиеся с "E". В основном пакете это включает %ENV. Сброс %ENV не поддерживается на некоторых системах, в частности, на VMS.

Не удаётся разрешить метод "%s" перегрузки "%s" в пакете "%s"

(F)(P) Ошибка при разрешении перегрузки, указанной именем метода (в отличие от ссылки на подпрограмму): метод не доступен через пакет. Если имя метода — ???, это внутренняя ошибка.

Невозможно вернуть %s из lvalue подпрограммы

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

Невозможно вернуть извне подпрограммы

(F) Оператор return был выполнен в основном коде, то есть там, где не было вызова подпрограммы для возврата из неё. См. perlsub.

Невозможно вернуть %s в контекст lvalue скалярной переменной

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

Невозможно вычислить логарифм %g

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

Невозможно вычислить квадратный корень %g

(F) Для обычных вещественных чисел нельзя вычислить квадратный корень отрицательного числа. Однако в стандартном Perl есть пакет Math::Complex, если вы действительно хотите это сделать.

Нельзя сделать активную подпрограмму неопределённой

(F) Вы не можете удалить процедуру, которая в данный момент выполняется. Однако вы можете переопределить её во время выполнения, и даже удалить переопределённую подпрограмму, пока выполняется старая. Вот так.

Невозможно ослабить ссылку на нессылочное значение

(F) Вы попытались ослабить ссылку на что-то, что не является ссылкой. Только ссылки могут быть ослаблены.

Невозможно повысить тип %s (%d) до %d

(P) Внутренняя процедура sv_upgrade добавляет "члены" к SV, преобразуя его в более специализированный тип SV. Однако несколько верхних типов SV настолько специализированы, что их невозможно преобразовать друг в друга. Это сообщение указывает на попытку такого преобразования.

Нельзя использовать '%c' после -mname

(F) Вы попытались вызвать Perl с переключателем -m, но после имени модуля вы ввели что-то кроме "=".

Нельзя использовать хеш как ссылку

(F) Вы попытались использовать хеш как ссылку, как в %foo->{"bar"} или %$ref->{"hello"}. В версиях Perl ≤ 5.22.0 этот синтаксис допускался, но не должен был. Он был устаревшим в Perl 5.6.1.

Нельзя использовать массив как ссылку

(F) Вы попытались использовать массив как ссылку, как в @foo->[23] или @$ref->[99]. В версиях Perl ≤ 5.22.0 этот синтаксис допускался, но не должен был. Он был устаревшим в Perl 5.6.1.

Невозможно использовать анонимную таблицу символов для поиска методов

(F) Внутренняя процедура поиска методов получила таблицу символов без имени. Таблицы символов могут стать анонимными, например, при удалении стогов: undef %Some::Package::.

Нельзя использовать неопределённое значение в качестве ссылки %s

(F) Значение, используемое в качестве жёсткой или символической ссылки, должно быть определено. Это помогает избежать некоторых скрытых ошибок.

Нельзя использовать голый идентификатор ("%s") как ссылку %s при включенном "strict refs"

(F) "strict refs" допускает только жёсткие ссылки. Символические ссылки запрещены. См. perlref.

Нельзя использовать %! так как Errno.pm недоступен

(F) В первый раз при использовании хеша %!, Perl автоматически загружает модуль Errno.pm. Модуль Errno должен привязать хеш %! для предоставления символических имён для значений $! errno.

Нельзя использовать как '<' так и '>' после типа '%c' в %s

(F) Тип не может одновременно иметь как порядок байтов big-endian, так и little-endian, поэтому такая комбинация модификаторов недопустима. См. "pack" в perlfunc.

Нельзя использовать 'defined(@array)' (Возможно, вам следует просто опустить defined()?)

(F) defined() не подходит для массивов, потому что проверяет неопределённое значение скаляра. Если вы хотите проверить, пуст ли массив, просто используйте if (@array) { # not empty }, например.

Нельзя использовать 'defined(%hash)' (Возможно, вам следует просто опустить defined()?)

(F) defined() обычно неверно для хешей.

Хотя defined %hash ложно для простого неиспользуемого хеша, оно становится истинным в нескольких неявных случаях, включая итераторы, слабые ссылки, имена стогов, оставаясь истинным даже после undef %hash. Эти вещи делают defined %hash практически бесполезным, поэтому теперь это генерирует ошибку.

Если вам нужна проверка на непустоту, поместите её в контекст булевого значения (см. "Скалярные значения" в perldata):

if (%hash) {
   # not empty
}

Если вы хотели проверить, существует ли такая переменная пакета defined %Foo::Bar::QUUX, то это никогда не было надёжно и не является хорошим способом запроса функций пакета, загружен ли он и т. д.

Нельзя использовать %s в качестве переменной цикла

(P) Парсер запутался при попытке проанализировать цикл foreach.

Нельзя использовать глобальную переменную %s в %s

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

Нельзя использовать '%c' в группе с другим порядком байтов в %s

(F) Вы попытались принудительно изменить порядок байтов для типа, который уже находится в группе с модификатором порядка байтов. Например, вы не можете принудительно установить порядок little-endian для типа, находящегося внутри группы big-endian.

Нельзя использовать "my %s" в сравнении для сортировки

(F) Глобальные переменные $a и $b зарезервированы для сравнения в сортировке. Вы упомянули $a или $b в одной строке с оператором <=> или cmp, а переменная ранее была объявлена как лексическая переменная. Либо укажите имя переменной сортировки с именем пакета, либо переименуйте лексическую переменную.

Нельзя использовать ссылку %s в качестве ссылки %s

(F) Вы перепутали типы ссылок. Вам нужно обратиться к ссылке необходимого типа. Для проверки типа ссылки можно использовать функцию ref().

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

(F) Вы сказали Perl обращаться к строке, что use strict блокирует для предотвращения случайного происшествия. См. "Символические ссылки" в perlref. Это может быть вызвано @ или $ в строке с двойными кавычками непосредственно перед интерполяцией переменной, например, в "user @$twitter_id", которая говорит о том, что содержимое $twitter_id должно рассматриваться как ссылка на массив; используйте \ для получения буквального @ символа, за которым следует содержимое $twitter_id: "user \@$twitter_id".

Нельзя использовать индекс на %s

(F) Компилятор попытался интерпретировать выражение в квадратных скобках как индекс. Но слева от скобок было выражение, которое не выглядело как ссылка на хеш или массив, или что-либо ещё, допускающее индексацию.

Нельзя использовать \%c для обозначения $%c в выражении

(W синтаксис) В обычном выражении обратная косая черта — это унарный оператор, создающий ссылку на свой аргумент. Использование обратной косой черты для обозначения обратной ссылки на совпавший подстроку допустимо только в качестве части шаблона регулярного выражения. Попытка сделать это в обычном коде Perl даст значение, которое выводится в виде SCALAR(0xdecaf). Используйте форму $1 вместо этого.

Невозможно ослабить ссылку на нессылочное значение

(F) Вы попытались ослабить ссылку на что-то, что не является ссылкой. Только ссылки могут быть ослаблены.

Нельзя использовать "when" вне topicalizer

(F) Вы использовали блок when(), который не находится внутри цикла foreach или блока given. (Обратите внимание, что эта ошибка выдаётся при выходе из блока when, поэтому вы не получите ошибку, если соответствие не найдено или если вы используете явный continue.)

Невозможно присвоить x= к значению только для чтения

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

Блок catch требует (VAR)

(F) Вы попытались использовать синтаксис try и catch use feature 'try', но не включили переменную ошибки в блок catch. Имя переменной в скобках не является необязательным, в отличие от некоторых других форм синтаксиса, которые вы можете знать из модулей CPAN или других языков.

Требуемый синтаксис

try { ... }
catch ($var) { ... }
Символ, следующий за "\c", должен быть печатаемым ASCII

(F) В \cX, X должен быть печатаемым (не управляющим) ASCII-символом.

Обратите внимание, что ASCII-символы, которые не отображаются как управляющие символы, не рекомендуются и будут генерировать предупреждение (если оно включено) ""\c%c" можно более явно записать как "%s"".

Символ, следующий за \%c, должен быть '{' или односимвольным именем свойства Юникода в регулярном выражении; отмечено <-- HERE в m/%s/

(F) (В приведенном выше примере %c заменяется либо p, либо P.) Вы указали то, что не является допустимым именем свойства Юникода. Большинство свойств Юникода определяются \p{...}. Но если имя — односимвольное, фигурные скобки можно опустить.

Символ в формате 'C' заключён в pack

(W pack) Вы сказали

pack("C", $x)

где $x меньше 0 или больше 255; формат "C" предназначен только для кодирования символов родной операционной системы (ASCII, EBCDIC и т. д.), а не для символов Юникода, поэтому Perl поступил так, как если бы вы имели в виду

pack("C", $x & 255)

Если вам действительно нужно упаковать кодовые точки Юникода, используйте формат "U" вместо этого.

Символ в формате 'c' заключён в pack

(W pack) Вы сказали

pack("c", $x)

где $x меньше -128 или больше 127; формат "c" предназначен только для кодирования символов родной операционной системы (ASCII, EBCDIC и т. д.), а не для символов Юникода, поэтому Perl поступил так, как если бы вы имели в виду

pack("c", $x & 255);

Если вам действительно нужно упаковать кодовые точки Юникода, используйте формат "U" вместо этого.

Символ в формате '%c' заключён в unpack

(W unpack) Вы попытались сделать что-то вроде

unpack("H", "\x{2a1}")

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

unpack("H", "\x{a1}")
Символ в формате 'W' заключён в pack

(W pack) Вы сказали

pack("U0W", $x)

где $x меньше 0 или больше 255. Однако режим U0 ожидает, что все значения будут в диапазоне [0, 255], поэтому Perl поступил так, как если бы вы имели в виду:

pack("U0W", $x & 255)
Символы в формате '%c', заключенные в pack

(W pack) Вы попробовали что-то вроде

pack("u", "\x{1f3}b")

где формат ожидает обработки последовательности байтов (символы со значением ниже 256), но некоторые символы имели большее значение. Perl использует значение символов по модулю 256, как если бы вы предоставили:

pack("u", "\x{f3}b")
Символы в формате '%c', заключенные в unpack

(W unpack) Вы попробовали что-то вроде

unpack("s", "\x{1f3}b")

где формат ожидает обработки последовательности байтов (символы со значением ниже 256), но некоторые символы имели большее значение. Perl использует значение символов по модулю 256, как если бы вы предоставили:

unpack("s", "\x{f3}b")
Определения псевдонимов charnames не могут содержать последовательность из нескольких пробелов; отмечено <-- HERE в %s

(F) Вы определили имя символа, содержащее несколько пробелов подряд. Замените их на один пробел. Обычно эти имена определяются в аргументе :alias для use charnames, но их может определить установленный переводчик в $^H{charnames}. См. "СПРАВОЧНИК ПО ПСЕВДОНИМАМ" в charnames.

chdir() на незакрытом файловом дескрипторе %s

(W unopened) Вы пытались использовать chdir() с файловым дескриптором, который никогда не открывался.

"\c%c" более понятно записывается просто как "%s"

(W syntax) Конструкцию \cX предназначено для указания непечатаемых символов. Вы использовали её для печатаемого символа, который лучше записать просто как сам себя, возможно, с предшествующей обратной косой чертой для небуквенных символов. Такой способ не переносим между платформами ASCII и EBCDIC.

Класс уже имеет суперкласс, нельзя добавить другой

(F) Вы попытались указать второй суперкласс для class с помощью атрибута :isa, когда уже указан один. В отличие от классов, экземпляры которых создаются с помощью bless, классы, созданные с помощью ключевого слова class, не могут иметь более одного суперкласса.

Атрибут класса %s требует значения

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

class Example::Class :attr(VALUE) ...
класс является экспериментальным

(S experimental::class) Это предупреждение выдаётся, если вы используете ключевое слово class в use feature 'class'. Это ключевое слово в настоящее время является экспериментальным и его поведение может измениться в будущих релизах Perl.

Атрибут класса :isa требует класса, но "%s" им не является

(F) При создании подкласса с использованием атрибута class :isa, указанный суперкласс также должен быть реальным классом, созданным с помощью ключевого слова class.

Клонирование контекста подстановки не реализовано

(F) Создание новой нити внутри оператора s/// не поддерживается.

closedir() попытка на некорректном дескрипторе каталога %s

(W io) Дескриптор каталога, который вы пытались закрыть, либо закрыт, либо не является дескриптором каталога. Проверьте ваш поток управления.

close() на незакрытом файловом дескрипторе %s

(W unopened) Вы пытались закрыть файловый дескриптор, который никогда не открывался.

Вызван прототип замыкания

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

\C больше не поддерживается в регулярных выражениях; отмечено <-- HERE в m/%s/

(F) Класс символов \C раньше позволял сопоставлять один байт внутри многобайтового символа UTF-8, но был удалён в версии 5.24, так как нарушал инкапсуляцию и имел очень много багов в реализации. Если вам действительно нужно обработать отдельные байты, вам, вероятно, нужно преобразовать строку в такую, где каждый лежащий в основе байт хранится как символ, с помощью utf8::encode().

Не хватает кода после '/'

(F) У вас была (под)шаблон, заканчивающаяся '/'. После слеша должен быть другой код шаблона. См. "pack" в perlfunc.

Код символа 0x%X не является Unicode и не переносим

(S non_unicode portable) У вас был код символа, который никогда не был в каком-либо стандарте, поэтому другие языки, кроме Perl, вероятно, его не поймут. Этот код символа также не поместится в 32-битовое слово на платформах ASCII, и поэтому не переносим между системами.

В прошлом в некоторых стандартах разрешалось использование кодов символов до 0x7FFF_FFFF, но не выше, а этот код символа выше.

Поддержка этих кодов символов — это расширение Perl, и вы должны ожидать, что только Perl сможет с ними работать; сам Perl на платформах EBCDIC до версии 5.24 не поддерживает их.

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

Код символа 0x%X не является Unicode, может быть не переносим

(S non_unicode) У вас был код символа, превышающий максимальное значение Unicode U+10FFFF.

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

На платформах EBCDIC коды символов выше 0x3FFF_FFFF имеют другое представление в Perl версии 5.24, чем раньше, поэтому любой файл, содержащий эти коды, написанный до этой версии, потребует преобразования перед чтением в более поздней версии Perl.

%s: Команда не найдена

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

#!/usr/bin/perl
%s: команда не найдена

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

#!/usr/bin/perl
%s: команда не найдена: %s

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

#!/usr/bin/perl
Компиляция завершилась неудачей в require

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

connect() на закрытом сокете %s

(W closed) Вы пытались выполнить connect на закрытом сокете. Вы забыли проверить возвращаемое значение вызова socket()? См. "connect" в perlfunc.

Константа(%s): Вызов &{$^H{%s}} не вернул определённое значение

(F) Подпрограмма, зарегистрированная для обработки перегрузки констант (см. overload) или обработчик пользовательских имён символов (см. "КАСТОМИЗАЦИЯ ПЕРЕВОДЧИКОВ" в charnames) вернула неопределённое значение.

Константа(%s): $^H{%s} не определено

(F) Парсер обнаружил несоответствия при попытке определить перегруженную константу. Возможно, вы забыли загрузить соответствующую прагму overload?

Константа не является %s ссылкой

(F) Константа (возможно, объявленная с помощью прагмы use constant) разыменовывается, но она имеет не тот тип ссылки. В сообщении указан ожидаемый тип ссылки. Обычно это указывает на синтаксическую ошибку в разыменовании константы. См. "Константные функции" в perlsub и constant.

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

(F) Вы написали что-то вроде

my $var;
$sub = sub () { $var };

но $var ссылается в другом месте и может быть изменено после того, как выражение sub было вычислено. Либо оно явно изменяется в другом месте ($var = 3) или передаётся в подпрограмму или оператор, например, printf или map, которые могут или не могут изменить переменную.

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

Это использование было устаревшим, а начиная с Perl 5.32 больше не разрешается, что позволяет изменить поведение в будущем.

Если вы намеревались, чтобы подпрограмма была пригодна для встраивания, убедитесь, что переменная не ссылается в другом месте, возможно, скопировав её:

my $var2 = $var;
$sub = sub () { $var2 };

Если вы хотите, чтобы эта подпрограмма была замыканием, отражающим будущие изменения переменной, на которую она ссылается, добавьте явное return:

my $var;
$sub = sub () { return $var };
Переопределённая константная подпрограмма %s

(W redefine)(S) Вы переопределили подпрограмму, которая ранее была пригодна для встраивания. См. "Константные функции" в perlsub для комментариев и обходных путей.

Неопределённая константная подпрограмма %s

(W misc) Вы неопределили подпрограмму, которая ранее была пригодна для встраивания. См. "Константные функции" в perlsub для комментариев и обходных путей.

Неизвестная константа(%s)

(F) Парсер обнаружил несоответствия при попытке определить перегруженный константный элемент или при поиске имени символа, указанного в \N{...} escape. Возможно, вы забыли загрузить соответствующий overload пragma?

:const — экспериментально

(S experimental::const_attr) Атрибут "const" — экспериментальный. Если вы хотите использовать эту функцию, отключите предупреждение с помощью no warnings 'experimental::const_attr', но знайте, что при этом вы рискуете тем, что ваш код может сломаться в будущей версии Perl.

:const не разрешён для именованных подпрограмм

(F) Атрибут "const" вызывает выполнение анонимной подпрограммы и захват её значения в момент клонирования. Именованные подпрограммы не клонируются таким образом, поэтому атрибут не имеет смысла для них.

Метод копирования не вернул ссылку

(F) Метод, перегружающий оператор "=", содержит ошибку. См. "Copy Constructor" в overload.

&CORE::%s нельзя вызвать напрямую

(F) Вы попытались вызвать подпрограмму в пространстве имён CORE:: с помощью &foo синтаксиса или через ссылку. Некоторые подпрограммы в этом пакете пока не могут вызываться таким образом, а должны вызываться как именованные. Следующий код сработает:

BEGIN { *shove = \&CORE::push; }
shove @array, 1,2,3; # pushes on to @array
CORE::%s — не ключевое слово

(F) Пространство имён CORE:: зарезервировано для ключевых слов Perl.

Повреждённый код операции регулярного выражения %d > %d

(P) Это либо ошибка Perl, либо, если вы используете, ошибка вашего собственного движка регулярных выражений. Если это не последнее, сообщите об ошибке на https://github.com/Perl/perl5/issues/new/choose.

Повреждённые указатели регулярного выражения

(P) Движок регулярных выражений запутался, получив данные от компилятора регулярных выражений.

Повреждённая программа регулярного выражения

(P) Движок регулярных выражений получил программу регулярного выражения без корректного магического числа.

Повреждённый указатель malloc 0x%x по адресу 0x%x

(P) Внутренняя ошибка в пакете malloc, поставляемом с Perl.

Подсчёт после длины/кода в unpack

(F) Вы использовали шаблон unpack, указывающий на строку заданной длины, но также указали явную длину строки. См. "pack" в perlfunc.

Объявление ссылок — экспериментальная функция

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

no warnings "experimental::declared_refs";
use feature "declared_refs";
$fooref = my \$foo;
Глубокая рекурсия в анонимной подпрограмме
Глубокая рекурсия в подпрограмме "%s"

(W recursion) Эта подпрограмма вызвала себя (прямо или косвенно) более чем в 100 раз больше, чем вернулась. Вероятно, это указывает на бесконечную рекурсию, если вы не пишете странные программы для тестирования производительности, в противном случае это указывает на что-то другое.

Это пороговое значение можно изменить с 100, перекомпилировав двоичный файл perl, установив макрос препроцессора C PERL_SUB_DEPTH_WARN на желаемое значение.

(?(DEFINE)....) не допускает ветвлений в регулярном выражении; отмечено <-- HERE в m/%s/

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

<-- HERE показывает место в регулярном выражении, где была обнаружена проблема.

%s не определяет ни пакет, ни VERSION — проверка версии завершилась неудачно

(F) Вы написали что-то вроде "use Module 42", но в файле модуля нет ни объявления пакета, ни $VERSION.

Аргумент delete не является элементом или срезом HASH или ARRAY

(F) Аргумент для delete должен быть либо элементом массива или хэша, например:

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

или срезом массива или хэша, например:

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

или срезом пары ключ/значение хэша или индекс/значение массива, например:

%foo[$bar, $baz, $xyzzy]
$ref->[12]->%{"susie", "queue"}
Разделитель для here-документа слишком длинный

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

DESTROY создал новую ссылку на удалённый объект '%s'

(F) Метод DESTROY() создал новую ссылку на объект, который только что был удалён. Perl запутался и предпочел прервать выполнение, вместо создания висячей ссылки.

Не создан корректный заголовок

См. "Ошибка сервера 500".

%s не вернул истинное значение

(F) Требуемый (или используемый) файл должен вернуть истинное значение, чтобы указать, что он был успешно скомпилирован и выполнил код инициализации. Обычно такой файл заканчивается "1;", хотя любое истинное значение подойдет. См. "require" в perlfunc.

(Вы имели в виду &%s?)

(W misc) Возможно, вы имели в виду импортированную подпрограмму &FOO как $FOO или что-то подобное.

(Вы имели в виду "local" вместо "our"?)

(W shadow) Помните, что "our" не локализует объявленную глобальную переменную. Вы объявили её снова в том же лексическом пространстве, что, похоже, излишне.

(Вы имели в виду $ или @ вместо %?)

(W) Возможно, вы написали %hash{$key}, когда имели в виду $hash{$key} или @hash{@keys}. С другой стороны, возможно, вы просто имели в виду %hash и запутались.

Ошибка

(F) Вы передали die() пустую строку (что эквивалентно die "") или вызвали её без аргументов, и $@ было пустым.

Документ не содержит данных

См. "Ошибка сервера 500".

%s не определяет %s::VERSION — проверка версии завершилась неудачно

(F) Вы написали что-то вроде "use Module 42", но модуль не определил $VERSION.

'/' не принимает счёт повторений в %s

(F) Нельзя помещать счёт повторений любого вида сразу после '/' в коде. См. "pack" в perlfunc.

do "%s" завершился неудачей, '.' больше не находится в @INC; вы имели в виду do "./%s"?

(D deprecated::dot_in_inc) Раньше do "somefile"; искал указанный файл в текущей директории. С версии perl v5.26.0, . был удалён из @INC по умолчанию, поэтому это больше не так. Чтобы искать файл только в текущей директории, можно написать do "./somefile"; .

Неизвестно, как получить имя файла

(P) PerlIO_getname, внутренняя функция ввода-вывода perl, специфичная для VMS, была как-то вызвана на другой платформе. Этого не должно происходить.

Неизвестно, как обработать магию типа \%o

(P) Внутренняя обработка магических переменных была нарушена.

Снижение объявления use VERSION до версии ниже 5.11 устарело

(S deprecated::version_downgrade) Это предупреждение выводится для инструкции use VERSION, которая запрашивает версию ниже 5.11 (когда влияние use strict будет отключено), после предыдущего объявления с большей версией (которая бы включила эти эффекты). Из-за изменения взаимодействия use VERSION со флагами строгости, эта функция больше не поддерживается.

(Вам нужно предварительно объявить %s?)

(S syntax) Это обоснованное предположение, сделанное совместно с сообщением "%s найден там, где ожидается оператор". Часто это означает, что к подпрограмме или имени модуля обращаются, но оно ещё не объявлено. Это может быть из-за проблем с порядком в файле или из-за отсутствующего оператора "sub", "package", "require" или "use". Если вы обращаетесь к чему-то, что ещё не определено, вы на самом деле не обязаны определять подпрограмму или пакет до текущего места. Вы можете использовать пустое "sub foo;" или "package FOO;" для "предварительного объявления".

dump() должно быть написано как CORE::dump() начиная с Perl 5.30

(F) Вы использовали устаревшую dump() встроенную функцию. Она была устаревшей начиная с Perl 5.8.0. Начиная с Perl 5.30, она должна быть написана в полном квалифицированном формате: CORE::dump().

См. "dump" в perlfunc.

dump не поддерживается

(F) Ваша система не поддерживает dump/undump.

Дублирующее free() проигнорировано

(S malloc) Внутренняя процедура free() была вызвана для чего-то, что уже было освобождено.

Повторяющийся модификатор '%c' после '%c' в %s

(W unpack) Вы применили один и тот же модификатор более одного раза после типа в шаблоне pack. См. "pack" в perlfunc.

each в анонимном %s всегда начнётся с начала

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

elseif должно быть elsif

(S syntax) В Perl нет ключевого слова "elseif", потому что Ларри считает его некрасивым. Ваш код будет интерпретирован как попытка вызвать метод под названием "elseif" для класса, возвращённого последующим блоком. Это вряд ли то, что вы хотите.

Пустое \%c в регулярном выражении; отмечено <-- HERE в m/%s/
Пустое \%c{}
Пустой \%c{} в регулярном выражении; отмечено <-- HERE в m/%s/

(F) Вы использовали что-то вроде \b{}, \B{}, \o{}, \p, \P, или \x без указания объекта для его работы.

К сожалению, по причинам обратной совместимости, пустой \x является допустимым вне use re 'strict' и расширяется до нулевого символа.

Пустой (?) без каких-либо модификаторов в регулярном выражении; отмечено <-- HERE в m/%s/

(W regexp) (только при use re 'strict') (?) ничего не делает, поэтому, возможно, это ошибка ввода.

${^ENCODING} больше не поддерживается

(F) Специальная переменная ${^ENCODING}, ранее использовавшаяся для реализации директивы encoding, больше не поддерживается начиная с Perl 5.26.0.

Установка её на любое значение, отличное от undef, является фатальной ошибкой начиная с Perl 5.28.

${^HOOK}{%s} может быть только ссылкой на код или undef

(F) Вы попытались присвоить значение, отличное от undef или ссылки на код, переменной %{^HOOK}. Хендлеры могут быть только ссылками на код. Подробности см. в "%{^HOOK}" в perlvar.

Попытка установить неизвестный хендлер '%s' в %{^HOOK}

(F) Вы попытались присвоить значение, отличное от undef или ссылки на код, переменной %{^HOOK}. Хендлеры могут быть только ссылками на код. Подробности см. в "%{^HOOK}" в perlvar.

Не удалось установить эффективные %s

(F) При использовании директивы use filetest, переключение реальных и эффективных идентификаторов пользователя или группы пользователей не удалось.

%ENV алиасировано к %s

(F) Вы работаете в режиме taint, и переменная %ENV была алиасирована к другому массиву, поэтому она больше не отражает состояние среды выполнения программы. Это потенциально небезопасно.

Ошибка преобразования спецификации файла %s

(F) Ошибка, характерная для VMS. Поскольку Perl может работать со спецификациями файлов как в формате VMS, так и в формате Unix, он преобразует их в единый формат, когда должен работать с ними непосредственно. Либо вы передали Perl недопустимую спецификацию файла, либо вы столкнулись со случаем, который не обрабатывается средствами преобразования. Увы.

Ошибка %s при расширении %s

(F) Возникла ошибка при обработке пользовательского свойства ("Пользовательские свойства символов" в perlunicode). Это пользовательские подпрограммы, поэтому они могут содержать ошибки, которые могут помешать их компиляции или выполнению. Вызовы этих подпрограмм eval'd, и если произойдет ошибка, это сообщение будет выведено, используя содержимое $@ из неудачной eval.

Другой возможной причиной является наличие заражённых данных где-то в цепочке расширения свойства. В таком случае, сообщение будет указывать на эту проблему. См. "Небезопасное пользовательское свойство %s".

Группа Eval в небезопасном регулярном выражении

(F) Perl обнаружил заражённые данные при попытке скомпилировать регулярное выражение, содержащее (?{ ... }) нулевую ширину утверждения, что небезопасно. См. "(?{ code })" в perlre и perlsec.

Группа Eval запрещена во время выполнения, используйте re 'eval' в регулярном выражении m/%s/

(F) Perl попытался скомпилировать регулярное выражение, содержащее (?{ ... }) утверждение нулевой ширины во время выполнения, как это происходит, когда шаблон содержит интерполированные значения. Поскольку это представляет собой угрозу безопасности, это запрещено. Если вам нужно, вы можете сделать это, используя директиву re 'eval' или явно создавая шаблон из интерполированной строки во время выполнения и используя его в eval(). См. "(?{ code })" в perlre.

Группа Eval запрещена, используйте re 'eval' в регулярном выражении m/%s/

(F) Регулярное выражение содержало (?{ ... }) утверждение нулевой ширины, но этот конструкт разрешён только при включённой директиве use re 'eval'. См. "(?{ code })" в perlre.

EVAL без изменения позиции превысил предел в регулярном выражении; отмечено <-- HERE в m/%s/

(F) Вы использовали шаблон, в котором вложенные вызовы EVAL не потребляют текст. Перестройте шаблон так, чтобы потреблялся текст.

<-- HERE показывает место в регулярном выражении, где была обнаружена проблема.

Слишком длинный оператор <>

(F) Содержимое оператора <> не должно превышать максимального размера идентификатора Perl. Если вы просто пытаетесь выполнить glob длинного списка имён файлов, попробуйте использовать оператор glob(), или поместите имена файлов в переменную и выполните glob для неё.

exec? Я не такой операционная система

(F) Функция exec не реализована на некоторых системах, например, Catamount. См. perlport.

%sВыполнение %s прервано из-за ошибок компиляции.

(F) Заключительное сообщение, когда происходит ошибка компиляции Perl.

Выполнение %s прервано из-за ошибок компиляции.

(F) Заключительное сообщение, когда происходит ошибка компиляции Perl.

Аргумент exists не является элементом HASH или ARRAY или подпрограммой

(F) Аргумент для exists должен быть элементом хеша или массива, или подпрограммой с амперсандом, например:

$foo{$bar}
$ref->{"susie"}[12]
&do_something
Аргумент exists не является именем подпрограммы

(F) Аргумент для exists в exists &sub должен быть именем подпрограммы, а не вызовом подпрограммы. exists &sub() вызовет эту ошибку.

Выход из eval через %s

(W exiting) Вы выходите из eval нестандартным способом, таким как goto или оператор управления циклом.

Выход из формата через %s

(W exiting) Вы выходите из формата нестандартным способом, таким как goto или оператор управления циклом.

Выход из псевдоблока через %s

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

Выход из подпрограммы через %s

(W exiting) Вы выходите из подпрограммы нестандартным способом, таким как goto или оператор управления циклом.

Выход из подстановки через %s

(W exiting) Вы выходите из подстановки нестандартным способом, таким как return, goto или оператор управления циклом.

Ожидается ссылка на %s в export_lexically

(F) Тип ссылки, переданной в "export_lexically" в builtin, не соответствует символу предыдущего имени, или значение вообще не является ссылкой.

Ожидается закрывающая скобка в регулярном выражении; отмечено <-- HERE в m/%s/

(F) Вы написали что-то вроде

(?13

для обозначения группы захвата вида (?PARNO), но опустили ")".

Ожидается интерполированный расширенный класс символов в регулярном выражении; отмечено <-- HERE в m/%s/

(F) Похоже, вы пытались интерполировать уже скомпилированный расширенный класс символов, как в этом примере:

my $thai_or_lao = qr/(?[ \p{Thai} + \p{Lao} ])/;
...
qr/(?[ \p{Digit} & $thai_or_lao ])/;

Но отмеченный код не является синтаксически правильным для такого интерполированного класса.

Экспериментальное алиасирование через ссылку не включено

(F) Для алиасирования через ссылки необходимо сначала включить функцию:

no warnings "experimental::refaliasing";
use feature "refaliasing";
\$x = \$y;
Экспериментальная функция %s на скаляре теперь запрещена

(F) Экспериментальная функция, добавленная в Perl 5.14, позволяла вызывать each, keys, push, pop, shift, splice, unshift, и values со скалярным аргументом. Этот эксперимент считается неудачным и был удалён. Функция postderef может лучше удовлетворить ваши потребности.

Экспериментальные подписи подпрограмм не включены

(F) Для использования подписей подпрограмм необходимо сначала их включить:

use feature "signatures";
sub foo ($left, $right) { ... }
Явное благословение на '' (предполагается пакет main)

(W misc) Вы благословляете ссылку на строку нулевой длины. Это приводит к благословению ссылки в пакет main. Это обычно не то, что вы хотите. Рассмотрите возможность предоставления целевого пакета по умолчанию, например, bless($ref, $p || 'MyPackage');

export_lexically может быть вызван только во время компиляции

(F) "export_lexically" в builtin был вызван во время выполнения. Поскольку он создаёт новые имена в лексической области, в настоящее время компилируемой, его можно вызывать только из кода внутри BEGIN блока в этой области.

%s: Синтаксис выражения

(A) Вы случайно запустили скрипт через csh вместо Perl. Проверьте строку #!, или введите скрипт в Perl вручную.

%s не удалось—очередь вызовов прервана

(F) При выполнении подпрограммы UNITCHECK, CHECK, INIT или END было возбуждено незахваченное исключение. Обработка оставшейся части очереди таких подпрограмм была преждевременно прекращена.

Не удалось закрыть временный файл %s: %s

(F) Закрытие выходного файла при редактировании на месте, как с переключателем -i командной строки, не удалось.

Неверный диапазон [] "%s" в регулярном выражении; отмечено <-- HERE в m/%s/
END_OF_DOCUMENT_MARKER

(W regexp)(F) Диапазон символов в классе символов должен начинаться и заканчиваться буквальным символом, а не другим классом символов, например, \d или [:alpha:]. Символ "-" в вашем неправильном диапазоне интерпретируется как буквальный символ "-". В конструкции (?[...]) это ошибка, а не предупреждение. Рассмотрите возможность экранирования символа "-", "\-". <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.

Ошибка VMS (код статуса=%d) в %s, строка %d

(P) Ошибка, характерная для VMS. Что-то не так в службе системы VMS или процедуре RTL; выходной код Perl должен содержать более подробную информацию. Имя файла в "в %s" и номер строки в "строка %d" указывают на проблемный участок исходного кода Perl.

fcntl не реализован

(F) Похоже, ваша система не реализует fcntl(). Что это, PDP-11 или что-то подобное?

FETCHSIZE вернул отрицательное значение

(F) Связанный массив заявил об отрицательном количестве элементов, что невозможно.

Поле уже имеет имя параметра, нельзя добавить другое

(F) Поле может иметь не более одного применения атрибута :param, чтобы назначить ему имя параметра; после одного применения второго не допускается.

Атрибут поля %s требует значения

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

field $var :attr(VALUE) ...
Поле экспериментально

(S experimental::class) Это предупреждение выдается, если вы используете ключевое слово field в use feature 'class'. Это ключевое слово в настоящее время экспериментальное, и его поведение может измениться в будущих выпусках Perl.

Поле %s недоступно за пределами метода

(F) Попытка обратиться к переменной поля класса из кода, который не находится внутри тела подпрограммы method. Это запрещено, так как только методы имеют доступ к полям экземпляра.

Поле %s объекта "%s" недоступно в методе объекта "%s"

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

Поле слишком широкое в формате 'u' в pack

(W pack) Каждая строка в uuencoded строке начинается с индикатора длины, который не может кодировать значения выше 63. Поэтому нет смысла запрашивать длину строки больше, чем это. Perl будет действовать так, как если бы вы указали u63 в качестве формата.

Дескриптор файла %s открыт только для чтения

(W io) Вы пытались записать в дескриптор файла, открытый только для чтения. Если вы намеревались открыть дескриптор для чтения и записи, вам нужно было открыть его с "+<" или "+>" или "+>>", а не с "<" или без ничего. Если вы намеревались только записать в файл, используйте ">" или ">>". См. "open" в perlfunc.

Дескриптор файла %s открыт только для записи

(W io) Вы пытались прочитать из дескриптора файла, открытого только для записи. Если вы намеревались открыть дескриптор для чтения и записи, вам нужно было открыть его с "+<" или "+>" или "+>>", а не с ">". Если вы намеревались только читать из файла, используйте "<". См. "open" в perlfunc. Другая возможность заключается в том, что вы попытались открыть дескриптор 0 (также известный как STDIN) для записи (возможно, вы закрыли STDIN ранее?).

Дескриптор файла %s повторно открыт как %s только для чтения

(W io) Вы открыли для чтения дескриптор файла, который получил тот же идентификатор дескриптора, что и STDOUT или STDERR. Это произошло потому, что вы ранее закрыли STDOUT или STDERR.

Дескриптор файла STDIN повторно открыт как %s только для записи

(W io) Вы открыли для записи дескриптор файла, который получил тот же идентификатор дескриптора, что и STDIN. Это произошло потому, что вы ранее закрыли STDIN.

Дескриптор файла STD%s повторно открыт как %s только для чтения

(W io) Вы открыли для чтения дескриптор файла, который получил тот же идентификатор дескриптора, что и STDOUT или STDERR. Это произошло потому, что вы ранее закрыли дескриптор.

Заключительный $ должен быть \$ или $имя

(F) Теперь вы должны решить, подразумевался ли заключительный $ в строке буквальным знаком доллара или должен был вводить имя переменной, которая отсутствует. Поэтому вы должны использовать обратную косую черту или имя.

defer — экспериментально

(S experimental::defer) Модификатор блока defer экспериментален. Если вы хотите использовать эту функцию, отключите предупреждение с помощью no warnings 'experimental::defer', но знайте, что при этом вы рискуете тем, что ваш код может сломаться в будущих версиях Perl.

flock() для закрытого дескриптора файла %s

(W closed) Дескриптор файла, для которого вы пытаетесь вызвать flock(), был закрыт до этого. Проверьте свой поток управления. flock() работает с дескрипторами файлов. Вы пытаетесь вызвать flock() для дескриптора каталога с тем же именем?

for my (...) — экспериментально

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

Формат не завершён

(F) Формат должен завершаться строкой с единственной точкой. Perl достиг конца вашего файла, не найдя такой строки.

Формат %s переопределен

(W redefine) Вы переопределили формат. Чтобы подавить это предупреждение, используйте

    {
	no warnings 'redefine';
	eval "format NAME =...";
    }
Найден символ = в условии, должен быть ==

(W syntax) Вы написали

if ($foo = 123)

вместо

if ($foo == 123)

(или что-то подобное).

%s обнаружен там, где ожидался оператор

(S syntax) Лексер Perl знает, ожидать ему термин или оператор. Если он видит то, что ему известно как термин, когда ожидается оператор, он выдает это предупреждение. Обычно это указывает на пропущенный оператор или разделитель, такой как точка с запятой.

gdbm store вернул %d, errno %d, ключ "%s"

(S) Предупреждение расширения GDBM_File о неудачной операции сохранения.

gethostent не реализован

(F) Похоже, ваша библиотека C не реализует gethostent(), возможно, потому что, если бы она это делала, она чувствовала бы моральную ответственность за возврат каждого имени хоста в интернете.

get%sname() для закрытого сокета %s

(W closed) Вы пытались получить имя сокета или сокета-партнера для закрытого сокета. Вы забыли проверить результат вызова socket()?

getpwnam вернул недопустимый UIC %#o для пользователя "%s"

(S) Предупреждение, характерное для VMS. Вызов sys$getuai, лежащий в основе оператора getpwnam, вернул недопустимый UIC.

getsockopt() для закрытого сокета %s

(W closed) Вы пытались получить опцию сокета для закрытого сокета. Вы забыли проверить результат вызова socket()? См. "getsockopt" в perlfunc.

given устарело

(D deprecated::smartmatch) given зависит от smartmatch, который устарел. Он будет удален в Perl 5.42. См. объяснение в разделе "Экспериментальные подробности о given и when" в perlsyn.

Глобальная переменная "%s" требует явного имени пакета (вы забыли объявить "my %s"?)

(F) Вы использовали "use strict" или "use strict vars", что означает, что все переменные должны быть либо лексически ограниченными (с помощью "my" или "state"), объявленными заранее с помощью "our", или явно указано, в каком пакете находится глобальная переменная (с помощью "::").

glob завершился неудачно (%s)

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

Glob не завершен

(F) Лексер увидел открытую квадратную скобку там, где ожидал термин, поэтому он ищет соответствующую закрытую скобку, но не находит её. Скорее всего, вы пропустили необходимые скобки раньше в строке, и вы действительно имели в виду знак "меньше чем".

gmtime(%f) завершился неудачей

(W overflow) Вы вызвали gmtime с числом, с которым он не смог справиться: слишком большое, слишком маленькое или NaN. Возвращаемое значение — undef.

gmtime(%f) слишком большой

(W overflow) Вы вызвали gmtime с числом, которое было больше, чем он может надёжно обработать, и gmtime, вероятно, вернул неверную дату. Это предупреждение также активируется при NaN (специальное значение «не число»).

gmtime(%f) слишком малый

(W overflow) Вы вызвали gmtime с числом, которое было меньше, чем он может надёжно обработать, и gmtime, вероятно, вернул неверную дату.

Ошибка DosAllocMem

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

goto должен иметь метку

(F) В отличие от "next" или "last", вы не можете использовать goto к неопределенному назначению. См. "goto" в perlfunc.

Переход к неопределенной подпрограмме%s

(F) Вы пытались вызвать подпрограмму с синтаксисом goto &sub, но указанная подпрограмма не определена или была определена, но затем была удалена.

Имя группы должно начинаться с символа слова, не являющегося цифрой, в регулярном выражении; отмечено <-- HERE в m/%s/

(F) Имена групп должны соответствовать правилам для идентификаторов Perl, то есть они должны начинаться с символа слова, не являющегося цифрой. Распространённой причиной этой ошибки является использование (?&0) вместо (?0). См. perlre.

()-группа начинается со счётчика

(F) Группа () была начата со счётчика. Счётчик должен следовать за чем-либо: символом шаблона или группой (). См. "pack" в perlfunc.

У %s были ошибки компиляции.

(F) Конечное сообщение об ошибке, когда perl -c терпит неудачу.

Необходимо было неожиданно создать %s

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

У %s слишком много ошибок

(F) Парсер прекратил попытку анализа программы после 10 ошибок. Дальнейшие сообщения об ошибках, вероятно, будут неинформативными.

Шестнадцатеричное число с плавающей точкой: переполнение показателя

(W переполнение) Шестнадцатеричное число с плавающей точкой имеет показатель, больший, чем поддерживает число с плавающей точкой.

Шестнадцатеричное число с плавающей точкой: подпоточная ошибка показателя

(W переполнение) Шестнадцатеричное число с плавающей точкой имеет показатель меньше, чем поддерживает число с плавающей точкой. В случае с плавающей точкой IEEE 754 это также может означать, что используются субнормализованные числа (ранее известные как ненормализованные), что может быть или не быть ошибкой.

Шестнадцатеричное число с плавающей точкой: внутренняя ошибка (%s)

(F) Что-то ужасно пошло не так при обработке шестнадцатеричного числа с плавающей точкой.

Шестнадцатеричное число с плавающей точкой: переполнение мантиссы

(W переполнение) Шестнадцатеричная литеральная константа с плавающей точкой имела больше битов в мантиссе (часть между 0x и показателем, также известная как дробная часть или значащая часть), чем поддерживает число с плавающей точкой.

Шестнадцатеричное число с плавающей точкой: потеря точности

(W переполнение) Шестнадцатеричное число с плавающей точкой имело больше цифр, чем можно было вывести. Это может быть вызвано форматами long double, не поддерживаемыми платформой, или отсутствием 64-битных целых чисел (необходимых для получения цифр в некоторых конфигурациях).

Шестнадцатеричное число с плавающей точкой: неподдерживаемый формат long double

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

Шестнадцатеричное число > 0xffffffff не переносимо

(W переносимость) Указанное вами шестнадцатеричное число больше, чем 2**32-1 (4294967295), и поэтому не переносимо между системами. См. perlport для получения дополнительной информации о проблемах переносимости.

Идентификатор слишком длинный

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

Игнорируется нулевой символ \N{} в классе символов в регулярном выражении; отмечено <-- HERE в m/%s/

(W regexp) Имена Unicode символов (\N{...}) могут возвращать последовательность нулевой длины. Когда такой символ используется в классе символов, его поведение не определено. Проверьте, используется ли правильный символ и правильно ли установлен обработчик названий символов.

Неверная %s цифра '%c' пропущена

(W цифра) Здесь %s является одним из "двоичный", "восьмеричный" или "шестнадцатеричный". Возможно, вы попытались использовать цифру, не являющуюся допустимой для данного типа, например, только 0 и 1 для двоичного числа. Для восьмеричных чисел это поднимается только в том случае, если недопустимый символ является '8' или '9'. Для шестнадцатеричных чисел 'A' - 'F' и 'a' - 'f' являются допустимыми. Интерпретация числа остановилась непосредственно перед нарушающей цифрой или символом.

Неверная двоичная цифра '%c'

(F) Вы использовали цифру, отличную от 0 или 1, в двоичном числе.

Недопустимый символ после '_' в шаблоне для %s : %s

(W illegalproto) В объявлении шаблона был найден недопустимый символ. Символ '_' в шаблоне должен следовать за ';', указывая, что остальные параметры необязательны, или за одним из '@' или '%', поскольку эти два символа принимают 0 или более конечных параметров.

Недопустимый символ \%o (возврат каретки)

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

Недопустимый символ после знака в сигнатуре подпрограммы

(F) Параметр в сигнатуре подпрограммы содержал неожиданный символ после символа $, @ или %. Обычно за знаком должен следовать имя переменной или = и т. д. Возможно, вы пытаетесь использовать шаблон, находясь в области действия use feature 'signatures'? Например:

sub foo ($$) {}            # legal - a prototype

use feature 'signatures;
sub foo ($$) {}            # illegal - was expecting a signature
sub foo ($a, $b)
        :prototype($$) {}  # legal
Недопустимый символ в шаблоне для %s : %s

(W illegalproto) В объявлении шаблона был найден недопустимый символ. Допустимые символы в шаблонах — $, @, %, *, ;, [, ], &, \, и +. Возможно, вы пытались написать сигнатуру подпрограммы, но не включили эту функцию (use feature 'signatures'), поэтому ваша сигнатура была интерпретирована как недопустимый шаблон.

Недопустимое объявление анонимной подпрограммы

(F) При использовании ключевого слова sub для создания анонимной подпрограммы всегда необходимо указывать блок кода. См. perlsub.

Недопустимое объявление подпрограммы %s

(F) Подпрограмма была объявлена неправильно. См. perlsub.

Недопустимое деление на ноль

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

Недопустимый остаток от деления на ноль

(F) Вы попытались найти остаток от деления числа на 0. Большинство чисел плохо реагируют на это.

Недопустимое количество битов в vec

(F) Количество битов в vec() (третий аргумент) должно быть степенью двойки от 1 до 32 (или 64, если ваша платформа поддерживает это).

Неверная восьмеричная цифра '%c'

(F) Вы использовали 8 или 9 в восьмеричном числе.

Недопустимый оператор после параметра в сигнатуре подпрограммы

(F) За параметром в сигнатуре подпрограммы последовал символ, кроме = для ввода значения по умолчанию, , или ).

use feature 'signatures';
sub foo ($=1) {}           # legal
sub foo ($a = 1) {}        # legal
sub foo ($a += 1) {}       # illegal
sub foo ($a == 1) {}       # illegal
Недопустимый шаблон в регулярном выражении; отмечено <-- HERE в m/%s/

(F) Вы написали что-то вроде

(?+foo)

"+" допустимо только при последующих цифрах, указывающих на группу захвата. См. (?PARNO).

Недопустимый сценарий с правами root

(F) Сценарий, запущенный с правами root, был по каким-то причинам неверным.

Недопустимый переключатель в PERL5OPT: -%c

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

Недопустимое имя пользовательского свойства

(F) Вы указали имя свойства в стиле Unicode в шаблоне регулярного выражения (используя \p{} или \P{}). Perl знает, что это не официальное свойство Unicode, и, вероятно, это было предназначено для имени пользовательского свойства, но оно не может быть таковым, так как они должны начинаться с In или Is. Проверьте правильность написания. См. также "Невозможно найти определение свойства Unicode "%s"".

Неправильно сформированное значение среды CRTL "%s"

(W внутреннее) Предупреждение, характерное для VMS. Perl пытался прочитать внутренний массив среды CRTL и столкнулся с элементом без разделителя =, используемого для разделения ключей и значений. Элемент игнорируется.

Неправильно сформированное сообщение в prime_env_iter: |%s|

(W внутреннее) Предупреждение, характерное для VMS. Perl пытался прочитать имя логического устройства или определение символа CLI при подготовке к итерации по %ENV и не обнаружил ожидаемого разделителя между ключом и значением, поэтому строка была пропущена.

(при завершении) %s

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

Ошибка пользовательских обратных вызовов, отправленных с флагом G_KEEPERR, также может привести к этому предупреждению. См. "G_KEEPERR" в perlcall.

Неявное использование @\_ в %s с подпрограммой с сигнатурой — экспериментально

(S experimental::args_array_with_signatures) В подпрограмме, использующей сигнатуру, найдено выражение, неявно связанное с массивом аргументов @\_. Это экспериментально, так как взаимодействие между массивом аргументов и обработкой параметров через сигнатуры не гарантирует стабильности в будущих версиях Perl, и такой код следует избегать.

Неполное выражение внутри '(?[ ])' в регулярном выражении; отмечено <-- HERE в m/%s/

(F) В (?[ ]) была синтаксическая ошибка. Это может произойти, если выражение внутри конструкции было пустым, или если для количества операторов неверное количество операндов. Perl не достаточно умен, чтобы дать вам более точное указание на то, что не так.

Несоответствие иерархии при слиянии C3 класса '%s': слияние не удалось с родителем '%s'

(F) Порядок разрешения методов (MRO) данного класса не соответствует C3, и вы включили C3 MRO для этого класса. См. документацию по C3 в mro для получения дополнительной информации.

Отступ в строке %d here-doc не соответствует разделителю

(F) У вас есть отступы here-документа, где одна или несколько строк имеют пробелы в начале, которые не соответствуют закрывающему разделителю.

Например, строка 2 ниже неправильная, потому что в ней нет как минимум 2 пробелов, но строки 1 и 3 в порядке, потому что в них есть как минимум 2 пробела:

if ($something) {
  print <<~EOF;
    Line 1
   Line 2 not
      Line 3
    EOF
}

Обратите внимание, что табуляции и пробелы сравниваются строго, то есть 1 табуляция не соответствует 8 пробелам.

Бесконечная рекурсия в regex

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

Бесконечная рекурсия в пользовательском свойстве

(F) Пользовательское свойство ("Пользовательские свойства символов" в perlunicode) может зависеть от определений других пользовательских свойств. Если цепочка зависимостей приводит обратно к этому свойству, произойдёт бесконечная рекурсия, если бы не проверка, которая вызвала эту ошибку.

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

Бесконечная рекурсия через пустой шаблон

(F) Вы пытались использовать пустой шаблон внутри блока кода regex, например /(?{ s!!! })/, что привело к повторному выполнению того же шаблона, что представляет собой бесконечный цикл, который прерывается с помощью исключения.

Инициализация переменных состояния в списке в настоящее время запрещена

(F) state разрешает только инициализацию одной переменной, указанной без скобок. Так что state $a = 42 и state @a = qw(a b c) разрешены, но не state ($a) = 42 или (state $a) = 42. Чтобы инициализировать более одной state переменной, инициализируйте их по одной.

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

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

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

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

Небезопасная зависимость в %s

(F) Вы пытались сделать что-то, что механизм маркировки не одобрил. Механизм маркировки включён, когда вы запускаете setuid или setgid, или когда вы явно включаете его с помощью флага -T. Механизм маркировки помечает все данные, полученные непосредственно или косвенно от пользователя, которому не доверяют. Если такие данные используются в "опасной" операции, вы получаете эту ошибку. См. perlsec для получения дополнительной информации.

Небезопасная директория в %s

(F) Вы не можете использовать system(), exec() или открытое подключение с трубопроводом в сценарии setuid или setgid, если $ENV{PATH} содержит директорию, доступную для записи всем. Также, PATH не должен содержать относительных директорий. См. perlsec.

Небезопасная $ENV{%s} при выполнении %s

(F) Вы не можете использовать system(), exec() или открытое подключение с трубопроводом в сценарии setuid или setgid, если любой из $ENV{PATH}, $ENV{IFS}, $ENV{CDPATH}, $ENV{ENV}, $ENV{BASH_ENV} или $ENV{TERM} получен из данных, предоставленных (или потенциально предоставленных) пользователем. Сценарий должен установить путь к известному значению, используя надёжные данные. См. perlsec.

Небезопасное пользовательское свойство %s

(F) Perl обнаружил замаскированные данные при попытке компиляции регулярного выражения, содержащего вызов функции пользовательского свойства символов, т.е. \p{IsFoo} или \p{InFoo}. См. "Пользовательские свойства символов" в perlunicode и perlsec.

Переполнение целого числа в строке форматирования для %s

(F) Индексы и ширины, указанные в строке форматирования printf() или sprintf(), слишком велики. Числа не должны выходить за пределы размера целых чисел для вашей архитектуры.

Переполнение целого числа в %s числе

(S переполнение) Шестнадцатеричное, восьмеричное или двоичное число, которое вы указали как литерал или как аргумент к hex() или oct(), слишком велико для вашей архитектуры и было преобразовано в число с плавающей точкой. На 32-разрядной архитектуре наибольшее шестнадцатеричное, восьмеричное или двоичное число, представимое без переполнения, равно 0xFFFFFFFF, 037777777777 или 0b11111111111111111111111111111111 соответственно. Обратите внимание, что Perl прозрачно повышает все числа до представления с плавающей точкой внутри — с возможной потерей точности в последующих операциях.

Переполнение целого числа в srand

(S переполнение) Число, которое вы передали в srand, слишком велико, чтобы уместиться в целочисленном представлении вашей архитектуры. Число было заменено наибольшим поддерживаемым целым числом (0xFFFFFFFF на 32-битных архитектурах). Это означает, что вы можете получать меньше случайности, чем ожидаете, потому что разные случайные семена, превышающие максимум, будут возвращать одну и ту же последовательность случайных чисел.

Переполнение целого числа в версии
Переполнение целого числа в версии %d

(W переполнение) Некоторая часть инициализации версии слишком велика для размера целых чисел в вашей архитектуре. Это не предупреждение, потому что нет разумной причины, по которой версия должна пытаться использовать элемент, больший, чем обычно 2**32. Это обычно происходит из-за попытки использовать какое-то странное математическое действие в качестве версии, например 100/9.

Внутренняя катастрофа в regex; отмеченная меткой <-- HERE в m/%s/

(P) Что-то серьезно пошло не так в парсере регулярных выражений. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема.

Внутреннее несоответствие в отслеживании vforks

(S) Предупреждение, специфичное для VMS. Perl отслеживает количество раз, когда вы вызывали fork и exec, чтобы определить, должно ли текущее обращение к exec влиять на текущий скрипт или дочерний процесс (см. "exec LIST" в perlvms). Как-то этот счёт стал некорректным, поэтому Perl делает предположение и обрабатывает это exec как запрос на завершение сценария Perl и выполнение указанной команды.

Внутреннее %<num>p может конфликтовать с будущими расширениями printf

(S внутреннее) Внутренний метод Perl, обрабатывающий форматирование printf и sprintf, следует немного другим правилам, когда вызывается из C или XS кода. В частности, форматы, состоящие из цифр, за которыми следует "p" (например, "%7p"), зарезервированы для будущего использования. Если вы видите это сообщение, то модуль XS попытался вызвать этот метод с одним из таких зарезервированных форматов.

Внутреннее urp в regex; отмеченное меткой <-- HERE в m/%s/

(P) Что-то серьёзно пошло не так в парсере регулярных выражений. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема.

%s (...) интерпретируется как функция

(W синтаксис) Вы нарушили правило, которое гласит, что любой оператор списка, за которым следуют скобки, превращается в функцию, а все аргументы операторов списка находятся внутри скобок. См. "Термины и операторы списка (Слева)" в perlop.

В '(?...)', символы '(' и '?' должны быть смежными в regex; отмеченное меткой <-- HERE в m/%s/

(F) Двухсимвольная последовательность "(?" в этом контексте в шаблоне регулярного выражения должна быть неделимым токеном, без ничего между "(" и "?", но вы их разделили пробелами.

В '(*...)', символы '(' и '*' должны быть смежными в regex; отмеченное меткой <-- HERE в m/%s/

(F) Двухсимвольная последовательность "(*" в этом контексте в шаблоне регулярного выражения должна быть неделимым токеном, без ничего между "(" и "*", но вы их разделили. Исправьте шаблон и повторите попытку.

Неверный %s атрибут: %s

(F) Указанный атрибут подпрограммы или переменной не был распознан Perl или пользователем.

Неверные %s атрибуты: %s

(F) Указанные атрибуты подпрограммы или переменной не были распознаны Perl или пользователем.

Неверный символ в определении псевдонима charnames; отмеченное меткой <-- HERE в '%s

(F) Вы пытались создать пользовательский псевдоним для имени символа, используя опцию :alias, чтобы use charnames, и указанный символ в указанном имени не является допустимым. См. "CUSTOM ALIASES" в charnames.

Invalid \0 character in %s for %s: %s\0%s

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

Invalid character in \N{...}; marked by <-- HERE in \N{%s}

(F) Для имён символов допустимы только определённые символы. Указанный символ не является допустимым. См. "CUSTOM ALIASES" в charnames.

Invalid conversion in %s: "%s"

(W printf) Perl не понимает заданный формат преобразования. См. "sprintf" в perlfunc.

Invalid escape in the specified encoding in regex; marked by <-- HERE in m/%s/

(W regexp)(F) Числовой escape (например, \xHH) со значением < 256 не соответствует одному символу при преобразовании из кодировки, указанной в директиве кодировки. Escape был заменён символом ЗАМЕЩЕНИЯ (U+FFFD) вместо, за исключением случаев внутри (?[ ]), где это является фатальной ошибкой. <-- HERE показывает местоположение в регулярном выражении, где был обнаружен escape.

Invalid hexadecimal number in \N{U+...}
Invalid hexadecimal number in \N{U+} в регулярном выражении; marked by <-- HERE in m/%s/

(F) Символьное значение, представленное ..., не является допустимым шестнадцатеричным числом. Оно либо пустое, либо вы использовали символ, отличный от 0-9 или A-F, a-f в шестнадцатеричном числе.

Invalid module name %s with -%c option: содержит одиночный ':'

(F) Аргумент модуля для командной строки perl -m и -M не может содержать одиночные двоеточия в имени модуля, но только в аргументах после знака «=». Другими словами, -MFoo::Bar=:baz допустимо, но -MFoo:Bar=baz нет.

Invalid mro name: '%s'

(F) Вы пытались mro::set_mro("classname", "foo") или use mro 'foo', где foo не является допустимым порядком разрешения методов (MRO). В настоящее время поддерживаются только dfs и c3, если не загружен модуль, являющийся плагином MRO. См. mro и perlmroapi.

Invalid negative number (%s) in chr

(W utf8) Вы передали отрицательное число в chr. Отрицательные числа не являются допустимыми номерами символов, поэтому возвращается символ замены Unicode (U+FFFD).

Invalid number '%s' for -C option.

(F) Вы указали число в опции -C, которое либо имеет дополнительные ведущие нули, либо превышает представление беззнакового целого числа perl.

invalid option -D%c, use -D'' to see choices

(S debugging) Perl был вызван с недопустимыми флагами отладчика. Вызовите perl с опцией -D без флагов, чтобы увидеть список допустимых значений. См. также "-Dletters" в perlrun.

Invalid quantifier in {,} in regex; marked by <-- HERE in m/%s/

(F) Шаблон выглядит как квантификатор {min,max}, но min или max не удалось разобрать как допустимое число — либо оно имеет ведущие нули, либо представляет слишком большое число. <-- HERE показывает, где в регулярном выражении была обнаружена проблема. См. perlre.

Invalid [] range "%s" in regex; marked by <-- HERE in m/%s/

(F) Указанный диапазон в классе символов имел минимальный символ, больший, чем максимальный. Одна из возможных причин — вы забыли {} из вашего конечного \x{} - \x без фигурных скобок может охватывать только до ff. <-- HERE показывает, где в регулярном выражении была обнаружена проблема. См. perlre.

Invalid range "%s" in transliteration operator

(F) Указанный диапазон в операторе tr/// или y/// имел минимальный символ, больший, чем максимальный. См. perlop.

Invalid reference to group in regex; marked by <-- HERE in m/%s/

(F) Указанная вами группа захвата не может существовать, так как используемое вами число не находится в допустимом диапазоне возможных значений для этой машины.

Invalid separator character %s in attribute list

(F) Между элементами списка атрибутов был обнаружен символ, отличный от двоеточия или пробела. Возможно, список параметров в предыдущем атрибуте был завершён преждевременно. См. attributes.

Invalid separator character %s in PerlIO layer specification %s

(W layer) При добавлении слоёв в систему ввода-вывода Perl обнаружен символ, отличный от двоеточия или пробела, между элементами списка слоёв. Возможно, список параметров в предыдущем атрибуте был завершён преждевременно.

Invalid strict version format (%s)

(F) Номер версии не удовлетворяет строгим критериям для версий. Строгий номер версии — это положительное десятичное число (целое или с дробной частью) без показательной записи или строка в формате «точка-десятичная» с ведущим символом «v» и по крайней мере тремя компонентами. Текст в скобках указывает, какие критерии не были соблюдены. См. модуль version для получения дополнительной информации о допустимых форматах версий.

Invalid type '%s' in %s

(F) Указанный символ не является допустимым типом pack или unpack. См. "pack" в perlfunc.

(W) Указанный символ не является допустимым типом pack или unpack, но ранее он игнорировался молча.

Invalid version format (%s)

(F) Номер версии не соответствует критериям «lax» для версий. «Lax» версия — это положительное десятичное число (целое или с дробной частью) без показательной записи или строка в формате «точка-десятичная». Если строка «точка-десятичная» содержит меньше трёх компонентов, она должна начинаться с символа «v». В противном случае ведущий символ «v» является необязательным. Как десятичные, так и «точка-десятичные» версии могут иметь заключительный компонент «альфа», разделённый символом подчёркивания после дробной или «точка-десятичной» компоненты. Текст в скобках указывает, какие критерии не были соблюдены. См. модуль version для получения дополнительной информации о допустимых форматах версий.

Invalid version object

(F) Внутренняя структура объекта версии была недействительной. Возможно, внутренности были изменены напрямую или произвольная ссылка была благословлена в класс «version».

In '(*VERB...)', the '(' and '*' must be adjacent in regex; marked by <-- HERE in m/%s/
Inverting a character class which contains a multi-character sequence is illegal in regex; marked by <-- HERE in m/%s/

(F) Вы написали что-то вроде

qr/\P{name=KATAKANA LETTER AINU P}/
qr/[^\p{name=KATAKANA LETTER AINU P}]/

Это имя на самом деле оценивается как последовательность двух символов катаканы, а не как один, и попытка взять дополнение к последовательности запрещена. (Математически это означало бы любую последовательность символов длиной от 0 до бесконечности, которые не были этими двумя подряд, и это, вероятно, не пригодится.)

(F) Двухсимвольная последовательность "(*" в этом контексте в шаблоне регулярного выражения должна быть неделимым токеном, без ничего между "(" и "*", но вы их разделили.

ioctl не реализован

(F) Похоже, ваша машина не реализует ioctl(), что довольно странно для машины, поддерживающей C.

ioctl() на неоткрытом %s

(W unopened) Вы попытались использовать ioctl() на дескрипторе файла, который никогда не открывался. Проверьте свой поток управления и количество аргументов.

Слои ввода-вывода (такие как '%s') недоступны

(F) Ваш Perl не настроен на использование PerlIO, и поэтому вы не можете использовать слои ввода-вывода. Для использования PerlIO Perl должен быть скомпилирован с параметром 'useperlio'.

IO::Socket::atmark не реализован на этой архитектуре

(F) Ваша машина не реализует функциональность sockatmark(), ни как системный вызов, ни как вызов ioctl (SIOCATMARK).

'%s' — неизвестный тип границы в регулярном выражении; marked by <-- HERE in m/%s/

(F) Вы использовали \b{...} или \B{...}, и ... неизвестно Perl. Текущие допустимые значения приведены в "\b{}, \b, \B{}, \B" в perlrebackslash.

%s() не разрешено для дескрипторов с слоем :utf8

(F) Операторы sysread(), recv(), syswrite() и send() не разрешены для дескрипторов с слоем :utf8, явно или неявно, например, со слоем :encoding(UTF-16LE).

Ранее sysread() и recv() использовали только флаг :utf8 для потока, игнорируя фактические слои. Поскольку sysread() и recv() не выполняли проверку UTF-8, они могли создавать скаляры с некорректной кодировкой.

Аналогично, syswrite() и send() использовали только флаг :utf8, в противном случае игнорируя любые слои. Если флаг установлен, оба записывали значение в кодировке UTF-8, даже если слой имеет другую кодировку, например, как в примере выше.

В идеале все эти операторы полностью игнорировали бы состояние :utf8, работая только с байтами, но это привело бы к неявной поломке существующего кода.

"%s" записывается проще как "%s" в регулярных выражениях; отмечено <-- HERE в m/%s/

(W regexp) (только в use re 'strict' или внутри (?[...]))

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

$* больше не поддерживается начиная с Perl 5.30

(F) Специальная переменная $*, устаревшая в более ранних версиях Perl, была удалена в версии 5.10.0, больше не поддерживается и является фатальной ошибкой начиная с Perl 5.30. В предыдущих версиях Perl использование $* включало или отключало многострочный поиск внутри строки.

Вместо использования $* следует использовать модификаторы регулярных выражений /m (и, возможно, /s). Вы можете включить /m для лексической области видимости (даже для всего файла) с помощью use re '/m'. (В более ранних версиях: когда $* устанавливалось в значение «истина», все регулярные выражения вели себя так, как если бы они были записаны с использованием /m.)

Использование этой переменной станет фатальной ошибкой в Perl 5.30.

$# больше не поддерживается начиная с Perl 5.30

(F) Специальная переменная $#, устаревшая в более ранних версиях Perl, была удалена в версии 5.10.0, больше не поддерживается и является фатальной ошибкой начиная с Perl 5.30. Вместо этого следует использовать функции printf/sprintf.

'%s' — не ссылка на код

(W overload) Второй (четвертый, шестой и т. д.) аргумент overload::constant должен быть ссылкой на код. Либо анонимная подпрограмма, либо ссылка на подпрограмму.

'%s' — не тип, поддерживающий перегрузку

(W overload) Вы попытались перегрузить тип константы, о котором пакет overload не знает.

'%s' не распознан как встроенная функция

(F) Была предпринята попытка use модуля builtin pragma для создания лексического псевдонима для неизвестного имени функции.

-i используется без имён файлов в командной строке, чтение из STDIN

(S inplace) Опция -i была передана в командной строке, указывая, что сценарий предназначен для редактирования файлов на месте, но файлы не были указаны. Это обычно ошибка, так как редактирование STDIN на месте не имеет смысла и может быть запутанным, так как может заставить Perl казаться зависающим, когда он на самом деле просто пытается прочитать из STDIN. Вы должны либо передать имя файла для редактирования, либо удалить -i из командной строки. Дополнительные сведения см. в perlrun.

Мусор в конце регулярного выражения в регулярном выражении m/%s/

(P) Парсер регулярных выражений сбит.

\K не разрешено в утверждениях lookahead/lookbehind в регулярном выражении; отмечено <-- HERE в m/%s/

(F) В вашем регулярном выражении использовалась \K в утверждении lookahead или lookbehind, что в настоящее время не разрешено.

Это может измениться в будущем, см. Поддержка \K в lookarounds.

Метка не найдена для "last %s"

(F) Вы назвали цикл для выхода, но вы сейчас не находитесь в цикле с таким именем, даже если учитывать вызов извне. См. "last" в perlfunc.

Метка не найдена для "next %s"

(F) Вы назвали цикл для продолжения, но вы сейчас не находитесь в цикле с таким именем, даже если учитывать вызов извне. См. "last" в perlfunc.

Метка не найдена для "redo %s"

(F) Вы назвали цикл для перезапуска, но вы сейчас не находитесь в цикле с таким именем, даже если учитывать вызов извне. См. "last" в perlfunc.

Не удалось изменить эффективные %s

(F) При использовании pragma use filetest, переключение реальных и эффективных идентификаторов пользователя или группы не удалось.

длина/код после конца строки в unpack

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

length() используется для %s (вы имели в виду "scalar(%s")?)

(W syntax) Вы использовали length() для массива или хеша, когда, вероятно, хотели подсчитать элементы.

Размер массива можно получить, выполнив:

scalar(@array);

Количество элементов в хеше можно получить, выполнив:

scalar(keys %hash);
Код лексического анализа попытался поместить символ, не являющийся символом Latin-1, в входной Latin-1

(F) Расширение пытается вставить текст в текущий разбор (используя lex_stuff_pvn или аналогичный), но попыталось вставить символ, который не может быть частью текущего ввода. Это изначальная проблема механизма вставки, и одна из причин избегать ее. Если вставка необходима, рекомендуется вставлять только обычный ASCII.

Внутренняя ошибка кода лексического анализа (%s)

(F) Код лексического анализа, предоставленный расширением, нарушил API лексического анализатора обнаружаемым способом.

listen() на закрытом сокете %s

(W closed) Вы пытались выполнить listen на закрытом сокете. Вы забыли проверить возвращаемое значение вызова socket()? См. "listen" в perlfunc.

Список форм piped open не реализован

(F) На некоторых платформах, в частности на Windows, трех- или более аргументная форма open не поддерживает каналы, такие как open($pipe, '|-', @args). Используйте двух-аргументную форму open($pipe, '|prog arg1 arg2...') вместо этого.

Буквальный вертикальный пробел в [] некорректен, кроме как при использовании /x в регулярном выражении; отмечено <-- HERE в m/%s/

(F) (только в use re 'strict' или внутри (?[...]))

Вероятно, вы забыли модификатор /x или в шаблоне была ошибка. Например, вы действительно хотели сопоставить символ конца строки?

\r    carriage return
\f    form feed
\n    line feed
\cK   vertical tab
%s: библиотека для загрузки и бинарные файлы Perl несовместимы (получен %s ключ рукопожатия %p, необходим %p)

(P) Динамическая библиотека .so или .dll загружается в процесс, который был скомпилирован с другой версией Perl, чем версия, с которой была скомпилирована указанная библиотека. Переустановка XS-модуля, скорее всего, исправит эту ошибку.

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

(W locale) Вы используете локаль UTF-8. Локали UTF-8 должны иметь очень специфическое поведение, которого большинство и придерживаются. Это сообщение появляется, когда Perl обнаружил отклонения от ожиданий, и сообщает вам, что ожидаемое поведение перекрывает эти отличия. В некоторых случаях отличия обусловлены неисправностью определения локали, но наиболее распространенные причины этого предупреждения связаны с неоднозначностями и противоречиями в соблюдении стандарта, и локаль выбрала подход, отличающийся от Perl.

Одна из причин заключается в том, что, вопреки утверждениям, Unicode не полностью игнорирует локаль. Турецкий и некоторые родственные языки имеют два типа символов "I". Один с точкой как в верхнем, так и в нижнем регистре, а другой без точки в обоих случаях. Unicode позволяет локали использовать либо турецкие правила, либо правила, используемые во всех других случаях, где существует только один тип "I", который без точки в верхнем регистре и с точкой в нижнем. Ядро Perl не (еще) обрабатывает турецкий случай, и это сообщение предупреждает вас об этом. Вместо этого модуль Unicode::Casing позволяет вам в основном реализовать турецкие правила форматирования.

Другая распространенная причина связана с символами

$ + < = > ^ ` | ~

Эти символы проблемны. Стандарт C предполагает, что они должны рассматриваться как знаки препинания в локале C (и стандарт POSIX ссылается на стандарт C), и Unicode обычно считается надмножеством локали C. Однако Unicode добавил дополнительную категорию «Символ» и классифицировал эти конкретные символы как символы. В большинстве локалей UTF-8 они обрабатываются как знаки препинания, поэтому ispunct(3) возвращает ненулевое значение для них. Но в некоторых локалях это возвращает 0. Perl применяет первый подход, вообще не используя ispunct() (см. примечание [5] в perlrecharclass), и это сообщение выдается для уведомления, что вы получаете подход Perl, а не локали.

Локаль '%s' не поддерживается и может привести к ошибке интерпретатора.

(S locale) Указанная локаль не поддерживается Perl, и ее использование приводит к неопределенному поведению, в том числе к потенциальному сбою работы компьютера.

В настоящее время единственные локали, генерирующие это серьезное предупреждение, — это локали, не являющиеся UTF-8, которые имеют символы, для представления которых требуется более одного байта (обычно в старых локалях для восточноазиатских языков). См. perllocale.

Локаль '%s' может работать некорректно.%s

(W расположение) Вы используете расположение с именем, которое не является UTF-8, и Perl определил, что оно не полностью совместимо с тем, что он может обработать. Второй %s указывает причину.

Наиболее частая причина заключается в том, что в расположении есть символы, которые представлены более чем одним байтом. Perl может обрабатывать только расположения UTF-8. Вероятнее всего, указанное расположение является расположением не-UTF-8 для восточноазиатского языка, такого как китайский или японский. Если расположение является надмножеством ASCII, его часть ASCII может работать в Perl.

Некоторые устаревшие расположения, которые не являются надмножествами ASCII, в основном те, которые находятся в ISO 646 или других 7-битных расположениях, таких как ASMO 449, также могут иметь проблемы, в зависимости от того, какие части набора символов ASCII изменены расположением и используются программой. В сообщении об ошибке перечислены определяемые конфликтующие символы.

Обратите внимание, что не все несовместимости обнаруживаются.

Если это происходит с вами, вы можете сделать не так много, кроме как переключиться на другое расположение или использовать Encode для перевода из расположения в UTF-8; если это непрактично, вас предупреждают, что некоторые вещи могут сломаться.

Это сообщение выводится один раз каждый раз, когда в пределах use locale происходит переключение на плохое расположение, или при первом, возможно, затронутом действии, если use locale наследует плохое расположение. Оно не генерируется для каких-либо операций из модуля POSIX.

localtime(%f) не удалось

(W переполнение) Вы вызвали localtime с числом, которое он не смог обработать: слишком большое, слишком маленькое или NaN. Возвращенное значение равно undef.

localtime(%f) слишком велико

(W переполнение) Вы вызвали localtime с числом, которое было больше, чем он может надежно обработать, и localtime, вероятно, вернул неправильную дату. Это предупреждение также активируется для NaN (специального значения «не число»).

localtime(%f) слишком мало

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

Длина обратного просмотра превышает %d; не реализовано в регулярном выражении m/%s/

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

Потеря точности при %s %f на 1

(W неточность) Вы пытались увеличить или уменьшить значение на единицу, но результат слишком велик для точного хранения в представлении с плавающей точкой. Следовательно, целевой объект ++ или -- увеличен или уменьшен на значение, значительно отличающееся от единицы, например, на ноль (т. е. целевой объект не изменяется) или на два, из-за округления. Perl выдает это предупреждение, поскольку уже переключился с целых чисел на числа с плавающей точкой, когда значения слишком велики для целых чисел, и теперь даже числа с плавающей точкой недостаточны. Возможно, вам потребуется явно переключиться на использование Math::BigInt.

lstat() для дескриптора файла%s

(W ввод/вывод) Вы попытались выполнить lstat для дескриптора файла. Что вы имели в виду? lstat() имеет смысл только для имен файлов. (Perl выполнил fstat() для дескриптора файла вместо этого.)

Атрибут lvalue %s уже определён для подпрограммы

(W прочие) Хотя attributes.pm позволяет это, включение или выключение атрибута lvalue для подпрограммы Perl, которая уже определена, не всегда работает должным образом. В зависимости от кода внутри подпрограммы, это может или не может сделать то, что вы хотите, с точными деталями, которые могут изменяться между версиями Perl. Делайте это только в том случае, если вы действительно знаете, что делаете.

Атрибут lvalue игнорируется после определения подпрограммы

(W прочие) Использование :lvalue декларативного синтаксиса для превращения подпрограммы Perl в подпрограмму с атрибутом lvalue после её определения не разрешено. Чтобы сделать подпрограмму подпрограммой с атрибутом lvalue, добавьте атрибут lvalue к её определению или поместите объявление sub foo :lvalue; перед определением.

См. также attributes.pm.

Магические списочные константы не поддерживаются

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

Неправильное целое число в [] в pack

(F) В скобках, содержащих числовой счётчик повторений, разрешены только цифры. См. "pack" в perlfunc.

Неправильное целое число в [] в unpack

(F) В скобках, содержащих числовой счётчик повторений, разрешены только цифры. См. "pack" в perlfunc.

Неправильный PERLLIB_PREFIX

(F) Ошибка, специфичная для OS/2. PERLLIB_PREFIX должен иметь вид

prefix1;prefix2

или prefix1 prefix2

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

Неправильный прототип для %s: %s

(F) Вы пытались использовать функцию с неверным прототипом. Синтаксис прототипов функций проверяется на наличие явных ошибок, таких как недопустимые символы. Более строгая проверка проводится при вызове функции. Возможно, автор функции пытался написать подпрограммную сигнатуру, но сначала не активировал эту функцию (use feature 'signatures'), поэтому сигнатура интерпретировалась как неправильный прототип.

Неправильный символ UTF-8%s

(S utf8)(F) Perl обнаружил строку, которая должна быть UTF-8, но не соответствует правилам кодирования UTF-8 или представляет кодовую точку, чей порядковый целочисленный код не подходит к размеру слова текущей платформы (переполнение). Подробные сведения о точной ошибке кодирования приведены в переменной %s, которая является частью сообщения.

Возможной причиной является то, что вы сами установили флаг UTF8 для данных, которые, по вашему мнению, были в UTF-8, но на самом деле им не были (например, это были устаревшие данные с 8-битными кодами). Чтобы обезопаситься от этого, вы можете использовать Encode::decode('UTF-8', ...).

Если вы используете уровень PerlIO :encoding(UTF-8) для ввода, невалидные последовательности байтов обрабатываются корректно, но если вы используете :utf8, флаг устанавливается без проверки данных, что может привести к этому сообщению об ошибке.

См. также "Обработка некорректных данных" в Encode.

Неправильный UTF-8, возвращённый \N{%s} сразу после '%s'

(F) Обработчик charnames вернул некорректный UTF-8.

Некорректная строка UTF-8 в "%s"

(F) Это сообщение указывает на ошибку либо в ядре Perl, либо в XS-коде. Такой код пытался определить, является ли символ, предположительно закодированный в UTF-8, заданного типа, например, знака препинания или цифры. Но символ не был закодирован в соответствии с правилами UTF-8. %s заменяется строкой, которая может помочь знающим людям определить, какой тип проверялся.

Передача некорректных строк была устаревшей в Perl 5.18 и стала фатальной в Perl 5.26.

Некорректная строка UTF-8 в формате '%c' в unpack

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

Некорректная строка UTF-8 в pack

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

Некорректная строка UTF-8 в unpack

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

Неправильный суррогат UTF-16

(F) Perl посчитал, что считывает данные, закодированные в UTF-16, но при этом встретил некорректный суррогат Юникода.

Обязательный параметр следует за необязательным параметром

(F) В сигнатуре подпрограммы вы написали что-то вроде "$a = undef, $b", сделав предыдущий параметр необязательным, а последующий - обязательным. Параметры заполняются слева направо, поэтому вызывающая сторона не может пропустить предыдущий и передать последующий. Если вы хотите, чтобы параметры заполнялись справа налево, объявите самый правый параметр необязательным, а затем переставьте параметры в теле подпрограммы.

Сопоставление не-Unicode кодовой точки 0x%X с свойством Юникода; может быть не переносимым

(S non_unicode) Perl позволяет строкам содержать надмножество кодовых точек Юникода; каждая кодовая точка может быть такой же большой, как хранимая в знаковом целом числе на вашей системе, но эти могут не приниматься другими языками/системами. Это сообщение появляется, когда вы сопоставили строку, содержащую такую кодовую точку, с образцом регулярного выражения, и кодовая точка была сопоставлена с свойством Юникода, \p{...} или \P{...}. Свойства Юникода определены только для кодовых точек Юникода, поэтому результат этого сопоставления не определён Юникодом, но Perl (начиная с версии 5.20) рассматривает не-Unicode кодовые точки, как типичные неопределённые кодовые точки Юникода, и сопоставил их соответствующим образом. Определяется, соответствует ли данное свойство этим кодовым точкам или нет, в "Свойства, доступные через \p{} и \P{}" в perluniprops.

Это сообщение подавляется (если оно не было сделано фатальным), если оно не существенно для результатов сопоставления, если кодовая точка является Unicode или нет. Например, свойство \p{ASCII_Hex_Digit} может сопоставлять только 22 символа [0-9A-Fa-f], поэтому очевидно, что все другие кодовые точки, Unicode или нет, не будут соответствовать ему. (А \P{ASCII_Hex_Digit} будет соответствовать каждой кодовой точке, за исключением этих 22.)

Получение этого сообщения указывает на то, что результат сопоставления, возможно, должен был быть обратным тому, что произошло на самом деле. Если вы думаете, что это так, вы можете сделать категорию предупреждений non_unicode фатальной; если вы согласны с решением Perl, вы можете отключить эту категорию.

См. "За пределами кодовых точек Юникода" в perlunicode для получения дополнительной информации.

%s соответствует пустой строке многократно в регулярном выражении; отмечено <-- HERE в m/%s/

(W regexp) Указанный вами шаблон приведет к бесконечному циклу, если движок регулярных выражений не проверит это специально. <-- ЗДЕСЬ показывает, где в регулярном выражении была обнаружена проблема. См. perlre.

Превышено максимальное количество ожидающих сигналов (%u)

(F) Perl прерван из-за слишком большого количества ожидающих сигналов. Обычно это означает, что ваша операционная система пыталась доставить сигналы слишком быстро (с очень высоким приоритетом), лишая процесс perl ресурсов, необходимых для безопасной обработки сигналов. (См. "Отложенные сигналы (Безопасные сигналы)" в perlipc.)

"%s" может конфликтовать с будущим зарезервированным словом

(W) Это предупреждение может быть вызвано запуском скрипта perl5 через интерпретатор perl4, особенно если слово, о котором идет речь, — "use" или "my".

'%' нельзя использовать в pack

(F) Нельзя упаковать строку, указав контрольную сумму, потому что процесс вычисления контрольной суммы теряет информацию, и нельзя сделать обратное. См. "unpack" в perlfunc.

Метод для операции %s не найден в пакете %s во время благословения

(F) Была предпринята попытка указать запись в таблице перегрузки, которая не разрешается в действительную подпрограмму. См. overload.

метод экспериментальный

(S experimental::class) Это предупреждение выводится, если вы используете ключевое слово method модуля use feature 'class'. Это ключевое слово в настоящее время является экспериментальным, и его поведение может измениться в будущих версиях Perl.

Метод %s запрещен

См. "Ошибка сервера 500".

Метод %s переопределен

(W redefine) Вы переопределили метод. Чтобы подавить это предупреждение, укажите

    {
	no warnings 'redefine';
	*name = method { ... };
    }
Возможно, бесконечная многострочная строка %s, начинающаяся на строке %d

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

Несоответствующие скобки в шаблоне

(F) Шаблон pack не удалось разобрать, потому что пары [...] или (...) не совпали. См. "pack" в perlfunc.

Неправильное расположение _ в числе

(W syntax) Подчеркивание в числовой константе не разделяло две цифры.

Отсутствующий аргумент для %n в %s

(F) В строке формата использовалась %n, но не было соответствующего аргумента для Perl, чтобы записать текущую длину строки.

Отсутствующий аргумент в %s

(W missing) Вы вызвали функцию с меньшим количеством аргументов, чем указано в других аргументах.

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

Отсутствующий аргумент для -%c

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

Отсутствуют фигурные скобки в \N{}
Отсутствуют фигурные скобки в \N{} в регулярном выражении; помечено <-- ЗДЕСЬ в m/%s/

(F) Неправильный синтаксис литерала имени символа \N{charname} в контексте двойных кавычек. Это также может произойти, когда есть пробел (или комментарий) между \N и { в регулярном выражении с модификатором /x. Этот модификатор не изменяет требование о том, что фигурные скобки должны следовать непосредственно за \N.

Отсутствуют фигурные скобки в \o{}

(F) За \o должны немедленно следовать фигурные скобки { в контексте двойных кавычек.

Отсутствует запятая после первого аргумента функции %s

(F) Хотя некоторые функции позволяют вам указать дескриптор файла или «косвенный объект» перед списком аргументов, эта функция к ним не относится.

Отсутствует команда в открытом канале со связкой

(W pipe) Вы использовали конструкцию open(FH, "| command") или open(FH, "command |"), но команда отсутствовала или была пустой.

Отсутствует имя символа управления в \c

(F) Строка с двойными кавычками завершена символом "\c", без необходимого имени символа управления.

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

(W illegalproto) Группировка была начата с [, но не была закрыта с ].

Отсутствует имя в "%s подпрограмме"

(F) Синтаксис лексически-определенных подпрограмм требует, чтобы у них было имя, по которому их можно найти.

Отсутствует $ у переменной цикла

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

(Отсутствующий оператор перед %s?)

(S syntax) Это обоснованное предположение, сделанное в совокупности с сообщением «%s найден там, где ожидался оператор». Часто отсутствующий оператор — это запятая.

Отсутствующий или неопределенный аргумент для %s

(F) Вы попытались вызвать require или do без аргумента или с неопределенным значением в качестве аргумента. Require ожидает либо имя пакета, либо спецификацию файла в качестве аргумента; do ожидает имя файла. См. "require EXPR" в perlfunc и "do EXPR" в perlfunc.

Отсутствующий или неопределенный аргумент для %s через %{^HOOK}{require__before}

(F) Хук %{^HOOK}{require__before} перезаписал имя компилируемого файла с require или do пустой строкой и неопределенным значением, что запрещено. См. "%{^HOOK}" в perlvar и "require EXPR" в perlfunc.

Отсутствует правая фигурная скобка в \%c{} в регулярном выражении; помечено <-- ЗДЕСЬ в m/%s/

(F) Отсутствует правая фигурная скобка в \x{...}, \p{...}, \P{...}, или \N{...}.

Отсутствует правая фигурная скобка в \N{}
Отсутствует правая фигурная скобка в \N{} или незаэкранированная левая фигурная скобка после \N

(F) \N имеет два значения.

Традиционное значение — это имя в фигурных скобках, обозначающее символ (или последовательность символов), заданный этим именем. Таким образом, \N{ASTERISK} — это другой способ записи *, допустимый как в строках с двойными кавычками, так и в шаблонах регулярных выражений. В шаблонах у него нет значения, которое имеет незаэкранированная *.

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

Это может привести к некоторым неоднозначностям. Когда \N не следует сразу за левой фигурной скобкой, Perl предполагает значение [^\n]. Также, если фигурные скобки образуют допустимый квантификатор, например, \N{3} или \N{5,}, Perl предполагает, что это означает соответствие заданному количеству символов, не являющихся символами новой строки (в этих примерах 3; и 5 или более соответственно). Во всех других случаях, где есть \N{ и соответствующая }, Perl предполагает, что нужно имя символа.

Однако, если соответствующая } отсутствует, Perl не знает, была ли она случайно опущена, или предполагалось значение [^\n]{, и выдает эту ошибку. Если вы имели в виду первое, добавьте правую фигурную скобку; если вы имели в виду второе, экранируйте фигурную скобку обратной косой чертой, например: \N\{

Отсутствует правая фигурная или квадратная скобка

(F) Лексер подсчитал больше открытых фигурных или квадратных скобок, чем закрытых. Как правило, вы обнаружите его вблизи места последнего редактирования.

(Отсутствует точка с запятой в предыдущей строке?)

(S syntax) Это обоснованное предположение, сделанное в совокупности с сообщением «%s найден там, где ожидался оператор». Не ставьте автоматически точку с запятой в предыдущей строке только потому, что вы увидели это сообщение.

Попытка изменить значение только для чтения

(F) Вы попытались прямо или косвенно изменить значение константы. Конечно, вы не пытались сделать «2 = 1», потому что компилятор это ловит. Но простой способ сделать то же самое — это:

sub mod { $_[0] = 1 }
mod(2);

Другой способ — присвоить значение substr(), выходящее за пределы строки.

Еще один способ — присвоить значение циклу foreach VAR, когда VAR является псевдонимом константы в цикле LIST:

$x = 1;
foreach my $n ($x, 2) {
    $n *= 2; # modifies the $x, but fails on attempt to
}            # modify the 2

PerlIO::scalar также выведет это сообщение в качестве предупреждения, если вы попытаетесь открыть скаляр только для чтения для записи.

Попытка изменить значение массива, которое нельзя создать, %s

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

Попытка изменить значение хэша, которое нельзя создать, %s

(P) Вы пытались создать значение хэша, и оно не могло быть создано по какой-то причине.

Имя модуля должно быть константой

(F) В качестве первого аргумента для "use" разрешено только простое имя модуля.

Имя модуля требуется с опцией -%c

(F) Опции -M или -m указывают Perl на загрузку некоторого модуля, но вы опустили имя модуля. Обратитесь к perlrun за подробной информацией об опциях -M и -m.

Более одного аргумента для открытия '%s'

(F) Функция open запросила открытие нескольких файлов. Это может произойти, если вы пытаетесь открыть канал к команде, принимающей список аргументов, но забыли указать режим открытия канала. Подробности см. в «open» в perlfunc.

mprotect для строки COW %p %u завершился ошибкой %d

(S) Вы скомпилировали Perl с флагом -DPERL_DEBUG_READONLY_COW (см. «Copy on Write» в perlguts), но буфер общего использования для строки не удалось сделать только для чтения.

mprotect для %p %u завершился ошибкой %d

(S) Вы скомпилировали Perl с флагом -DPERL_DEBUG_READONLY_OPS (см. perlhacktips), но дерево операторов не удалось сделать только для чтения.

mprotect RW для строки COW %p %u завершился ошибкой %d

(S) Вы скомпилировали Perl с флагом -DPERL_DEBUG_READONLY_COW (см. «Copy on Write» в perlguts), но буфер общего использования для строки, предназначенный только для чтения, не удалось сделать изменяемым.

mprotect RW для %p %u завершился ошибкой %d

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

Функция msg%s не реализована

(F) На вашей системе отсутствует IPC сообщений System V.

Многомерный поиск в хеше отключен

(F) Вы предоставили список индексов для поиска в хеше в no feature "multidimensional";, например:

$z = $foo{$x, $y};

что по умолчанию ведет себя как:

$z = $foo{join($;, $x, $y)};
Многомерная синтаксическая конструкция %s не поддерживается

(W синтаксис) Многомерные массивы не записываются как $foo[1,2,3]. Они записываются как $foo[1][2][3], как в C.

Несколько параметров с размытием не разрешены

(F) В подпрограммах параметры с размытием (@ или %) должны быть последними, и их не должно быть более одного; например:

sub foo ($a, @b)    {} # legal
sub foo ($a, @b, %) {} # invalid
Символ «/» должен следовать за числовым типом в unpack

(F) В шаблоне unpack был символ «/», но он не последовал за спецификацией unpack, возвращающей числовое значение. См. «pack» в perlfunc.

%s не должен быть именованной последовательностью в операторе транслитерации

(F) Транслитерация (tr/// и y///) транслитерирует отдельные символы. Но именованная последовательность, по определению, состоит из более одного символа, поэтому её использование в этом операторе не имеет смысла.

"my sub" ещё не реализовано

(F) Лексически-определённые подпрограммы ещё не реализованы. Не пытайтесь их использовать.

Лексически-определённая подпрограмма %s не может быть в пакете

(F) Лексически-определённые подпрограммы не находятся в пакете, поэтому бессмысленно пытаться объявить их с указанием пакета.

"my %s" используется в сравнении для сортировки

(W синтаксис) Переменные пакета $a и $b используются для сравнения в сортировке. Вы использовали $a или $b в качестве операнда для оператора <=> или cmp внутри блока сравнения для сортировки, а переменная ранее была объявлена как лексическая переменная. Либо укажите имя пакета для переменной сортировки, либо переименуйте лексическую переменную.

Лексическая переменная %s не может находиться в пакете

(F) Лексически-определённые переменные не находятся в пакете, поэтому бессмысленно пытаться объявить их с указанием пакета. Используйте local(), если вы хотите локализовать переменную пакета.

Имя "%s::%s" используется только один раз: возможная опечатка

(W один раз) Опечатки часто проявляются как уникальные имена переменных. Если у вас была веская причина для уникального имени, то упомяните его ещё раз, чтобы подавить сообщение. Объявление our также предназначено для этой цели.

ПРИМЕЧАНИЕ: Это предупреждение обнаруживает символы пакета, которые использовались только один раз. Это означает, что лексические переменные никогда не будут вызывать это предупреждение. Это также означает, что все переменные пакета $c, @c, %c, а также *c, &c, sub c{}, c(), и c (файловый дескриптор или формат) считаются одинаковыми; если программа использует $c только один раз, но также использует любые другие, это предупреждение не будет вызвано. Символы, начинающиеся с символа подчёркивания и символы, использующие специальные идентификаторы (см. perldata), исключены из этого предупреждения.

Требуется ровно 3 восьмеричных цифры в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Внутри (?[ ]) все константы, интерпретируемые как восьмеричные, должны иметь ровно 3 цифры. Это помогает выявить некоторые неоднозначности. Если ваша константа слишком короткая, добавьте ведущие нули, например

(?[ [ \078 ] ])     # Syntax error!
(?[ [ \0078 ] ])    # Works
(?[ [ \007 8 ] ])   # Clearer

Максимальное значение, которое может выражать эта конструкция, равно \777. Если вам нужно большее значение, используйте \o{} вместо этого. Если вы имели в виду две отдельные вещи, разделите их:

(?[ [ \7776 ] ])        # Syntax error!
(?[ [ \o{7776} ] ])     # One meaning
(?[ [ \777 6 ] ])       # Another meaning
(?[ [ \777 \006 ] ])    # Still another
Отрицательное значение для подсчёта символа «/» в unpack

(F) Значение длины, полученное из операции unpack длины/кода, было отрицательным. См. «pack» в perlfunc.

Отрицательная длина

(F) Вы попытались выполнить операцию чтения/записи/отправки/приёма с длиной буфера меньше 0. Это трудно представить.

Отрицательный смещение для vec в контексте левого операнда

(F) Когда vec вызывается в контексте левого операнда, второй аргумент должен быть больше или равен нулю.

Отрицательный счёт повторений ничего не делает

(W числовой) Вы попытались выполнить оператор повторения x меньше 0 раз, что не имеет смысла.

Вложенные квантификаторы в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Вы не можете квантифицировать квантификатор без вложенных скобок. Поэтому такие конструкции, как ** или +* или ?*, являются недопустимыми. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема.

Обратите внимание, что минимальные квантификаторы *?, +?, и ?? кажутся вложенными квантификаторами, но таковыми не являются. См. perlre.

%s никогда не был введён

(S внутреннее) Данный символ был объявлен, но по каким-то причинам вышел из области видимости, прежде чем мог быть использован.

next::method/next::can/maybe::next::method не может найти охватывающий метод

(F) next::method необходимо вызывать в контексте реального метода в реальном пакете, и он не смог найти такой контекст. См. mro.

\N в классе символов должен быть именованным символом: \N{...} в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Новое значение (начиная с Perl 5.12) для \N как [^\n] недопустимо в классе символов по той же причине, по которой . в классе символов теряет свою специфичность: оно соответствует почти всему, что, вероятно, не является тем, что вы хотите.

\N{} здесь ограничено одним символом в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Именованные Unicode-символы (\N{...}) могут возвращать последовательность из нескольких символов. Хотя класс символов должен соответствовать одному символу входных данных, Perl будет правильно соответствовать всему, за исключением определенных условий. В настоящее время это:

Когда класс инвертирован ([^...])

Математически логичное поведение для того, что соответствует при инвертировании, сильно отличается от того, чего ожидают люди, поэтому мы решили запретить это.

Эскейп-последовательность является началом или концом диапазона

Аналогично неясно, что должно быть сгенерировано, когда \N{...} используется как одна из конечных точек диапазона, например, в

[\x{41}-\N{ARABIC SEQUENCE YEH WITH HAMZA ABOVE WITH AE}]

Здесь неясно, что подразумевается, так как \N{...} — это последовательность кодовых точек, поэтому это рассматривается как ошибка.

В наборе регулярных выражений

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

Операция %s запрещена во время выполнения скрипта с правами setuid

(F) Некоторые операции считаются слишком небезопасными для скрипта с правами setuid или setgid, чтобы даже пытаться их выполнить. Как правило, есть другой способ сделать то, что вам нужно, который, если не безопасен, то хотя бы может быть сделан безопасным. См. perlsec.

Нет кода, указанного для -%c

(F) Командные опции Perl -e и -E требуют аргумента. Если вы хотите запустить пустую программу, передайте пустую строку в качестве отдельного аргумента или запустите программу, состоящую из одиночной 0 или 1:

perl -e ""
perl -e0
perl -e1
Запятая не разрешена после %s

(F) Оператор списка, имеющий файловый дескриптор или «косвенный объект», не может иметь запятую между ним и последующими аргументами. В противном случае это просто другой аргумент.

Возможной причиной может быть то, что вы ожидали импорта константы в ваше пространство имён с помощью use или import, но такой импорт не произошёл. Например, возможно, ваша операционная система не поддерживает эту константу. Надеемся, вы использовали явный список импортов для констант, которые вы ожидаете увидеть; см. «use» в perlfunc и «import» в perlfunc. Хотя явный список импортов, вероятно, обнаружил бы эту ошибку раньше, он, естественно, не исправляет тот факт, что ваша операционная система всё ещё не поддерживает эту константу. Возможно, у вас есть опечатка в списках символов импортируемых констант в use или import, или в имени константы в строке, где произошла эта ошибка?

Нет команды для перенаправления ввода на командной строке

(F) Ошибка, специфичная для VMS. Perl обрабатывает перенаправление командной строки самостоятельно и обнаружил символ '|' в конце командной строки, поэтому не знает, откуда вы хотите перенаправить вывод этой команды.

Отсутствует процедура DB::DB

(F) Текущий выполняемый код был скомпилирован со флагом -d, но по какой-то причине текущий отладчик (например, perl5db.pl или модуль Devel::) не определил процедуру, которая должна вызываться в начале каждой команды.

Нет модуля dbm на этом компьютере

(P) Это считается внутренней ошибкой, потому что в наши дни каждый компьютер должен иметь модуль dbm, так как Perl поставляется с SDBM. См. SDBM_File.

Отсутствует процедура DB::sub

(F) Текущий выполняемый код был скомпилирован со флагом -d, но по какой-то причине текущий отладчик (например, perl5db.pl или модуль Devel::) не определил DB::sub процедуру, которая должна вызываться в начале каждого вызова обычной подпрограммы.

Не найдены цифры для литерала %s

(F) После 0x не найдено шестнадцатеричных цифр или после 0b не найдено двоичных цифр.

Не указан каталог для -I

(F) Флаг командной строки -I требует указания имени каталога в рамках того же аргумента. Используйте, например, -Ilib. -I lib не сработает.

Нет файла ошибок после 2> или 2>> в командной строке

(F) Ошибка, специфичная для VMS. Perl обрабатывает перенаправление командной строки самостоятельно и обнаружил '2>' или '2>>' в командной строке, но не может найти имя файла, в который нужно записать данные, предназначенные для stderr.

Не найден символ завершения группы '%c' в шаблоне

(F) Шаблон pack или unpack имеет открывающую скобку '(' или '[' без соответствующей закрывающей. См. "pack" в perlfunc.

Нет входного файла после < в командной строке

(F) Ошибка, специфичная для VMS. Perl обрабатывает перенаправление командной строки самостоятельно и обнаружил '<' в командной строке, но не может найти имя файла, из которого нужно читать данные для stdin.

Нет метода next::'%s' для %s

(F) next::method не нашёл дальнейших экземпляров этого имени метода в оставшихся пакетах MRO этого класса. Если вы не хотите, чтобы это вызывало исключение, используйте maybe::next::method или next::can. См. mro.

Бесконечный счёт повторений ничего не делает

(W numeric) Вы пытались выполнить оператор повторения x Inf (или -Inf) или NaN раз, что не имеет смысла.

Нешестнадцатеричный символ в регулярном выражении; отмечен <-- HERE в m/%s/

(F) В регулярном выражении был нешестнадцатеричный символ там, где ожидался шестнадцатеричный, например

(?[ [ \xDG ] ])
(?[ [ \x{DEKA} ] ])
Нешестнадцатеричный символ '%c' прерывает \x преждевременно. Разрешено как "%s"

(W digit) При разборе шестнадцатеричной числовой константы был неожиданно встречен символ, который не является шестнадцатеричным. Результирующее значение указано.

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

Невосьмеричный символ в регулярном выражении; отмечен <-- HERE в m/%s/

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

(?[ [ \o{1278} ] ])
Невосьмеричный символ '%c' прерывает \o преждевременно. Разрешено как "%s"

(W digit) При разборе восьмеричной числовой константы был неожиданно встречен символ, который не является восьмеричным. Результирующее значение указано.

Когда не используется \o{...}, вы написали что-то вроде \08, или \179 в строке с двойными кавычками. Результат указан, все, кроме последней цифры, обрабатываются как один символ, заданный в восьмеричной форме. Последняя цифра — это следующий символ в строке. Чтобы указать Perl, что именно это вы хотите, вы можете использовать синтаксис \o{ }, или использовать ровно три цифры для указания восьмеричного значения символа.

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

"no" не допускается в выражении

(F) Ключевое слово "no" распознаётся и выполняется во время компиляции и не возвращает полезного значения. См. perlmod.

Передан нестроковый аргумент в качестве маски битов

(W misc) В качестве аргумента маски битов для select() передано число. Используйте функцию vec() для построения масок дескрипторов файлов для select. См. "select" в perlfunc.

Нет выходного файла после > в командной строке

(F) Ошибка, специфичная для VMS. Perl обрабатывает перенаправление командной строки самостоятельно и обнаружил одиночный '>' в конце командной строки, поэтому не знает, куда вы хотели перенаправить stdout.

Нет выходного файла после > или >> в командной строке

(F) Ошибка, специфичная для VMS. Perl обрабатывает перенаправление командной строки самостоятельно и обнаружил '>' или '>>' в командной строке, но не может найти имя файла, в который нужно записать данные, предназначенные для stdout.

Не разрешено имя пакета для подпрограммы %s в "our"
Не разрешено имя пакета для переменной %s в "our"

(F) Полностью квалифицированные имена подпрограмм и переменных не допускаются в объявлениях "our", поскольку это не имеет большого смысла в соответствии с существующими правилами. Такой синтаксис зарезервирован для будущих расширений.

В вводе не найден скрипт Perl

(F) Вы вызвали perl -x, но в файле не найдена строка, начинающаяся с #! и содержащая слово "perl".

setregid() недоступен

(F) Configure не нашёл ничего, что напоминало бы вызов setregid() для вашей системы.

setreuid() недоступен

(F) Configure не нашёл ничего, что напоминало бы вызов setreuid() для вашей системы.

Класс %s не найден

(F) Вы указали квалификатор класса в объявлении "my", "our" или "state", но этого класса не существует на данном этапе вашей программы.

Поле "%s" класса не найдено в переменной %s типа %s

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

Нет такого хука: %s

(F) Вы указали обработчик сигнала, который не был распознан Perl. В настоящее время Perl принимает __DIE__ и __WARN__ в качестве допустимых обработчиков сигналов.

Нет такого открытого канала

(P) Ошибка, специфичная для VMS. Внутренняя функция my_pclose() пыталась закрыть канал, который не был открыт. Это должно было быть обнаружено ранее как попытка закрыть неоткрытый дескриптор файла.

Сигнал SIG%s не найден

(W signal) Вы указали имя сигнала в качестве индекса к %SIG, которое не было распознано. Введите kill -l в вашей оболочке, чтобы увидеть допустимые имена сигналов на вашей системе.

Нет совпадений для подстановочного знака значения свойства Юникода:

(W regexp) Вы указали подстановочный знак для значения свойства Юникода, но в текущей версии Юникода нет значения свойства, которое ему соответствует. Проверьте правильность написания.

Не ссылка на процедуру

(F) Perl пытался оценить ссылку на значение кода (то есть подпрограмму), но вместо этого нашёл ссылку на что-то другое. Вы можете использовать функцию ref() для определения, какой тип ссылки это на самом деле. См. также perlref.

Не ссылка на GLOB

(F) Perl пытался оценить ссылку на "typeglob" (то есть запись в таблице символов, похожую на *foo), но вместо этого нашёл ссылку на что-то другое. Вы можете использовать функцию ref() для определения, какой тип ссылки это на самом деле. См. perlref.

Не ссылка на хеш

(F) Perl пытался оценить ссылку на значение хеша, но вместо этого нашёл ссылку на что-то другое. Вы можете использовать функцию ref() для определения, какой тип ссылки это на самом деле. См. perlref.

'#' не допускается сразу после сигила в сигнатуре подпрограммы

(F) В определении сигнатуры подпрограммы комментарий, следующий за сигилом ($, @ или %), должен быть отделён пробелом или запятой и т. д., особенно чтобы избежать путаницы с переменной $#. Например:

# bad
sub f ($# ignore first arg
       , $b) {}
# good
sub f ($, # ignore first arg
       $b) {}
Не ссылка на массив

(F) Perl пытался оценить ссылку на значение массива, но вместо этого нашёл ссылку на что-то другое. Вы можете использовать функцию ref() для определения, какой тип ссылки это на самом деле. См. perlref.

Не ссылка на скаляр

(F) Perl пытался оценить ссылку на значение скаляра, но вместо этого нашёл ссылку на что-то другое. Вы можете использовать функцию ref() для определения, какой тип ссылки это на самом деле. См. perlref.

Не ссылка на подпрограмму

(F) Perl пытался оценить ссылку на значение кода (то есть подпрограмму), но вместо этого нашёл ссылку на что-то другое. Вы можете использовать функцию ref() для определения, какой тип ссылки это на самом деле. См. также perlref.

Не ссылка на подпрограмму в таблице перегрузки

(F) Была сделана попытка указать запись в таблице перегрузки, которая каким-либо образом не указывает на действительную подпрограмму. См. overload.

Недостаточно аргументов для %s

(F) Функция требует больше аргументов, чем вы указали.

Недостаточно аргументов форматирования

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

%s: не найден

(A) Вы случайно запустили свою программу через оболочку Bourne вместо Perl. Проверьте строку #!, или вручную передайте свою программу в Perl.

отсутствует информация о смещении UTC; предполагается, что местное время совпадает с UTC

(S) Предупреждение, специфичное для VMS. Perl не смог найти смещение местного часового пояса, поэтому предполагает, что местное системное время эквивалентно UTC. Если это не так, определите логическое имя SYS$TIMEZONE_DIFFERENTIAL, чтобы перевести в количество секунд, которые нужно добавить к UTC, чтобы получить местное время.

NULL OP В RUN

(S отладка) Внутренняя процедура вызвала run() с указателем нулевого кода операции.

Пустое изображение в formline

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

NULL параметр regexp

(P) Внутренние процедуры сопоставления шаблонов вышли из строя.

Число слишком длинное

(F) Perl ограничивает представление десятичных чисел в программах примерно 250 символами. Вы превысили эту длину. Будущие версии Perl, вероятно, уберут это произвольное ограничение. Тем временем попробуйте использовать научную запись (например, "1e6" вместо "1_000_000").

Число без цифр

(F) Perl искал число, но ничего, что выглядело как число, не нашел. Это происходит, например, с \o{}, если между фигурными скобками нет числа.

Результат числового формата слишком большой

(F) Длина результата числового формата, предоставленного sprintf() или printf(), была бы слишком большой для того, чтобы функция C могла сообщить о ней. Это ограничение обычно составляет 2 ГБ.

Числовые переменные более чем из одной цифры не могут начинаться с '0'

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

Восьмеричное число > 037777777777 непереносимо

(W переносимость) Указанное вами восьмеричное число больше, чем 2**32-1 (4294967295), и поэтому непереносимо между системами. См. perlport для получения дополнительной информации о проблемах переносимости.

Нечетное имя/значение аргумент для подпрограммы '%s'

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

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

Нечетное количество аргументов для overload::constant

(W overload) Вызов overload::constant содержал нечетное количество аргументов. Аргументы должны идти парами.

Нечетное число элементов в анонимном хэше

(W misc) Вы указали нечетное число элементов для инициализации хэша, что странно, потому что хэши состоят из пар ключ/значение.

Нечетное число элементов в export_lexically

(F) Вызов "export_lexically" в builtin содержал нечетное количество аргументов. Это недопустимо, так как каждое имя должно быть спарено со значением ссылки.

Нечетное число элементов в присваивании хэша

(W misc) Вы указали нечетное число элементов для инициализации хэша, что странно, потому что хэши состоят из пар ключ/значение.

Нечетное число элементов в инициализации поля хэша

(W misc) Вы указали нечетное число элементов для инициализации поля хэша объекта. Хэши инициализируются из списка пар ключ/значение, поэтому для каждого ключа должно быть соответствующее значение. Последнее отсутствующее значение будет заполнено undef.

Смещение за пределами строки

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

Старый разделитель пакетов "'" устарел

(W deprecated::apostrophe_as_package_separator, синтаксис) Вы использовали старый разделитель пакетов "'" в имени переменной, подпрограммы или пакета. Поддержка старого разделителя пакетов будет удалена в Perl 5.42.

Старый разделитель пакетов используется в строке

(W deprecated::apostrophe_as_package_separator, синтаксис) Вы использовали старый разделитель пакетов "'" в имени переменной внутри двойной кавычки, например, "In $name's house". Это эквивалентно "In $name::s house". Если вы имели в виду первое, поставьте обратный слэш перед апострофом ("In $name\'s house").

Поддержка старого разделителя пакетов будет удалена в Perl 5.42.

Только скалярные поля могут принимать атрибут :param

(F) Вы попытались применить атрибут :param к массиву или полю хэша. В настоящее время это не разрешено.

%s() на неокрепшем %s

(W неокрепшем) Была предпринята попытка операции ввода-вывода с файловым дескриптором, который никогда не был инициализирован. Вам нужно выполнить вызов open(), sysopen() или socket(), или вызвать конструктор из пакета FileHandle.

-%s на неокрепшем файловом дескрипторе %s

(W неокрепшем) Вы попытались вызвать оператор проверки файла на файловом дескрипторе, который не открыт. Проверьте ваш поток управления. См. также "-X" в perlfunc.

oops: oopsAV

(S внутренний) Внутреннее предупреждение о том, что грамматика испорчена.

oops: oopsHV

(S внутренний) Внутреннее предупреждение о том, что грамматика испорчена.

Операнд без предшествующего оператора в регулярном выражении; помечен <-- HERE в m/%s/

(F) Вы написали что-то вроде

(?[ \p{Digit} \p{Thai} ])

Есть два операнда, но нет оператора, определяющего, как их объединить.

Операция "%s": метод не найден, %s

(F) Была предпринята попытка выполнить перегруженную операцию, для которой не был определен обработчик. Хотя некоторые обработчики могут быть сгенерированы автоматически, нет стандартного обработчика для любой операции, если не указано, что fallback перегрузка включена. См. overload.

Операция "%s" возвращает свой аргумент для не-Unicode кодовой точки 0x%X

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

Если показанная операция — "ToFold", это означает, что в регулярном выражении производилось нечувствительное к регистру сопоставление с кодовой точкой.

Если вы знаете, что делаете, вы можете отключить это предупреждение, используя no warnings 'non_unicode';.

Операция "%s" возвращает свой аргумент для суррогата UTF-16 U+%X

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

Если показанная операция — "ToFold", это означает, что в регулярном выражении производилось нечувствительное к регистру сопоставление с кодовой точкой.

Если вы знаете, что делаете, вы можете отключить это предупреждение, используя no warnings 'surrogate';.

Оператор или точка с запятой отсутствуют перед %s

(S неоднозначно) Вы использовали переменную или вызов подпрограммы там, где синтаксический анализатор ожидал оператора. Синтаксический анализатор предположил, что вы действительно имели в виду оператор, но это, скорее всего, не так. Например, если вы скажете "*foo *foo", это будет интерпретироваться как если бы вы сказали "*foo * 'foo'".

Недостаточно выражения по умолчанию для необязательного параметра

(F) В сигнатуре подпрограммы вы написали что-то вроде "$a =", сделав необязательный параметр с именем без значения по умолчанию. Для безымянного необязательного параметра допускается отсутствие значения по умолчанию, но для именованного параметра необходимо указать конкретное значение по умолчанию. Скорее всего, вам нужно "$a = undef".

"our" переменная %s объявлена повторно

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

Не хватает памяти!

(X) Функция malloc() вернула 0, что указывает на недостаток доступной памяти (или виртуальной памяти) для удовлетворения запроса. Perl не имеет другого выбора, кроме как немедленно завершить выполнение.

По крайней мере в Unix, вы можете обойти это, увеличив лимиты размера данных процесса: в csh/tcsh используйте limit и limit datasize n (где n — это количество килобайт) для проверки текущих лимитов и их изменения, а в ksh/bash/zsh используйте ulimit -a и ulimit -d n, соответственно.

Не хватает памяти во время расширения %s

(X) Была предпринята попытка расширить массив, список или строку за пределы максимального возможного выделения памяти.

Не хватает памяти во время "большого" запроса на %s

(F) Функция malloc() вернула 0, что указывает на недостаток доступной памяти (или виртуальной памяти) для удовлетворения запроса. Однако запрос был достаточно большим (значение по умолчанию во время компиляции — 64 КБ), поэтому существует возможность завершить выполнение, поймав эту ошибку.

Не хватает памяти во время запроса на %s

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

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

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

(F) Вы не можете выделить более 2^31+"небольшого количества" байтов. Эта ошибка, скорее всего, вызвана опечаткой в программе Perl. Например, $arr[time] вместо $arr[$time].

Недостаточно памяти для стека yacc

(F) Парсер yacc хотел увеличить свой стек, чтобы продолжить разбор, но realloc() не предоставил больше памяти, ни виртуальной, ни какой-либо другой.

'.' вне строки в pack

(F) Аргумент для '.' в вашем шаблоне попытался переместить рабочую позицию перед началом формируемой упакованной строки.

'@' вне строки в unpack

(F) У вас был шаблон, который задавал абсолютную позицию вне строки, которая распаковывалась. См. "pack" в perlfunc.

'@' вне строки с повреждённым UTF-8 в unpack

(F) У вас был шаблон, который задавал абсолютную позицию вне строки, которая распаковывалась. Строка, подлежащая распаковке, также была некорректной UTF-8. См. "pack" в perlfunc.

Неверный аргумент перегрузки '%s'

(W overload) Предикат overload получил аргумент, который он не распознал. Возможно, вы ошиблись в написании оператора?

Перегруженная операция разыменования не вернула ссылку

(F) Объект с перегруженным оператором разыменования был разыменован, но перегруженная операция не вернула ссылку. См. overload.

Перегруженный qr не вернул REGEXP

(F) Объект с перегруженной операцией qr использовался в качестве части совпадения, но перегруженная операция не вернула скомпилированный регулярный шаблон. См. overload.

Атрибут пакета %s может конфликтовать со будущим зарезервированным словом: %s

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

Переполнение счётчика повторения pack/unpack

(F) Вы не можете указать счётчик повторений настолько большой, чтобы он переполнял ваши целые числа со знаком. См. "pack" в perlfunc.

Переполнение страницы

(W io) Единственный вызов write() произвёл больше строк, чем может поместиться на странице. См. perlform.

Паника: %s

(P) Внутренняя ошибка.

Паника: попытка вызвать %s в %s

(P) Один из операторов проверки файла вошёл в ветвь кода, которая вызывает функцию, связанную с ACL, но эта функция недоступна на этой платформе. Предыдущие проверки означают, что на этой платформе вступление в эту ветвь должно быть невозможно.

Паника: дочерний псевдопроцесс не был запланирован

(P) Дочерний псевдопроцесс в реализации ithreads на Windows не был запланирован в отведённый интервал времени и, следовательно, не смог должным образом инициализироваться.

Паника: ck_grep, тип=%u

(P) Произошёл сбой внутренней проверки целостности при компиляции grep.

Паника: повреждённый индекс сохранённого стека %ld

(P) Было запрошено восстановление более локальных значений, чем значений в сохранённом стеке.

Паника: del_backref

(P) Произошёл сбой внутренней проверки целостности при попытке сброса слабого указателя.

Паника: fold_constants JMPENV_PUSH вернуло %d

(P) Во время попытки складывания констант было перехвачено исключение, отличное от исключения типа eval.

Паника: frexp: %f

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

Паника: goto, тип=%u, ix=%ld

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

Паника: gp_free не смог освободить указатель на glob

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

Паника: INTERPCASEMOD, %s

(P) Лексер попал в плохое состояние в модификаторе случая.

Паника: INTERPCONCAT, %s

(P) Лексер попал в плохое состояние при разборе строки с фигурными скобками.

Паника: kid popen ошибка errno при чтении

(F) Виртуальный ребёнок вернул непонятное сообщение об errno.

Паника: несоответствие leave_scope %u

(P) Вероятно, стек сохранения синхронизировался неправильно. По крайней мере, на вершине стека было неверное значение перечисления.

Паника: magic_killbackrefs

(P) Неудалась внутренняя проверка целостности при попытке сброса всех слабых ссылок на объект.

Паника: malloc, %s

(P) Что-то запросило отрицательное число байтов для malloc.

Паника: переполнение памяти

(P) Что-то попыталось выделить либо больше памяти, чем возможно, либо отрицательное количество.

Паника: newFORLOOP, %s

(P) Парсер не прошёл внутреннюю проверку целостности при попытке разбора цикла foreach.

Паника: pad_alloc, %p!=%p

(P) Компилятор запутался, какой буфер он выделяет и освобождает для временных переменных и лексических переменных.

Паника: pad_free curpad, %p!=%p

(P) Компилятор запутался, какой буфер он выделяет и освобождает для временных переменных и лексических переменных.

Паника: pad_free po

(P) Внутренне был обнаружен нулевой смещение буфера. Была предпринята попытка освободить целевой объект, который первоначально не был выделен.

Паника: pad_reset curpad, %p!=%p

(P) Компилятор запутался, какой буфер он выделяет и освобождает для временных переменных и лексических переменных.

Паника: pad_sv po

(P) Внутренне было обнаружено нулевое смещение буфера. Вероятно, оператор нуждался в целевом объекте, но этот объект по какой-то причине не был выделен.

Паника: pad_swipe curpad, %p!=%p

(P) Компилятор запутался, какой буфер он выделяет и освобождает для временных переменных и лексических переменных.

Паника: pad_swipe po

(P) Внутренне было обнаружено недопустимое смещение буфера.

Паника: pp_iter, тип=%u

(P) Итератор foreach был вызван не в контексте цикла.

Паника: pp_match%s

(P) Внутренняя функция pp_match() была вызвана с некорректными операционными данными.

Паника: realloc, %s

(P) Что-то запросило отрицательное число байтов для realloc.

Паника: несоответствие счётчика ссылок для nsv в sv_replace() (%d != 1)

(P) Внутренняя функция sv_replace() получила новый SV с количеством ссылок, отличным от 1.

Паника: restartop в %s

(P) Некоторая внутренняя процедура запросила переход (или что-то подобное), но не предоставила пункт назначения.

Паника: return, тип=%u

(P) Мы извлекли контекст из стека в контекст подпрограммы или eval, а затем обнаружили, что это не контекст подпрограммы или eval.

Паника: scan_num, %s

(P) scan_num() был вызван на том, что не является числом.

Паника: Последовательность (?{...}): не найден блок кода в регулярном выражении m/%s/

(P) При компиляции шаблона с вложенными (?{}) или (??{}) блоками кода Perl не смог найти блок кода, который должен был быть уже виден и скомпилирован Perl перед тем, как управление перешло к компилятору регулярных выражений.

Паника: sv_chop %s

(P) Функция sv_chop() получила позицию, которая не находится внутри буфера строки скаляра.

Паника: sv_insert, midend=%p, bigend=%p

(P) Функция sv_insert() получила указание на удаление большего количества символов, чем было в строке.

Паника: top_env

(P) Компилятор попытался выполнить переход, или что-то странное.

Паника: неожиданный постоянный lvalue вход в подпрограмму через тип/targ %d:%d

(P) При компиляции вызова подпрограммы в контексте lvalue Perl не прошёл внутреннюю проверку целостности. Он столкнулся с неправильно сформированным деревом операций.

Паника: нереализованный оператор %s (#%d) вызван

(P) Компилятор сломался и попытался использовать оператор, который не разрешён во время выполнения.

Паника: неизвестный OA_*: %x

(P) Внутренняя процедура, обрабатывающая аргументы вызова подпрограммы &CORE::foo(), не смогла определить ожидаемый тип аргументов.

Паника: utf16_to_utf8: нечётная длина байтов

(P) Что-то попыталось вызвать utf16_to_utf8 с нечётной (вместо чётной) длиной байтов.

Паника: utf16_to_utf8_reversed: нечётная длина байтов

(P) Что-то попыталось вызвать utf16_to_utf8_reversed с нечётной (вместо чётной) длиной байтов.

Паника: yylex, %s

(P) Лексер попал в плохое состояние при обработке модификатора случая.

Пропущенные скобки вокруг списка "%s"

(W parenthesis) Вы сказали что-то вроде

my $foo, $bar = @_;

когда имели в виду

my ($foo, $bar) = @_;

Помните, что "my", "our", "local" и "state" связаны сильнее, чем запятая.

Ошибка внутренней обработки кода (%s)

(F) Парсинг кода, предоставленного расширением, нарушил API парсера в обнаруживаемом способе.

Вложенность подпрограмм шаблона без изменения pos превысила предел в регулярном выражении

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

-p направление вывода: %s

(F) Произошла ошибка во время неявного вывода, вызванного переключателем командной строки -p. (Этот вывод направляется в STDOUT, если вы не перенаправили его с помощью select().)

Версия Perl API %s из %s не соответствует %s

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

Правила свертки Perl не обновлены для 0x%X; пожалуйста, используйте утилиту perlbug для сообщения об ошибке; в регулярном выражении; отмечено <-- HERE в m/%s/

(S regexp) Вы использовали регулярное выражение с нечувствительным к регистру соответствием, и в Perl есть ошибка, в которой встроенные правила свертки регулярных выражений неточны. Это может привести к неправильным результатам. Пожалуйста, сообщите об этом как об ошибке по адресу https://github.com/Perl/perl5/issues/new/choose.

Perl_my_%s() недоступен

(F) Ваша платформа имеет очень необычный порядок байтов и размер целых чисел, поэтому не удалось настроить некоторые или все функции преобразования порядка байтов с фиксированной шириной. Это проблема только тогда, когда вы используете модификаторы '<' или '>' в шаблонах (un)pack. См. "pack" в perlfunc.

Perl %s необходим (вы имели в виду %s?)--это только %s, остановлено

(F) Код, который вы пытаетесь запустить, запросил более новую версию Perl, чем у вас. Возможно, use 5.10 был написан вместо use 5.010 или use v5.10. Без ведущего v, число интерпретируется как десятичное число, при этом каждые три цифры после десятичной точки представляют часть номера версии. Таким образом, 5.10 эквивалентно v5.100.

Perl %s необходим--это только %s, остановлено

(F) Запрашиваемый модуль использует функции версии Perl, более новой, чем текущая. Сколько времени прошло с момента обновления?

См. "require" в perlfunc.

PERL_SH_DIR слишком длинный

(F) Ошибка, специфичная для OS/2. PERL_SH_DIR - это каталог для поиска sh-оболочки. См. "PERL_SH_DIR" в perlos2.

PERL_SIGNALS некорректен: "%s"

(X) См. "PERL_SIGNALS" в perlrun для допустимых значений.

Perl'ы начиная с %s слишком новые--это %s, остановлено

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

perl: предупреждение: Не шестнадцатеричный символ в '$ENV{PERL_HASH_SEED}', семя установлено частично

(S) PERL_HASH_SEED должен соответствовать /^\s*(?:0x)?[0-9a-fA-F]+\s*\z/, но содержал не шестнадцатеричный символ. Это может означать, что вы не используете то семя хеша, которое ожидаете.

perl: предупреждение: Не удалось установить локаль.

(S) Весь текст предупреждения будет примерно таким:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LC_ALL = "En_US",
        LANG = (unset)
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

Точные значения, которые не удалось установить, варьируются. В приведенном примере LC_ALL был "En_US", а LANG не имел значения. Эта ошибка означает, что Perl обнаружил, что вы и/или поставщик вашей операционной системы и/или системный администратор настроили систему локали, но Perl не смог использовать эти настройки. К счастью, это не критическая ошибка: существует "локаль по умолчанию" под названием "C", которую Perl может и будет использовать, и скрипт будет запущен. Однако, прежде чем вы действительно исправите проблему, каждый раз при запуске Perl вы будете получать такое же сообщение об ошибке. Как действительно исправить проблему, можно найти в разделе perllocale под названием ПРОБЛЕМЫ С ЛОКАЛЬЮ.

perl: предупреждение: необычное значение в '$ENV{PERL_PERTURB_KEYS}': '%s'

(S) Perl был запущен с переменной окружения PERL_PERTURB_KEYS, но она содержала неожиданное значение. Допустимые значения этого параметра следующие.

Numeric | String        | Result
--------+---------------+-----------------------------------------
0       | NO            | Disables key traversal randomization
1       | RANDOM        | Enables full key traversal randomization
2       | DETERMINISTIC | Enables repeatable key traversal
        |               | randomization

Принимаются как числовые, так и строковые значения, но обратите внимание, что строковые значения чувствительны к регистру. Значение по умолчанию для этого параметра - "RANDOM" или 1.

pid %x не является дочерним

(W exec) Предупреждение, специфичное для VMS. Waitpid() было попрошено подождать процесс, который не является дочерним процессом текущего процесса. Хотя это нормально с точки зрения VMS, это, вероятно, не то, что вы имели в виду.

'P' должен иметь явное значение размера в unpack

(F) Формат unpack P должен иметь явное значение размера, а не "*".

Неизвестный класс POSIX [:%s:] в регулярном выражении; отмечено <-- HERE в m/%s/

(F) Класс в синтаксисе класса символов [: :] неизвестен. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. Обратите внимание, что классы символов POSIX не имеют префикса is, который есть у соответствующих интерфейсов C: другими словами, это [[:print:]], а не isprint. См. perlre.

POSIX getpgrp не может принять аргумент

(F) Ваша система имеет POSIX getpgrp(), которая не принимает аргумент в отличие от версии BSD, которая принимает pid.

Синтаксис POSIX [%c-%c] должен находиться внутри классов символов%s в регулярном выражении; отмечено <-- HERE в m/%s/

(W regexp) Perl считает, что вы хотели написать класс символов POSIX, но не использовали достаточно скобок. Эти конструкции классов POSIX [: :], [= =] и [. .] идут внутри классов символов, [] являются частью конструкции, например: qr/[012[:alpha:]345]/. Скорее всего, скомпилированное регулярное выражение не соответствует вашим намерениям. Например, qr/[:alpha:]/ компилируется в класс символов в квадратных скобках, состоящий из четырех символов ":", "a", "l", "h", и "p". Для указания класса POSIX необходимо было написать qr/[[:alpha:]]/.

Обратите внимание, что [= =] и [. .] в настоящее время не реализованы; они просто представляют собой заглушки для будущих расширений и приведут к фатальным ошибкам. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.

Если указание класса не было полностью корректным, сообщение об этом указывает.

Синтаксис POSIX [. .] зарезервирован для будущих расширений в регулярном выражении; отмечено <-- HERE в m/%s/

(F) Внутри классов символов регулярных выражений ([]) синтаксис, начинающийся с "[." и заканчивающийся ".\]", зарезервирован для будущих расширений. Если вам нужно представить эти последовательности символов внутри класса символов регулярного выражения, просто укажите квадратные скобки с обратной косой чертой: "\[." и ".\]". <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.

Синтаксис POSIX [= =] зарезервирован для будущих расширений в регулярном выражении; отмечено <-- HERE в m/%s/

(F) Внутри классов символов регулярных выражений ([]) синтаксис, начинающийся с "[=" и заканчивающийся "=]", зарезервирован для будущих расширений. Если вам нужно представить эти последовательности символов внутри класса символов регулярного выражения, просто укажите квадратные скобки с обратной косой чертой: "\[=" и "=\]". <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.

Возможная попытка добавить комментарии в список qw()

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

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

    @list = qw(
	a # a comment
        b # another comment
    );

в то время как нужно было написать это:

    @list = qw(
	a
        b
    );

Если вы действительно хотите комментарии, создайте свой список старым способом, с кавычками и запятыми:

@list = (
    'a',    # a comment
    'b',    # another comment
);
Возможная попытка разделения слов запятыми

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

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

qw! a, b, c !;

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

qw! a b c !;
Возможная ошибка нарушения памяти: %s переполнил 3-й аргумент

(F) Функции ioctl() или fcntl() вернули больше, чем ожидал Perl. Perl предполагает разумный размер буфера, но помещает контрольный байт в конец буфера на случай непредвиденных ситуаций. Этот контрольный байт был поврежден, и Perl предполагает, что память теперь повреждена. См. "ioctl" в perlfunc.

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

(W синтаксис) Возможна проблема с перемешиванием оператора управления потоком (например, return) и оператора с низким приоритетом, например or. Рассмотрите:

sub { return $a or $b; }

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

sub { (return $a) or $b; }

Что по сути равносильно:

sub { return $a; }

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

Обратите внимание, что это также может быть вызвано конструкциями, подобными:

sub { 1 if die; }
Возможная проблема с приоритетом побитового оператора %s

(W приоритет) Ваша программа использует побитовый логический оператор в сочетании с оператором числового сравнения, например так:

if ($x & $y == 0) { ... }

Это выражение фактически эквивалентно $x & ($y == 0), из-за более высокого приоритета ==. Вероятно, это не то, что вы хотите. (Если вы действительно хотели написать это, отключите предупреждение или, лучше, явно поставьте скобки и напишите $x & ($y == 0)).

Возможная нежелательная интерполяция $ в регулярном выражении

(W неоднозначно) Вы что-то вроде m/$\/ в регулярном выражении. Регулярное выражение m/foo$\s+bar/m переводится: найти слово 'foo', разделитель записи вывода (см. "$\" в perlvar) и букву 's' (один или несколько раз) за которым следует слово 'bar'.

Если это то, что вы имели в виду, вы можете отключить предупреждение, используя m/${\}/ (например: m/foo${\}s+bar/).

Если вместо этого вы хотели найти слово 'foo' в конце строки, за которым следует пробел, и слово 'bar' в следующей строке, используйте m/$(?)\/ (например: m/foo$(?)\s+bar/).

Возможная нежелательная интерполяция %s в строке

(W неоднозначно) Вы что-то вроде '@foo' в строке с двойными кавычками, но массив @foo не был в области видимости в то время. Если вы хотели литерал @foo, напишите его как \@foo; в противном случае выясните, что случилось с массивом, о котором вы, по-видимому, потеряли контроль.

Проблема с приоритетом: open %s должен быть open(%s)

(S приоритет) Старая нестандартная конструкция

open FOO || die;

теперь интерпретируется как

open(FOO || die);

из-за строгой регламентации грамматики Perl 5 на унарные и списочные операторы. (Старый open был немного и тем, и другим.) Вы должны поставить скобки вокруг дескриптора файла или использовать новый оператор "или" вместо "||".

Преждевременный конец заголовков скрипта

См. "500 Ошибка сервера".

printf() на закрытом файловом дескрипторе %s

(W закрыто) Файловый дескриптор, в который вы пишете, был закрыт до этого момента. Проверьте поток управления.

print() на закрытом файловом дескрипторе %s

(W закрыто) Файловый дескриптор, на котором вы печатаете, был закрыт до этого момента. Проверьте поток управления.

Процесс завершен SIG%s

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

Прототип после '%c' для %s : %s

(W illegalproto) Символ следует за % или @ в прототипе. Это бесполезно, поскольку % и @ поглощают остальную часть аргументов подпрограммы.

Несоответствие прототипов: %s vs %s

(S прототип) Подпрограмма, которая объявляется или определяется, была ранее объявлена ​​или определена с другим прототипом функции.

Прототип не завершен

(F) Вы опустили закрывающую скобку в определении прототипа функции.

Прототип '%s' переопределен атрибутом 'prototype(%s)' в %s

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

%s в блоке BEGIN игнорируется

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

Квантификатор следует за пустым выражением в регулярном выражении; отмечено <-- HERE в m/%s/

(F) Вы начали регулярное выражение с квантификатора. Замените его обратным слешем, если вы имели в виду литерал. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.

Квантификатор в {,} больше чем %d в регулярном выражении; отмечено <-- HERE в m/%s/

(F) В настоящее время существует ограничение на размер минимального и максимального значений конструкции {min,max}. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.

Квантификатор {n,m} с n > m не может соответствовать в регулярном выражении
Квантификатор {n,m} с n > m не может соответствовать в регулярном выражении; отмечено <-- HERE в m/%s/

(W regexp) Минимальное значение должно быть меньше или равно максимальному. Если вы действительно хотите, чтобы ваше регулярное выражение соответствовало чему-то 0 раз, просто поставьте {0}.

Квантификатор не ожидался на выражении нулевой длины в регулярном выражении m/%s/

(W regexp) Вы применили квантификатор регулярного выражения в месте, где это не имеет смысла, например, к утверждению нулевой ширины. Попробуйте поместить квантификатор внутрь утверждения. Например, способ сопоставить "abc", при условии, что за ним следуют три повторения "xyz", это /abc(?=(?:xyz){3})/, а не /abc(?=xyz){3}/.

Итератор диапазона за пределами диапазона целых чисел

(F) Одно (или оба) числовых аргумента оператора диапазона ".." находятся за пределами диапазона, который может быть представлен целыми числами внутри. Одним из возможных решений является принудительное использование Perl для магического инкремента строк путём добавления "0" перед числами.

Диапазоны ASCII-печать символов должны быть подмножеством "0-9", "A-Z" или "a-z" в регулярном выражении; отмечено <-- HERE в m/%s/

(W regexp) (только под use re 'strict' или в (?[...]))

Более строгие правила помогают находить опечатки и другие ошибки. Возможно, вы даже не имели в виду диапазон здесь, если "-" должно было быть другим символом или должно было быть экранировано (например, "\-"). Если вы имели в виду диапазон, используемый диапазон не переносится между платформами ASCII и EBCDIC и не имеет очевидного смысла для обычного читателя.

[3-7]    # OK; Obvious and portable
[d-g]    # OK; Obvious and portable
[A-Y]    # OK; Obvious and portable
[A-z]    # WRONG; Not portable; not clear what is meant
[a-Z]    # WRONG; Not portable; not clear what is meant
[%-.]    # WRONG; Not portable; not clear what is meant
[\x41-Z] # WRONG; Not portable; not obvious to non-geek

(Вы можете обеспечить переносимость, указав диапазон Unicode, что означает, что конечные точки задаются \N{...}, но смысл может быть по-прежнему не очевиден.) Более строгие правила требуют, чтобы диапазоны, которые начинаются или заканчиваются ASCII-символом, который не является управляющим символом, имели все свои конечные точки в виде буквального символа, а не какой-либо последовательности символов-экранирования (например, "\x41"), и диапазоны должны быть полностью цифрами, или полностью заглавными буквами, или полностью строчными буквами.

Диапазоны цифр должны быть из одной группы в регулярном выражении; отмечено <-- HERE в m/%s/

(W regexp) (только под use re 'strict' или в (?[...]))

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

readdir() попытка на недействительном дескрипторе каталога %s

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

readline() на закрытом файловом дескрипторе %s

(W закрыто) Файловый дескриптор, из которого вы читаете, был закрыт до этого момента. Проверьте поток управления.

readline() на неоткрытом файловом дескрипторе %s

(W неоткрыто) Файловый дескриптор, из которого вы читаете, никогда не открывался. Проверьте поток управления.

read() на закрытом файловом дескрипторе %s

(W закрыто) Вы пытались прочитать из закрытого файлового дескриптора.

read() на неоткрытом файловом дескрипторе %s

(W неоткрыто) Вы пытались прочитать из файлового дескриптора, который никогда не открывался.

realloc() освобожденной памяти проигнорировано

(S malloc) Внутренняя функция realloc() была вызвана на уже освобожденной области памяти.

Перекомпилируйте Perl с -DDEBUGGING, чтобы использовать переключатель -D

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

Рекурсивный вызов Perl_load_module в PerlIO_find_layer

(P) В настоящее время запрещено загружать модули при создании дескриптора файла внутри хука %INC. Это может произойти с open my $fh, '<', \$scalar, который неявно загружает PerlIO::scalar. Попробуйте загрузить PerlIO::scalar явно сначала.

Обнаружено рекурсивное наследование в пакете '%s'

(F) При расчете порядка разрешения методов (MRO) пакета Perl считает, что он обнаружил бесконечный цикл в иерархии @ISA. Это грубое проверка, которая прерывается после 100 уровней глубины @ISA.

Избыточный аргумент в %s

(W избыточно) Вы вызвали функцию с большим количеством аргументов, чем других аргументов, указанных как необходимые. В настоящее время это отображается только в том случае, если формат типа printf потребовал меньше аргументов, чем было предоставлено, но в будущем может использоваться, например, в "pack" в perlfunc.

refcnt_dec: fd %d%s
refcnt: fd %d%s
refcnt_inc: fd %d%s

(P) Реализация ввода-вывода Perl не прошла внутреннюю проверку согласованности. Если вы видите это сообщение, значит, что-то очень не так.

Ссылка найдена там, где ожидался список чётной длины

(W misc) Вы передали единственную ссылку, тогда как Perl ожидал список с чётным количеством элементов (для присваивания в хеш). Это обычно означает, что вы использовали конструктор анонимного хеша вместо скобок. В любом случае, хеш требует пар ключ/значение.

%hash = { one => 1, two => 2, };	# WRONG
%hash = [ qw/ an anon array / ];	# WRONG
%hash = ( one => 1, two => 2, );	# right
%hash = qw( one 1 two 2 );			# also fine
Ссылка уже слабая

(W misc) Вы попытались ослабить ссылку, которая уже слабая. Это не повлияет на результат.

Ссылка не является слабой

(W misc) Вы попытались ослабить ссылку, которая не является слабой. Это не повлияет на результат.

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

(F) Вы использовали \g0 или подобное в регулярном выражении. Вы можете ссылаться на группы захвата только с положительными целыми числами (обычные обратные ссылки) или с отрицательными целыми числами (относительные обратные ссылки). Использование 0 не имеет смысла.

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

(F) Вы использовали что-то вроде \7 в своём регулярном выражении, но в нём нет как минимум семи пар захватывающих скобок. Если вы хотели вставить символ с порядковым номером 7, добавьте нули перед числом, чтобы получить трёхзначное значение: \007

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

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

(F) Вы использовали что-то вроде \k'NAME' или \k<NAME> в своём регулярном выражении, но нет соответствующей именованной группы захвата, такой как (?'NAME'...) или (?<NAME>...). Проверьте, правильно ли написано имя в обратной ссылке и в объявлении.

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

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

(F) Вы использовали что-то вроде \g{-7} в своём регулярном выражении, но в нём нет как минимум семи закрытых пар захватывающих скобок перед местом, где расположена \g{-7}.

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

Повреждение памяти регулярного выражения

(P) Двигатель регулярных выражений запутался из-за того, что сгенерировал компилятор регулярных выражений.

Модификатор регулярного выражения "/%c" может появляться не более двух раз
Модификатор регулярного выражения "%c" может появляться не более двух раз в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) В шаблоне регулярного выражения слишком много вхождений указанного модификатора. Удалите лишние.

Модификатор регулярного выражения "%c" не может появляться после "-" в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

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

Модификатор регулярного выражения "/%c" не может появляться дважды
Модификатор регулярного выражения "%c" не может появляться дважды в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) В шаблоне регулярного выражения слишком много вхождений указанного модификатора. Удалите лишние.

Модификаторы регулярных выражений "/%c" и "/%c" исключают друг друга
Модификаторы регулярного выражения "%c" и "%c" исключают друг друга в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

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

Недостаточно места для регулярного выражения в regex m/%s/

(P) Ошибка «не может произойти», так как safemalloc() должен был поймать её раньше.

Повторяющаяся строка формата никогда не завершится (~~ и @#)

(F) Ваш формат содержит последовательность ~~ повторения до пустой строки и числовое поле, которое никогда не станет пустым, поэтому повторение никогда не завершится. Вы можете использовать ^# вместо этого. См. perlform.

Список замен длиннее списка поиска

(W misc) Вы использовали список замен, который длиннее списка поиска. Следовательно, дополнительные элементы в списке замен бессмысленны.

Отсутствует обязательный параметр '%s' для конструктора %s

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

'(*%s' требует завершающей ':' в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

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

'%s' преобразован в '\o{%s}%d'

Начиная с Perl 5.32, это сообщение больше не генерируется. Вместо этого см. "Недесятичный символ '%c' прерывает \o слишком рано. Преобразован в "%s"". (W misc, regexp) Вы написали что-то вроде \08, или \179 в строке с двойными кавычками. Все, кроме последней цифры, рассматриваются как один символ, указанный в восьмеричной системе. Последняя цифра — это следующий символ в строке. Чтобы сообщить Perl, что вы действительно хотите это сделать, вы можете использовать синтаксис \o{ }, или использовать ровно три цифры для указания восьмеричного значения символа.

Обратный оператор %s=

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

rewinddir() выполняется для недействительного дескриптора каталога %s

(W io) Дескриптор каталога, для которого вы пытаетесь выполнить rewinddir(), либо закрыт, либо не является дескриптором каталога. Проверьте порядок выполнения операций.

Утечка скаляров: %d

(S internal) Что-то пошло не так во внутренней учётной записи скаляров Perl: не все переменные скаляров были освобождены к моменту выхода Perl. Обычно это указывает на утечку памяти, что, конечно, плохо, особенно если программа Perl предназначена для длительной работы.

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

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

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

Значение скаляра @%s{%s} лучше записать как $%s{%s}

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

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

Шаблон поиска не завершен

(F) Лексер не смог найти конечный разделитель конструкции // или m{}. Помните, что разделители в скобках учитывают уровень вложенности. Отсутствие ведущего $ из переменной $m может привести к этой ошибке.

Обратите внимание, что с Perl 5.10.0 // также может быть конструкцией «определено или», а не только пустым шаблоном поиска. Поэтому код, написанный в Perl 5.10.0 или более поздней версии, использующий // как конструкцию «определено или», может быть неправильно интерпретирован Perl до версии 5.10.0 как незавершенный шаблон поиска.

seekdir() выполняется для недействительного дескриптора каталога %s

(W io) Дескриптор каталога, для которого вы пытаетесь выполнить seekdir(), либо закрыт, либо не является дескриптором каталога. Проверьте порядок выполнения операций.

%sseek() для неоткрытого файлового дескриптора

(W unopened) Вы попытались использовать функцию seek() или sysseek() для файлового дескриптора, который либо никогда не был открыт, либо с тех пор был закрыт.

select не реализован

(F) Эта машина не реализует системный вызов select().

Самосвязи массивов и хешей не поддерживаются

(F) Самосвязи массивов и хешей в текущей реализации не поддерживаются.

Похоже, отсутствует точка с запятой

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

semi-panic: попытка дублировать освобождённую строку

(S internal) Внутренняя функция newSVsv() была вызвана для дублирования скаляра, который ранее был помечен как освобождённый.

sem%s не реализован

(F) На вашей системе нет системных семафоров IPC.

send() на закрытом сокете %s

(W закрыто) Сокет, к которому вы отправляете данные, был закрыт до этого момента. Проверьте поток управления.

Последовательность "\c{" недопустима

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

Последовательность (? незавершенная в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Регулярное выражение завершилось незавершенным расширением (?). <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.

Последовательность (?%c...) не реализована в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Предложенное расширение регулярного выражения имеет зарезервированный символ, но еще не реализовано. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.

Последовательность (?%s...) не распознана в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Вы использовали расширение регулярного выражения, которое не имеет смысла. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема. Это может произойти при использовании конструкции (?^...), чтобы указать Perl использовать стандартные модификаторы регулярных выражений, и вы избыточно указали стандартный модификатор. Для других причин см. perlre.

Последовательность (?#... не завершена в регулярном выражении m/%s/

(F) Комментарий в регулярном выражении должен завершаться закрывающей скобкой. Вложенные скобки не допускаются. См. perlre.

Последовательность (?&... не завершена в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Именованная ссылка вида (?&...) отсутствовала заключительная закрывающая скобка после имени. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема.

Последовательность (?%c... не завершена в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Именованная группа вида (?'...') или (?<...>) отсутствовала заключительная закрывающая кавычка или угловая скобка. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема.

Последовательность (%s... не завершена в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Утверждение о поиске вперед (?=...) или (?!...) или утверждение о поиске назад (?<=...) или (?<!...) отсутствовала заключительная закрывающая скобка. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема.

Последовательность (?(%c... не завершена в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Именованная ссылка вида (?('...')...) или (?(<...>)...) отсутствовала заключительная закрывающая кавычка или угловая скобка после имени. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема.

Последовательность (...) не завершена в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Отсутствует соответствующая закрывающая скобка для '('. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема.

Последовательность \%s... не завершена в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Регулярное выражение ожидает обязательного аргумента после escape-последовательности, и он опущен или написан неправильно.

Последовательность (?{...}) не завершена символом ')'

(F) Конец perl-кода, заключённого в {...}, должен быть сразу после символа ')'.

Последовательность (?P>... не завершена в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Именованная ссылка вида (?P>...) отсутствовала заключительная закрывающая скобка после имени. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема.

Последовательность (?P<... не завершена в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Именованная группа вида (?P<...>') отсутствовала заключительная закрывающая угловая скобка. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема.

Последовательность ?P=... не завершена в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Именованная ссылка вида (?P=...) отсутствовала заключительная закрывающая скобка после имени. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема.

Последовательность (?R) не завершена в регулярном выражении m/%s/

(F) Последовательность (?R) или (?0) в регулярном выражении отсутствовала заключительная скобка.

Ошибка сервера 500

(A) Это сообщение об ошибке, обычно отображаемое в окне браузера при попытке выполнения CGI-программы (включая SSI) через веб. Текст фактической ошибки сильно различается в зависимости от сервера. Наиболее часто встречающиеся варианты: "Ошибка сервера 500", "Метод (что-то) не разрешен", "Документ не содержит данных", "Преждевременное завершение заголовков скрипта" и "Не произведено допустимый заголовок".

Это ошибка CGI, а не Perl-ошибка.

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

https://www.perl.org/CGI_MetaFAQ.html
http://www.htmlhelp.org/faq/cgifaq.html
http://www.w3.org/Security/Faq/

Также следует посмотреть perlfaq9.

setegid() не реализовано

(F) Вы пытались назначить $), и ваша операционная система не поддерживает системный вызов setegid() (или эквивалентный), или, по крайней мере, Configure так не считает.

seteuid() не реализовано

(F) Вы пытались назначить $>, и ваша операционная система не поддерживает системный вызов seteuid() (или эквивалентный), или, по крайней мере, Configure так не считает.

setpgrp не принимает аргументы

(F) Ваша система имеет setpgrp() из BSD 4.2, который не принимает аргументы, в отличие от POSIX setpgid(), который принимает идентификатор процесса и идентификатор группы процессов.

setrgid() не реализовано

(F) Вы пытались назначить $(, и ваша операционная система не поддерживает системный вызов setrgid() (или эквивалентный), или, по крайней мере, Configure так не считает.

setruid() не реализовано

(F) Вы пытались назначить $<, и ваша операционная система не поддерживает системный вызов setruid() (или эквивалентный), или, по крайней мере, Configure так не считает.

setsockopt() на закрытом сокете %s

(W закрыто) Вы попытались установить параметр сокета на закрытом сокете. Вы забыли проверить возвращаемое значение вызова socket()? См. "setsockopt" в perlfunc.

Запрещено назначение $/ ссылке на %s

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

В Perl 5.20.0 это было изменено, чтобы точно так же, как назначение переменной $/ undef, за исключением того, что будет выведено это предупреждение.

Рекомендуется изменить ваш код на явное назначение $/ к undef , если вы хотите прочитать весь файл. Начиная с Perl 5.28, назначение $/ ссылке на целое число, которое не является положительным, является фатальной ошибкой.

Запрещено назначение $/ ссылке на %s

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

shm%s не реализовано

(F) В вашей системе нет межпроцессного обмена данными с использованием общей памяти System V.

!=~ должно быть !~

(W синтаксис) Оператор несовпадения — !~, а не !=~. !=~ будет интерпретирован как операторы != (неравно) и ~ (инверсия): вероятно, не то, что вы имели в виду.

/%s/ вероятно следует записать как "%s"

(W синтаксис) Вы использовали шаблон, где Perl ожидал найти строку, как в первом аргументе к join. Perl будет обрабатывать результат соответствия шаблона с $_ как строку, что, вероятно, не соответствует вашим намерениям.

shutdown() на закрытом сокете %s

(W закрыто) Вы попытались выполнить shutdown на закрытом сокете. Кажется, немного излишне.

Обработчик сигнала SIG%s "%s" не определён

(W сигнал) Обработчик сигнала, указанный в %SIG, фактически не существует. Возможно, вы поместили его в неправильный пакет?

Утечка фрагмента памяти из cv %p

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

sleep(%u) слишком большой

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

Параметр slurpy не последний

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

Интеллектуальное сопоставление с неопределённым объектом нарушает инкапсуляцию

(F) Не следует использовать оператор ~~ для объекта, который его не перегружает: Perl отказывается использовать внутреннюю структуру объекта для интеллектуального сопоставления.

Smartmatch устарел

(D deprecated::smartmatch) Это предупреждение выводится, если вы используете оператор интеллектуального сопоставления (~~). Эта функция устарела. В частности, её поведение отмечается как излишне сложное и неинтуитивное, и она будет удалена в Perl 5.42.

К сожалению, ключи хэша должны быть меньше 2**31 байта

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

sort теперь является служебным словом

(F) Старое сообщение об ошибке, с которым практически никто больше не сталкивается. Но до того, как sort стал ключевым словом, люди иногда использовали его как дескриптор файла.

Фильтры источников применяются только к потокам байтов

(F) Вы пытались активировать фильтр источника (обычно, загружая модуль фильтра источника) внутри строки, переданной в eval. Это запрещено в рамках функции unicode_eval. Рассмотрите использование evalbytes вместо этого. См. feature.

splice() смещение за пределами массива

(W misc) Вы пытались указать смещение, которое находилось за пределами массива, переданного splice(). Вместо этого, вставка начнется в конце массива, а не за его пределами. Если это не то, что вы хотите, попробуйте явно расширить массив, присвоив $#array = $offset. См. "splice" в perlfunc.

Цикл split

(P) Цикл split бесконечно повторяется. (Очевидно, цикл split не должен повторяться больше раз, чем есть символов ввода, что и произошло.) См. "split" в perlfunc.

Утверждение, которое вряд ли будет достигнуто

(W exec) Вы выполнили exec() с каким-то утверждением после него, кроме die(). Это почти всегда ошибка, потому что exec() никогда не возвращается, если не было сбоя. Вероятно, вы хотели использовать system() вместо этого, которое возвращает значение. Чтобы подавить это предупреждение, поместите exec() в отдельный блок.

Подпрограмма "state" %s не может находиться в пакете

(F) Подпрограммы с лексическим объявлением не находятся в пакете, поэтому бессмысленно пытаться объявить их с квалификатором пакета.

"state %s" используется в сравнении сортировки

(W синтаксис) Переменные пакета $a и $b используются для сравнения сортировки. Вы использовали $a или $b в качестве операнда к оператору <=> или cmp внутри блока сравнения сортировки, а переменная ранее была объявлена как лексическая переменная. Либо укажите имя пакета для переменной сортировки, либо переименуйте лексическую переменную.

Переменная "state" %s не может находиться в пакете

(F) Лексически объявленные переменные не находятся в пакете, поэтому бессмысленно пытаться объявить их с квалификатором пакета. Используйте local() для локализации переменной пакета.

stat() для неоткрытого дескриптора файла %s

(W неоткрытый) Вы попытались использовать функцию stat() для дескриптора файла, который либо никогда не был открыт, либо с тех пор был закрыт.

Строки с кодовыми точками больше 0xFF могут не быть отображены в оперативной памяти дескрипторов файлов

(W utf8) Вы пытались открыть ссылку на скаляр для чтения или добавления, где скаляр содержал кодовые точки больше 0xFF. Файлы в оперативной памяти моделируют файлы на диске и могут содержать только байты.

Найденный фрагмент при разрешении метода "%s" перегрузки "%s" в пакете "%s"

(P) Разрешение перегрузки через дерево @ISA может быть нарушено фрагментами импорта. Фрагменты никогда не должны создаваться неявно, но явные вызовы к can могут нарушить это.

Атрибуты подпрограммы должны предшествовать её сигнатуре

(F) При включённых сигнатурах подпрограмм, любые её атрибуты должны предшествовать сигнатуре. Обратите внимание, что этот порядок был обратным в версиях 5.22..5.26. Таким образом:

sub foo :lvalue ($a, $b) { ... }  # 5.20 and 5.28 +
sub foo ($a, $b) :lvalue { ... }  # 5.22 .. 5.26
Подпрограмма "&%s" недоступна

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

sub { my sub a {...} sub f { \&a } }

В момент создания f она не может захватить текущую подпрограмму "a", так как анонимная подпрограмма ещё не была создана. Напротив, следующее предупреждение не даст, так как анонимная подпрограмма к этому времени была создана и активна:

sub { my sub a {...} eval 'sub f { \&a }' }->();

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

    sub f {
	my sub a {...}
	sub { eval '\&a' }
    }
    f()->();

Здесь, когда '\&a' в eval компилируется, f() не выполняется в данный момент, поэтому её &a недоступна для захвата.

Подпрограмма "%s" &%s маскирует предыдущее объявление в том же %s

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

Подпрограмма %s определена повторно

(W переопределение) Вы повторно определили подпрограмму. Чтобы подавить это предупреждение, используйте

    {
	no warnings 'redefine';
	eval "sub name { ... }";
    }
Подпрограмма "%s" не останется общей

(W закрытие) Внутренняя (вложенная) именованная подпрограмма ссылается на подпрограмму "my", определённую во внешней именованной подпрограмме.

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

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

Цикл подстановки

(P) Цикл подстановки бесконечно повторяется. (Очевидно, цикл подстановки не должен повторяться больше раз, чем есть символов ввода, что и произошло.) См. обсуждение подстановки в "Regexp Quote-Like Operators" в perlop.

Шаблон подстановки не завершён

(F) Лексер не нашёл внутренний разделитель конструкции s/// или s{}{} . Помните, что разделители в скобках учитывают уровень вложенности. Отсутствие ведущего $ от переменной $s может привести к этой ошибке.

Замена подстановки не завершена

(F) Лексер не смог найти конечный разделитель конструкции s/// или s{}{} . Помните, что разделители в скобках учитывают уровень вложенности. Отсутствие ведущего $ от переменной $s может привести к этой ошибке.

substr за пределами строки

(W substr)(F) Вы попытались обратиться к substr(), который указывает за пределами строки. То есть абсолютное значение смещения было больше длины строки. См. "substr" в perlfunc. Это предупреждение является фатальным, если substr используется в контексте lvalue (например, в левой части присваивания или в качестве аргумента подпрограммы).

sv_upgrade с типа %d до типа %d

(P) Perl попытался принудительно повысить тип SV до типа, который фактически был ниже его текущего типа.

Переключатель (?(условие)... содержит слишком много ветвей в регулярном выражении; отмечен <-- HERE в m/%s/

(F) Конструкция (?(условие)ветвь_если|ветвь_иначе) может иметь не более двух ветвей (ветвь_если и ветвь_иначе). Если вы хотите, чтобы одна или обе содержали чередование, например, используя this|that|other, заключите её в скобки группирования:

(?(condition)(?:this|that|other)|else-clause)

<-- HERE показывает, где в регулярном выражении была обнаружена проблема. См. perlre.

Условие переключателя не распознано в регулярном выражении; отмечено <-- HERE в m/%s/

(F) Часть условия переключателя (?(условие)ветвь_если|ветвь_иначе) неизвестна. Условие должно быть одним из следующих:

(1) (2) ...        true if 1st, 2nd, etc., capture matched
(<NAME>) ('NAME')  true if named capture matched
(?=...) (?<=...)   true if subpattern matches
(?!...) (?<!...)   true if subpattern fails to match
(?{ CODE })        true if code returns a true value
(R)                true if evaluating inside recursion
(R1) (R2) ...      true if directly inside capture group 1, 2, etc.
(R&NAME)           true if directly inside named capture
(DEFINE)           always false; for defining named subpatterns

<-- HERE показывает, где в регулярном выражении была обнаружена проблема. См. perlre.

Переключатель (?(условие)... не завершён в регулярном выражении; отмечен <-- HERE в m/%s/

(F) Вы опустили закрывающую скобку блока (?(condition)...) в шаблоне. Добавьте закрывающую скобку в нужном месте. См. perlre.

переключение эффективного %s не реализовано

(F) Внутри псевдонима use filetest мы не можем переключать реальные и эффективные идентификаторы пользователя или группы.

синтаксическая ошибка

(F) Вероятно, у вас синтаксическая ошибка. Общие причины:

A keyword is misspelled.
A semicolon is missing.
A comma is missing.
An opening or closing parenthesis is missing.
An opening or closing brace is missing.
A closing quote is missing.

Зачастую вместе с сообщением о синтаксической ошибке присутствует дополнительная информация. (Иногда помогает включить -w.) Само сообщение об ошибке часто указывает, где в строке произошла ошибка. Иногда фактическая ошибка находится на несколько токенов раньше, потому что Perl хорошо понимает произвольный ввод. В редких случаях номер строки может быть вводящим в заблуждение, и единственный способ выяснить, что вызывает ошибку, — это вызвать perl -c многократно, каждый раз отрезая половину программы, чтобы посмотреть, исчезла ли ошибка. Это своего рода кибернетическая версия 20 вопросов.

синтаксическая ошибка в строке %d: '%s' неожиданно

(A) Вы случайно запустили свой скрипт через оболочку Bourne, а не Perl. Проверьте строку #!, или введите свой скрипт в Perl вручную.

синтаксическая ошибка в файле %s на строке %d, следующие 2 токена "%s"

(F) Эта ошибка, вероятно, возникает, если вы запускаете скрипт perl5 через интерпретатор perl4, особенно если следующие 2 токена — "use strict" или "my $var" или "our $var".

Синтаксическая ошибка в (?[...]) в регулярном выражении; отмечено <-- HERE в m/%s/

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

%s синтаксис OK

(F) Конечное сообщение об успешном выполнении perl -c.

sysread() для закрытого дескриптора файла %s

(W закрыто) Вы пытались прочитать из закрытого дескриптора файла.

sysread() для неоткрытого дескриптора файла %s

(W не открыто) Вы пытались прочитать из дескриптора файла, который никогда не был открыт.

System V %s не реализован на этой машине

(F) Вы пытались выполнить действие с функцией, начинающейся с "sem", "shm" или "msg", но System V IPC не реализован на вашей машине. На некоторых машинах функциональность может существовать, но не настроена. Обратитесь к документации вашей системы.

syswrite() для закрытого дескриптора файла %s

(W закрыто) Дескриптор файла, в который вы записываете, был закрыт до этого момента. Проверьте ваш поток управления.

-T и -B не реализованы для дескрипторов файлов

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

Цель goto слишком глубоко вложена

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

telldir() для неверного дескриптора каталога %s

(W io) Дескриптор каталога, для которого вы пытались использовать telldir(), закрыт или не является дескриптором каталога. Проверьте свой поток управления.

tell() для неоткрытого дескриптора файла

(W не открыто) Вы пытались использовать функцию tell() для дескриптора файла, который не был открыт или с тех пор был закрыт.

Функция crypt() не реализована из-за чрезмерной паранойи.

(F) Configure не смог найти функцию crypt() на вашей машине, вероятно, потому что ваш поставщик её не предоставил, возможно, потому что они думают, что правительство США считает её секретной, или по крайней мере, они будут продолжать притворяться, что это так. И если вы меня процитируете, я это отрикну.

Экспериментальная функция declared_refs не включена

(F) Чтобы объявить ссылки на переменные, как в my \%x, необходимо сначала включить эту функцию:

no warnings "experimental::declared_refs";
use feature "declared_refs";
Функция %s не реализована

(F) Функция, указанная в сообщении, не реализована на этой архитектуре, согласно результатам тестирования Configure.

Функция private_use находится на стадии эксперимента

(S experimental::private_use) Эта функция является на самом деле закладкой на будущее использование.

stat перед %s не был lstat

(F) Нет смысла проверять текущий буфер stat на наличие ссылки, если последний stat, который записал в буфер stat, уже прошёл ссылку, чтобы добраться до реального файла. Используйте реальное имя файла вместо этого.

Функция Unicode-свойства-масок находится на стадии эксперимента

(S experimental::uniprop_wildcards) Эта функция экспериментальная и её поведение может быть изменено в будущих версиях Perl. См. "Маски в свойствах" в perlunicode.

Атрибут 'unique' может быть применён только к переменным 'our'

(F) Этот атрибут никогда не поддерживался в объявлениях my или sub.

Этот Perl не может сбросить элементы CRTL environ (%s)
Этот Perl не может установить элементы CRTL environ (%s=%s)

(W внутреннее) Предупреждения, специфичные для VMS. Вы пытались изменить или удалить элемент внутреннего массива environ CRTL, но ваша копия Perl не была скомпилирована с CRTL, содержащим функцию setenv(). Вам нужно перекомпилировать Perl с CRTL, который её содержит, или переопределить PERL_ENV_TABLES (см. perlvms), чтобы массив environ не был целью изменения %ENV, которое вызвало предупреждение.

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

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

Это использование my() в ложном условии больше не допускается

(F) Вы использовали объявление, подобное my $x if 0. Существует давняя ошибка в Perl, из-за которой лексическая переменная не очищается при выходе из области видимости, когда её объявление включает ложное условие. Некоторые люди эксплуатировали эту ошибку, чтобы получить что-то вроде статической переменной. Поскольку мы намерены исправить эту ошибку, мы не хотим, чтобы люди полагались на это поведение. Вы можете достичь аналогичного статического эффекта, объявив переменную в отдельном блоке за пределами функции, например

sub f { my $x if 0; return $x++ }

становится

{ my $x; sub f { return $x++ } }

Начиная с perl 5.10.0, вы также можете использовать state переменные, чтобы иметь лексические переменные, инициализируемые только один раз (см. feature):

sub f { state $x; return $x++ }

Это использование my() в ложном условии было устаревшим, начиная с Perl 5.10, и стало фатальной ошибкой в Perl 5.30.

Таймаут ожидания другого потока для определения \p{%s}

(F) В первый раз, когда используется пользовательское свойство ("Пользовательские свойства символов" в perlunicode), его определение ищется и преобразуется во внутреннюю форму для более эффективной обработки в последующих использованиях. Может возникнуть гонка, если два или более потока попытаются выполнить эту обработку почти одновременно. Вместо этого, вокруг этой задачи создаётся критическая секция, блокируя все потоки, кроме одного. Это сообщение означает, что поток, выполняющий преобразование, тратит неожиданно много времени. Таймаут существует только для предотвращения тупика; он достаточно велик, что система, вероятно, перегружена и вот-вот рухнет. Действительного решения, кроме перезагрузки, нет.

times не реализовано

(F) Ваша версия C-библиотеки, по-видимому, не поддерживает times(). Я подозреваю, что вы не работаете под Unix.

"-T" указан в строке #!, он также должен использоваться в командной строке

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

Если скрипт Perl выполняется как команда с помощью механизма #! (или его локального эквивалента), эту ошибку обычно можно исправить, отредактировав строку #!, чтобы опция -%c стала частью первого аргумента Perl: например, измените perl -n -%c на perl -%c -n.

Если скрипт Perl выполняется как perl scriptname, то опция -%c должна присутствовать в командной строке: perl -%c scriptname.

To%s: неверное отображение '%s'

(F) Вы пытались определить пользовательское отображение для lc(), lcfirst(), uc(), или ucfirst() (или их строчных версий), но указали неверное отображение. См. "Пользовательские свойства символов" в perlunicode.

Слишком глубоко вложенные ()-группы

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

Слишком мало аргументов для syscall

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

Слишком мало аргументов для подпрограммы '%s' (получено %d; ожидалось %d)

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

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

Слишком мало аргументов для подпрограммы '%s' (получено %d; ожидалось как минимум %d)

Аналогично предыдущему сообщению, но для подпрограмм, принимающих переменное количество аргументов.

Слишком поздно для опции "-%s"

(X) Строка #! (или её локальный аналог) в скрипте Perl содержит опцию -M, -m или -C.

В случае с -M и -m это ошибка, так как эти опции не предназначены для использования внутри скриптов. Используйте вместо них директиву use.

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

Слишком поздно для выполнения блока %s

(W void) Блок CHECK или INIT определяется во время выполнения, когда возможность их выполнения уже упущена. Возможно, вы загружаете файл с require или do, когда следует использовать use. Или, возможно, вы должны поместить require или do внутри блока BEGIN.

Слишком много аргументов для syscall

(F) Perl поддерживает не более 14 аргументов для syscall().

Слишком много аргументов для %s

(F) Функция требует меньше аргументов, чем вы указали.

Слишком много аргументов для подпрограммы '%s' (получено %d, ожидалось %d)

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

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

Слишком много аргументов для подпрограммы '%s' (получено %d, ожидалось не более %d)

Аналогично предыдущему сообщению, но для подпрограмм, принимающих переменное количество аргументов.

Слишком много вложенных открытых скобок в регулярном выражении; отмечено <-- HERE в m/%s/

(F) Вы превысили количество открытых "(" скобок, которые не сопоставлены с соответствующими закрывающими скобками. Это ограничение предотвращает использование слишком большого объема памяти. Оно изначально равно 1000, но может быть изменено путем изменения значения ${^RE_COMPILE_RECURSION_LIMIT}. Это может потребоваться сделать в блоке BEGIN до компиляции шаблона регулярного выражения.

Слишком много вложенных блоков BEGIN, максимально разрешено %d

(F) Вы выполнили код, в котором слишком много блоков BEGIN вложены друг в друга, как явно в BEGIN{} или неявно в операторах use. Это ограничение по умолчанию довольно велико и обычно не должно превышаться, и возникновение ошибки, вероятно, указывает на серьёзную ошибку в вашем коде. Например, бесконечная рекурсия в блоках eval и BEGIN известна тем, что вызывает эту ошибку.

Если вам известно, что у вас есть веские причины превысить это ограничение, вы можете изменить его, задав значение ${^MAX_NESTED_EVAL_BEGIN_BLOCKS} отличное от 1000.

Слишком много групп захвата (предел %d) в регулярном выражении m/%s/

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

Слишком много )

(A) Вы случайно запустили свой скрипт через csh вместо Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl.

Слишком много (

(A) Вы случайно запустили свой скрипт через csh вместо Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl.

Конец регулярного выражения m/%s/ с неэкранированным обратным слэшем

(F) Регулярное выражение заканчивается неэкранированным обратным слэшем. Экранируйте его. См. perlre.

Шаблон транслитерации не завершён

(F) Лексер не смог найти внутренний разделитель конструкции tr///, tr[][] или y/// или y[][]. Отсутствие ведущего символа $ из переменных $tr или $y может вызвать эту ошибку.

Замена транслитерации не завершена

(F) Лексер не смог найти конечный разделитель конструкции tr///, tr[][], y/// или y[][].

Обработка блока %s::INIT как блока BEGIN в качестве обходного решения

(S) Модуль использует старую версию Module::Install::DSL, что делает небезопасные предположения о времени вызова блоков INIT. Поскольку Module::Install::DSL используется для установки других модулей и его сложно обновить, у нас есть специальное обходное решение для этой проблемы. Если вы не являетесь автором затронутого модуля, можете проигнорировать это предупреждение. Мы выводим его только как проверку.

'%s' заблокирован маской операций

(F) Вы попытались использовать оператор из безопасного отсека, в котором он запрещён. См. Safe.

truncate не реализовано

(F) Ваша машина не реализует механизм усечения файлов, о котором знает Configure.

try/catch экспериментальная функция

(S experimental::try) Это предупреждение выводится, если вы используете синтаксис try и catch. Этот синтаксис в настоящее время является экспериментальным, и его поведение может измениться в будущих выпусках Perl.

try/catch/finally экспериментальная функция

(S experimental::try) Это предупреждение выводится, если вы используете синтаксис try и catch с блоком finally. Этот синтаксис в настоящее время является экспериментальным, и его поведение может измениться в будущих выпусках Perl.

Тип аргумента %d для &CORE::%s должен быть %s

(F) Подпрограмма в пакете CORE требует, чтобы её аргумент был жёсткой ссылкой на данные указанного типа. Перегрузка игнорируется, поэтому ссылка на объект, который не является указанного типа, но тем не менее имеет перегрузку для обработки, всё равно не будет принята.

Тип аргумента %d для %s должен быть %s (а не %s)

(F) Эта функция требует, чтобы аргумент в данной позиции был определённого типа. Массивы должны быть @NAME или @{EXPR}. Хэши должны быть %NAME или %{EXPR}. Неявное разыменование не разрешается — используйте формы {EXPR} для явного разыменования. См. perlref.

umask не реализовано

(F) Ваша машина не реализует функцию umask, и вы попытались использовать её для ограничения прав для себя (EXPR & 0700).

Несбалансированный контекст: %d дополнительных PUSH, чем POP

(S internal) Код выхода обнаружил внутреннее несоответствие в количестве входов и выходов контекстов выполнения.

Несбалансированные сохранения: %d дополнительных сохранений, чем восстановлений

(S internal) Код выхода обнаружил внутреннее несоответствие в количестве временных локализаций.

Несбалансированные области: %d дополнительных ENTER, чем LEAVE

(S internal) Код выхода обнаружил внутреннее несоответствие в количестве входов и выходов блоков.

Несбалансированный счётчик ссылок таблицы строк: (%d) для "%s"

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

Несбалансированные временные переменные: %d дополнительных выделений, чем освобождений

(S internal) Код выхода обнаружил внутреннее несоответствие в количестве выделенных и освобождённых временных скаляров.

Вызван неопределённый формат "%s"

(F) Указанный формат, похоже, не существует. Возможно, он находится в другом пакете? См. perlform.

Вызвана неопределённая подпрограмма сортировки "%s"

(F) Указанная подпрограмма сравнения для сортировки, похоже, не существует. Возможно, она находится в другом пакете? См. "sort" в perlfunc.

Вызвана неопределённая подпрограмма &%s

(F) Указанная подпрограмма не определена или, если она была определена, она была удалена.

Вызвана неопределённая подпрограмма

(F) Анонимная подпрограмма, которую вы пытаетесь вызвать, не определена или, если она была определена, она была удалена.

Неопределённая подпрограмма сортировки

(F) Указанная подпрограмма сравнения сортировки объявлена, но, похоже, ещё не определена. См. "sort" в perlfunc.

Вызван неопределённый основной формат "%s"

(F) Указанный формат, похоже, не существует. Возможно, он находится в другом пакете? См. perlform.

Неопределённое значение присвоено типуглобу

(W misc) Неопределённое значение было присвоено типуглобу, например *foo = undef. Это ничего не делает. Возможно, вы имели в виду undef *foo.

%s: Неопределённая переменная

(A) Вы случайно запустили свой скрипт через csh вместо Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl.

Неэкранированная левая фигурная скобка в регулярном выражении недопустима здесь в регулярном выражении; отмечено в m/%s/

(F) Простое правило, которое нужно запомнить, если вы хотите сопоставить буквенный символ "{" (U+007B LEFT CURLY BRACKET) в шаблоне регулярного выражения, заключается в том, чтобы каким-то образом экранировать каждый буквенный экземпляр. Обычно проще всего предварять его обратной косой чертой, например "\{" или заключить в квадратные скобки ("[{]"). Если разделители шаблона также являются фигурными скобками, любую соответствующую правую фигурную скобку ("}") также необходимо экранировать, чтобы избежать путаницы для анализатора, например,

qr{abc\{def\}ghi}

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

Контексты, в которых не генерируются предупреждения или ошибки:

  • как первый символ в шаблоне или после "^", указывая на привязку соответствия к началу строки.

  • как первый символ после "|", указывающего на альтернативу.

  • как первый символ в скобочной группировке, например

    /foo({bar)/
    /foo(?:{bar)/
  • как первый символ после квантификатора

    /\s*{/
Неэкранированная левая фигурная скобка в регулярном выражении пропускается в регулярном выражении; помечено <-- HERE в m/%s/

(W regexp) Простое правило, которое нужно запомнить, если вы хотите сопоставить буквенный символ "{" (U+007B LEFT CURLY BRACKET) в шаблоне регулярного выражения, заключается в том, чтобы каким-то образом экранировать каждый буквенный экземпляр. Обычно проще всего предварять его обратной косой чертой, например "\{" или заключить в квадратные скобки ("[{]"). Если разделители шаблона также являются фигурными скобками, любую соответствующую правую фигурную скобку ("}") также необходимо экранировать, чтобы избежать путаницы для анализатора, например,

qr{abc\{def\}ghi}

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

Контексты, в которых не генерируются предупреждения или ошибки:

  • как первый символ в шаблоне или после "^" , указывающего на привязку соответствия к началу строки.

  • как первый символ после "|" , указывающего на альтернативу.

  • как первый символ в скобочной группировке, например

    /foo({bar)/
    /foo(?:{bar)/
  • как первый символ после квантификатора

    /\s*{/
Неэкранированный буквенный символ '%c' в регулярном выражении; помечено <-- HERE в m/%s/

(W regexp) (только при use re 'strict')

В рамках use re 'strict' в шаблоне регулярного выражения вы включили неэкранированный } или ], который был интерпретирован буквально. Эти два символа иногда являются метасимволами, а иногда — буквенными символами, в зависимости от того, что предшествует им в шаблоне. Это отличается от аналогичного ), который всегда является метасимволом, если не экранирован.

Это действие на расстоянии, возможно, на большом расстоянии, может привести к тому, что Perl молча неправильно интерпретирует ваши намерения, поэтому при указании дополнительных проверок use re 'strict', генерируется это предупреждение. Если вы имели в виду символ как буквенный, просто подтвердите это Perl, предваряя символ обратной косой чертой или преобразовав его в символьный класс в квадратных скобках (например, [}]). Если вы имели в виду его как закрытие соответствующего [ или {, вам нужно будет просмотреть шаблон, чтобы понять, почему этого не происходит.

Не удалось выполнить unexec(%s в %s)!

(F) Процедура unexec() по какой-то причине завершилась неудачей. Обратитесь к своему местному представителю FSF, который, вероятно, поместил её туда в первую очередь.

Неожиданный бинарный оператор '%c' без предшествующего операнда в регулярном выражении; помечено <-- HERE в m/%s/

(F) У вас было что-то вроде этого:

(?[ | \p{Digit} ])

где "|" — бинарный оператор с операндом справа, но без операнда слева.

Неожиданный символ в регулярном выражении; помечено <-- HERE в m/%s/

(F) У вас было что-то вроде этого:

(?[ z ])

Внутри (?[ ]), буквенные символы не допускаются, если они не находятся внутри внутренней пары квадратных скобок, например

(?[ [ z ] ])

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

Неожиданные символы при парсинге атрибута класса :isa: %s

(F) Вы попытались указать что-то помимо одного имени класса с необязательным последующим номером версии в качестве значения для class :isa атрибута. Это сбило с толку анализатор.

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

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

Неожиданный сбой выхода %d

(S) Был вызван uncaught die(), когда PERL_EXIT_WARN был установлен в PL_exit_flags.

Неожиданная ')' в регулярном выражении; помечено <-- HERE в m/%s/

(F) У вас было что-то вроде этого:

(?[ ( \p{Digit} + ) ])

Символ ")" находится вне места. По-видимому, предполагалось объединить его с цифрами, либо "+" не должно было быть там, или что-то в этом роде. Perl не может понять, что было задумано.

Неожиданный ']' без последующей ')' в (?[... в регулярном выражении; помечено <-- HERE в m/%s/

(F) Во время разбора расширенного символьного класса символ ']' был встречен в точке определения, где единственное допустимое использование ']' — это закрытие определения символьного класса как части '])'. Возможно, вы забыли закрывающую скобку или каким-то образом сбили с толку анализатор.

Неожиданная '(' без предшествующего оператора в регулярном выражении; помечено <-- HERE в m/%s/

(F) У вас было что-то вроде этого:

(?[ \p{Digit} ( \p{Lao} + \p{Thai} ) ])

До "(" должен быть оператор, так как нет указаний о том, как цифры должны быть объединены с символами лао и тайских письменностей.

Символ Unicode-несимвол U+%X не рекомендуется для открытого обмена

(S nonchar) Некоторые кодовые точки, такие как U+FFFE и U+FFFF, определены стандартом Unicode как несимволы. Это законные кодовые точки, но зарезервированы для внутреннего использования, поэтому приложения не должны пытаться их обмениваться. Приложение может вообще не ожидать этих символов, и их получение может привести к ошибкам. Если вы знаете, что делаете, вы можете отключить это предупреждение, используя no warnings 'nonchar';.

Это не совсем "серьёзная" ошибка, но она должна подниматься по умолчанию, даже если предупреждения не включены, и в настоящее время единственный способ сделать это в Perl — пометить её как серьёзную.

Дикий символ свойства Unicode не завершён

(F) Дикий символ свойства Unicode выглядит как шаблон регулярного выражения с разделителями (все внутри фигурных скобок окружающего \p{...}). Закрывающий разделитель для соответствия открывающему не был найден. Если открывающий разделитель экранирован предшествующей обратной косой чертой, закрывающий также должен быть экранирован.

Свойства строк Unicode не реализованы в (?[...]) в регулярном выражении; помечено <-- HERE в m/%s/

(F) Свойство строки Unicode — это свойство, которое расширяется до последовательности нескольких символов. Пример — \p{name=KATAKANA LETTER AINU P}, который состоит из последовательности \N{KATAKANA LETTER SMALL H} и \N{COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK}. Расширенные символьные классы (?[...]) в настоящее время не могут обрабатывать их.

Супплементный символ Unicode U+%X недопустим в UTF-8

(S surrogate) У вас был супплементный символ UTF-16 в контексте, где они не считаются приемлемыми. Эти кодовые точки, между U+D800 и U+DFFF (включительно), используются Unicode только для UTF-16. Однако Perl внутренне допускает все беззнаковые целые кодовые точки (до размера, доступного на вашей платформе), включая супплементы. Но это может вызвать проблемы при вводе или выводе, что, вероятно, и привело к этому сообщению. Если вы действительно-действительно знаете, что делаете, вы можете отключить это предупреждение, используя no warnings 'surrogate';.

Не реализовано

(F) В Perl 5.12 и выше вы выполнили эллипсис. Это простой ...;, предназначенный для того, чтобы позволить вам набросать код, который должен быть написан, но не завершён, подобно следующему:

sub not_done_yet {
  my($self, $arg1, $arg2) = @_;
  ...
}

Если not_done_yet() будет вызван, Perl завершится с ошибкой Unimplemented в строке с ....

Неизвестное имя символа '%s'

(F) Имя, которое вы использовали внутри \N{}, неизвестно Perl. Проверьте правильность написания. Вы можете использовать use charnames ":loose" , чтобы не нужно было быть столь точным относительно пробелов, дефисов и регистра в стандартных именах Unicode. (Любые пользовательские псевдонимы, которые были созданы, должны быть указаны точно, независимо от того, используется ли :loose или нет). Эта ошибка также может произойти, если \N{} не находится в области действия соответствующего use charnames.

Неизвестный конструкт '(*...)' '%s' в регулярном выражении; помечено <-- HERE в m/%s/

(F) За (* последовал символ, который компилятор регулярных выражений не распознаёт. Проверьте написание.

Неизвестная ошибка

(P) Perl собирался вывести сообщение об ошибке в $@, но переменная $@ не существовала, даже после попытки её создать.

Неизвестная категория локали %d
Неизвестная категория локали %d; нельзя установить её на %s

(Категория локали W) Вы использовали категорию локали, которую Perl не распознаёт, поэтому не может выполнить ваш запрос. Проверьте, что вы используете допустимую категорию. Если да, см. "Многопоточность" в perllocale за советом по сообщению об этой ошибке как об ошибке и по модификации Perl локально для удовлетворения ваших потребностей.

Неизвестный режим open() '%s'

(F) Второй аргумент функции open() с тремя аргументами не входит в список допустимых режимов: <, >, >>, +<, +>, +>>, -|, |-, <&, >&.

Неизвестный слой PerlIO "%s"

(W слой) Была предпринята попытка добавить неизвестный слой в систему ввода-вывода Perl. (Слои отвечают за преобразование данных между внешним и внутренним представлениями.) Обратите внимание, что некоторые слои, такие как mmap, не поддерживаются во всех средах. Если ваша программа не запросила явно не удавшуюся операцию, это может быть результатом значения переменной окружения PERLIO.

Неизвестный процесс %x отправил сообщение в prime_env_iter: %s

(P) Ошибка, специфичная для VMS. Perl считывал значения %ENV до итерации по нему, и кто-то вставил сообщение в поток данных, ожидаемый Perl. Кто-то очень запутался или, возможно, пытается подорвать заполнение %ENV Perl для зловредных целей.

Неизвестный модификатор регулярного выражения "/%s"

(F) Буквенно-цифровые символы сразу после закрывающего разделителя шаблона регулярного выражения интерпретируются Perl как флаги модификатора для регулярного выражения. Один из указанных вами недействителен. Это может произойти, если вы не поставили пробел между концом регулярного выражения и последующим буквенно-цифровым оператором:

if ($a =~ /foo/and $bar == 3) { ... }

"a" — это допустимый флаг модификатора, но "n" — нет, и он вызывает эту ошибку. Вероятно, вместо этого имелось в виду:

if ($a =~ /foo/ and $bar == 3) { ... }
Неизвестный подпрагма "re" '%s' (известные: %s)

(W) Вы попытались использовать неизвестный подпрагма прагмы "re".

Неизвестное условие переключения (?(...)) в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Часть условия конструкции (?(условие)если-часть|иначе-часть) неизвестна. Условие должно быть одним из следующих:

(1) (2) ...            true if 1st, 2nd, etc., capture matched
(<NAME>) ('NAME')      true if named capture matched
(?=...) (?<=...)       true if subpattern matches
(*pla:...) (*plb:...)  true if subpattern matches; also
                            (*positive_lookahead:...)
                            (*positive_lookbehind:...)
(*nla:...) (*nlb:...)  true if subpattern fails to match; also
                            (*negative_lookahead:...)
                            (*negative_lookbehind:...)
(?{ CODE })            true if code returns a true value
(R)                    true if evaluating inside recursion
(R1) (R2) ...          true if directly inside capture group 1, 2,
                            etc.
(R&NAME)               true if directly inside named capture
(DEFINE)               always false; for defining named subpatterns

Место проблемы в регулярном выражении показано с помощью <-- ЗДЕСЬ. См. perlre.

Неизвестная буква параметра Unicode '%c'

(F) Вы указали неизвестный параметр Unicode. См. документацию perlrun по переключателю -C для списка известных параметров.

Неизвестное значение параметра Unicode %d

(F) Вы указали неизвестный параметр Unicode. См. документацию perlrun по переключателю -C для списка известных параметров.

Неизвестное имя пользовательского свойства \p{%s}

(F) Вы указали использование свойства внутри \p{...}, которое было синтаксически допустимым пользовательским свойством, но определение для него не было найдено к моменту необходимости продолжения. Проверьте правильность написания. См. "Пользовательские свойства символов" в perlunicode.

Неизвестный шаблон глагола '%s' в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Вы либо допустились ошибки в написании, либо неверно поместили квантификатор * после открывающей фигурной скобки в своём шаблоне. Проверьте шаблон и просмотрите perlre для получения информации о допустимых шаблонах глаголов.

Неизвестная категория предупреждений '%s'

(F) Ошибка, выданная прагмой warnings. Вы указали категорию предупреждений, которая в данный момент неизвестна Perl.

Обратите внимание, что для включения категории предупреждений, зарегистрированной модулем (например, use warnings 'File::Find'), этот модуль должен быть загружен предварительно.

Несовпадающая [ в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Скобки вокруг класса символов должны совпадать. Если вы хотите включить закрывающую скобку в класс символов, экранируйте её или поставьте её первой. Место проблемы в регулярном выражении показано с помощью <-- ЗДЕСЬ. См. perlre.

Несовпадающая ( в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
Несовпадающая ) в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Скобки в регулярных выражениях должны всегда быть сбалансированы. Если вы пользователь vi, то ключ % полезен для поиска соответствующей скобки. Место проблемы в регулярном выражении показано с помощью <-- ЗДЕСЬ. См. perlre.

Несовпадающая правая %s скобка

(F) Лексер подсчитал больше закрывающих фигурных или квадратных скобок, чем открывающих, поэтому, вероятно, вы пропустили соответствующую открывающую скобку. Как общее правило, вы найдете недостающую скобку (так сказать) рядом с последним изменённым местом.

Непроцитированная строка "%s" может конфликтовать с будущим зарезервированным словом

(W зарезервировано) Вы использовали «голое» слово, которое в будущем может быть зарезервированным словом. Лучше заключить такое слово в кавычки или как-то его заглавить или вставить в него подчёркивание. Вы также можете объявить его как подпрограмму.

Нераспознанный символ %s; отмечено <-- ЗДЕСЬ после %s около столбца %d

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

Нераспознанный атрибут класса %s

(F) Вы пытались добавить именованный атрибут к определению class, но Perl не распознаёт имя запрошенного атрибута.

Нераспознанный эскейп \%c в классе символов в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Вы использовали комбинацию обратной косой черты и символа, которая не распознаётся Perl внутри классов символов. Это фатальная ошибка, когда класс символов используется внутри (?[ ]).

Нераспознанный эскейп \%c в классе символов, прошедший через регулярное выражение; отмечено <-- ЗДЕСЬ в m/%s/

(W regexp) Вы использовали комбинацию обратной косой черты и символа, которая не распознаётся Perl внутри классов символов. Символ был понят буквально, но это может измениться в будущей версии Perl. Место, где был обнаружен эскейп, показано с помощью <-- ЗДЕСЬ.

Нераспознанный эскейп \%c, прошедший через

(W misc) Вы использовали комбинацию обратной косой черты и символа, которая не распознаётся Perl. Символ был понят буквально, но это может измениться в будущей версии Perl.

Нераспознанный эскейп \%s, прошедший через регулярное выражение; отмечено <-- ЗДЕСЬ в m/%s/

(W regexp) Вы использовали комбинацию обратной косой черты и символа, которая не распознаётся Perl. Символ(ы) были поняты буквально, но это может измениться в будущей версии Perl. Место, где был обнаружен эскейп, показано с помощью <-- ЗДЕСЬ.

Нераспознанный атрибут поля %s

(F) Вы пытались добавить именованный атрибут к определению field, но Perl не распознаёт имя запрошенного атрибута.

Нераспознанное имя сигнала "%s"

(F) Вы указали имя сигнала для функции kill(), которое не было распознано. Введите kill -l в вашей оболочке, чтобы увидеть допустимые имена сигналов в вашей системе.

Нераспознанный переключатель: -%s (-h покажет допустимые параметры)

(F) Вы указали недопустимый параметр для Perl. Не делайте этого. (Если вы думаете, что не делали этого, проверьте строку #! , чтобы убедиться, что она не передаёт этот неверный параметр от вашего имени.)

Неуспешное выполнение %s с именем файла, содержащим перевод строки

(W перевод строки) Была предпринята попытка выполнить файловую операцию с именем файла, и эта операция завершилась неудачей, ВЕРОЯТНО, потому что имя файла содержало перевод строки, ВЕРОЯТНО, потому что вы забыли удалить перевод строки с помощью chomp(). См. "chomp" в perlfunc.

Вызвана недопустимая функция каталога "%s"

(F) Ваша система не поддерживает opendir() и readdir().

Недопустимая функция %s

(F) Эта машина, по-видимому, не реализует указанную функцию. По крайней мере, Configure так считает.

Недопустимая функция fork

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

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

Неподдерживаемое кодирование скрипта %s

(F) Файл вашей программы начинается с метки порядка байтов Unicode (BOM), которая указывает, что она закодирована в формате Unicode, который Perl не может прочитать.

Вызвана недопустимая функция сокетов "%s"

(F) Ваша машина не поддерживает механизм сокетов Berkeley, или, по крайней мере, Configure так посчитал.

Незавершённый аргумент '(*...' в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Вы использовали шаблон вида (*...:...) но не завершили его ). Исправьте шаблон и повторите попытку.

Незавершенный список атрибутов

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

Незавершённый параметр атрибута в списке атрибутов

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

Незавершённое сжатое целое число

(F) Аргумент для unpack("w",...) был несовместим с форматом сжатого целого числа BER и не мог быть преобразован в целое число. См. "pack" в perlfunc.

Незавершённый конструкт '(*...' в регулярном выражении; помечен <-- HERE в m/%s/

(F) Вы использовали шаблон вида (*...), но не завершили его ). Исправьте шаблон и повторите попытку.

Незавершённый разделитель для документа here

(F) Это сообщение появляется, когда метка документа here имеет начальную кавычку, но отсутствует конечная кавычка. Возможно, вы написали:

<<"foo

вместо:

<<"foo"
Незавершённый шаблон \g... в регулярном выражении; помечен <-- HERE в m/%s/
Незавершённый шаблон \g{...} в регулярном выражении; помечен <-- HERE в m/%s/

(F) В регулярном выражении у вас был \g, за которым не последовал правильный номер группы. В случае с \g{, отсутствует закрывающая фигурная скобка; в противном случае \g должен быть после целого числа. Исправьте шаблон и повторите попытку.

Незавершённый оператор <>

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

Незавершённый аргумент шаблона глагола в регулярном выражении; помечен <-- HERE в m/%s/

(F) Вы использовали шаблон вида (*VERB:ARG), но не завершили его ). Исправьте шаблон и повторите попытку.

Незавершённый шаблон глагола в регулярном выражении; помечен <-- HERE в m/%s/

(F) Вы использовали шаблон вида (*VERB), но не завершили его ). Исправьте шаблон и повторите попытку.

Попытка untie, в то время как %d внутренних ссылок всё ещё существуют

(W untie) Копия объекта, возвращённого из tie (или tied) была всё ещё действительна, когда вызвана untie.

Использование: POSIX::%s(%s)

(F) Вы вызвали функцию POSIX с неверными аргументами. См. "FUNCTIONS" в POSIX для получения дополнительной информации.

Использование: Win32::%s(%s)

(F) Вы вызвали функцию Win32 с неверными аргументами. См. Win32 для получения дополнительной информации.

$[ используется в %s (вы имели в виду $]?)

(W syntax) Вы использовали $[ в сравнении, например:

    if ($[ > 5.006) {
	...
    }

Вероятно, вы хотели использовать $] вместо этого. $[ является основой для индексации массивов. $] - версия Perl в десятичном формате.

Используйте "%s" вместо "%s"

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

Бесполезное присваивание временной переменной

(W misc) Вы присвоили значение подпрограмме lvalue, но то, что вернула подпрограмма, было временным скалярным значением, которое вот-вот будет удалено, поэтому присваивание не имело эффекта.

Бесполезное (?-%s) - не используйте /%s модификатор в регулярном выражении; помечен <-- HERE в m/%s/

(W regexp) Вы использовали внутренний модификатор, такой как (?-o), который не имеет смысла, если его не удалить из всего регулярного выражения:

if ($string =~ /(?-o)$pattern/o) { ... }

должно быть записано как

if ($string =~ /$pattern/) { ... }

<-- HERE указывает местоположение проблемы в регулярном выражении. См. perlre.

Бесполезная локализация %s

(W syntax) Локализация lvalues, таких как local($x=10), допустима, но на самом деле local() в настоящее время не имеет эффекта. Это может измениться в будущем, но пока такой код не рекомендуется.

Бесполезное (?%s) - используйте /%s модификатор в регулярном выражении; помечен <-- HERE в m/%s/

(W regexp) Вы использовали внутренний модификатор, такой как (?o), который не имеет смысла, если не применён ко всему регулярному выражению:

if ($string =~ /(?o)$pattern/) { ... }

должно быть записано как

if ($string =~ /$pattern/o) { ... }

<-- HERE указывает местоположение проблемы в регулярном выражении. См. perlre.

Бесполезное использование атрибута "const"

(W misc) Атрибут const не оказывает никакого влияния, кроме как на прототипы анонимных замыканий. Вы применили его к подпрограмме через attributes.pm. Это полезно только внутри обработчика атрибутов для анонимной подпрограммы.

Бесполезное использование модификатора /d в операторе транслитерации

(W misc) Вы использовали модификатор /d, где список поиска имеет такую же длину, как и список замены. См. perlop для получения дополнительной информации о модификаторе /d.

Бесполезное использование \E

(W misc) У вас есть \E в строке с двойными кавычками без \U, \L или \Q перед ней.

Бесполезное использование модификатора жадности '%c' в регулярном выражении; помечен <-- HERE в m/%s/

(W regexp) Вы указали что-то вроде этого:

qr/a{3}?/
qr/b{1,1}+/

Модификаторы "?" и "+" не имеют никакого эффекта, так как они изменяют, нужно ли соответствовать большему или меньшему количеству, когда есть выбор, а указывая на то, чтобы соответствовать точно заданному числу, не остается места для выбора.

Бесполезное использование %s в скалярном контексте

(W scalar) Вы сделали что-то, единственным интересным возвращаемым значением которого является список без побочных эффектов в скалярном контексте, который не принимает список.

Например

my $x = sort @y;

Это не очень полезно, и Perl в настоящее время оптимизирует это.

Бесполезное использование %s в пустом контексте

(W void) Вы сделали что-то без побочных эффектов в контексте, который ничего не делает с возвращаемым значением, например, оператор, который не возвращает значение из блока, или левая часть оператора скалярной запятой. Очень часто это указывает не на глупость с вашей стороны, а на ошибку Perl при разборе вашей программы так, как вы думали. Например, вы бы получили это, если бы перепутали приоритет C с приоритетом Python и сказали

$one, $two = 1, 2;

вместо

($one, $two) = (1, 2);

Ещё одна распространённая ошибка — использование обычных круглых скобок для построения ссылки на список, когда нужно использовать квадратные или фигурные скобки, например, если вы говорите

$array = (1,2);

вместо

$array = [1,2];

Квадратные скобки явно преобразуют список в скалярное значение, а круглые скобки — нет. Поэтому, когда скобки со списком оцениваются в скалярном контексте, запятая обрабатывается как оператор запятой C, который отбрасывает левый аргумент, а это не то, что вы хотите. См. perlref для получения дополнительной информации по этому вопросу.

Это предупреждение не будет выдаваться для числовых констант, равных 0 или 1, так как они часто используются в операторах, таких как

1 while sub_with_side_effects();

О строковых константах, которые обычно оцениваются как 0 или 1, выдаётся предупреждение.

Бесполезное использование (?-p) в регулярном выражении; помечен <-- HERE в m/%s/

(W regexp) Модификатор p не может быть выключен после установки. Попытка сделать это бесполезна.

Бесполезное использование псевдонима "re"

(W) Вы сделали use re; без каких-либо аргументов. Это не очень полезно.

Бесполезное использование %s без значений

(W syntax) Вы использовали функцию push() или unshift() без аргументов, кроме массива, например, push(@x) или unshift(@foo). Обычно это не оказывает никакого влияния на массив, поэтому совершенно бесполезно. В принципе, push(@tied_array) может иметь какой-то эффект, если массив привязан к классу, который реализует метод PUSH. В таком случае вы можете написать push(@tied_array,()), чтобы избежать этого предупреждения.

"use" недопустим в выражении

(F) Ключевое слово "use" распознаётся и выполняется во время компиляции и не возвращает полезного значения. См. perlmod.

Использование @_ в %s с подпрограммой с сигнатурой является экспериментальным

(S experimental::args_array_with_signatures) В подпрограмме, использующей сигнатуру, было найдено выражение, включающее массив аргументов @_. Это экспериментально, так как взаимодействие между массивом аргументов и обработкой параметров с помощью сигнатур не гарантируется, что останется стабильным в будущих версиях Perl, и такой код следует избегать.

Использование голых << для обозначения <<"" запрещено

(F) Теперь требуется использовать явную форму с кавычками, если вы хотите использовать пустую строку в качестве разделителя документа here.

Использование голого разделителя было устаревшим в Perl 5.000 и является фатальной ошибкой начиная с Perl 5.28.

Использование модификатора /c бессмысленно в s///

(W regexp) Вы использовали модификатор /c в замене. В настоящее время модификатор /c не имеет смысла в операциях замены.

Использование модификатора /c бессмысленно без /g

(W regexp) Вы использовали модификатор /c с операндом регулярного выражения, но не использовали модификатор /g. В настоящее время /c имеет смысл только при использовании /g. (Это может измениться в будущем.)

Использование кодовой точки 0x%s запрещено; допустимый максимум — 0x%X
Использование кодовой точки 0x%s запрещено; допустимый максимум — 0x%X в регулярном выражении; отмечено <-- HERE в m/%s/

(F) Вы использовали кодовую точку, которая не допускается, потому что она слишком велика. Unicode допускает только кодовые точки до 0x10FFFF, но Perl допускает гораздо большие. Более ранние версии Perl допускали кодовые точки выше IV_MAX (0x7FFFFFF на 32-битных платформах, 0x7FFFFFFFFFFFFFFF на 64-битных платформах), однако это может нарушить работу интерпретатора Perl в некоторых конструкциях, вплоть до зависания в некоторых случаях.

Если ваш код должен работать на различных платформах, имейте в виду, что верхний предел зависит от платформы. Он намного больше на 64-битных системах, чем на 32-битных.

Использование кодовых точек за пределами диапазона было устаревшим в Perl 5.24 и стало ошибкой выполнения в Perl 5.28.

Использование each() для хеша после вставки без сброса итератора хеша приводит к неопределённому поведению

(S internal) Поведение each() после вставки неопределённо; оно может пропустить элементы или посетить их более одного раза. Рассмотрите использование keys() вместо each().

Использование := для пустого списка атрибутов запрещено

(F) Конструкция my $x := 42 использовалась для разбора как эквивалентной my $x : = 42 (применение пустого списка атрибутов к $x). Эта конструкция была устарела в версии 5.12.0 и теперь является синтаксической ошибкой, так что := в будущем может быть использована как новый оператор.

Если вам нужен пустой список атрибутов, например, в генераторе кода, добавьте пробел перед =.

Использование %s для локали, отличной от UTF-8, неверно. Предполагается локали UTF-8

(W locale) Вы сопоставляете регулярное выражение с помощью правил локали, и была встречена указанная конструкция. Эта конструкция допустима только для локалей UTF-8, а текущая локали таковой не является. Это бессмысленно. Perl продолжит работу, предполагая локаль Unicode (UTF-8), но результаты, скорее всего, будут неверными.

Использование освобождённого значения в итерации

(F) Возможно, вы изменили итерируемый массив внутри цикла? Эта ошибка обычно вызвана кодом, подобным следующему:

@a = (3,4);
@a = () for (1,2,@a);

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

Использование модификатора /g бессмысленно в split

(W regexp) Вы использовали модификатор /g для шаблона оператора split. Поскольку split всегда пытается многократно сопоставить шаблон, /g не имеет эффекта.

Использование "goto" для перехода в конструкцию устарело

(D deprecated::goto_construct) Использование goto для перехода из внешнего области в внутреннюю устарело и должно быть избегаемо.

Это устарело в Perl 5.12.

Использование '%s' в \p{} или \P{} устарело, потому что: %s

(D deprecated::unicode_property_name) Некоторые свойства устарели в Unicode и в конечном итоге могут быть удалены из стандарта, после чего Perl последуют его изменения. Тем временем это сообщение выводится, чтобы проинформировать вас.

Использование унаследованного AUTOLOAD для неметода %s::%s() больше не разрешено

(F) В качестве случайной особенности, подпрограммы AUTOLOAD рассматривались как методы (с использованием иерархии @ISA), даже когда подпрограммы для загрузки по запросу вызывались как обычные функции (например, Foo::bar()), а не как методы (например, Foo->bar() или $obj->bar()).

Это устарело в Perl 5.004 и стало ошибкой выполнения в Perl 5.28.

Использование %s в формате printf не поддерживается

(F) Вы попытались использовать функцию printf, доступную только из C. Обычно это означает, что есть лучший способ сделать это в Perl.

Использование '%s' устарело как разделитель строк

(D deprecated::delimiter_will_be_paired) Вы использовали данный символ в качестве начального разделителя строки вне области use feature 'extra_paired_delimiters'. Этот символ — зеркальное отображение другого символа Unicode; в рамках этой функции оба считаются парой для разграничения строк. Планируется сделать эту функцию стандартной, в результате чего такое использование станет недопустимым; поэтому это предупреждение.

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

Использование '%s' является экспериментальным как разделитель строк

(S experimental::extra_paired_delimiters) Это предупреждение выводится, если вы используете в качестве разделителя строки один из не-ASCII символов с зеркальным отображением, включённых use feature 'extra_paired_delimiters'. Просто подавите предупреждение, если вы хотите использовать эту функцию, но помните, что вы рискуете использовать экспериментальную функцию, которая может измениться или быть удалена в будущей версии Perl:

Использование %s недопустимо в подшаблонах с подстановочными знаками свойств Unicode в регулярных выражениях; отмечено <-- HERE в m/%s/

(F) Вы использовали подшаблон с подстановочными знаками для значения свойства Unicode, и подшаблон содержал недопустимый элемент. Не все возможности регулярных выражений допустимы в таких подшаблонах, и это одна из них. Перепишите подшаблон, чтобы не использовать проблемную конструкцию. См. "Подстановочные знаки в значениях свойств" в perlunicode.

Использование -l для дескриптора файла%s

(W io) Дескриптор файла представляет собой открытый файл, и при открытии файла он уже перешёл за любой символическую ссылку, которую вы, вероятно, пытаетесь найти. Операция вернула undef. Используйте имя файла вместо этого.

Использование ссылки "%s" в качестве индекса массива

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

Если вы действительно имели в виду это, явным образом преобразуйте ссылку в число, например: $array[0+$ref]. Это предупреждение не выдаётся для перегруженных объектов, однако, так как вы можете перегрузить операторы приведения к числу и к строке, и, следовательно, вы, вероятно, знаете, что делаете.

Использование строк с кодовыми точками свыше 0xFF в качестве аргументов к оператору %s недопустимо

(F) Вы попытались использовать один из операторов поразрядных операций над строками (& или | или ^ или ~ ) со строкой, содержащей кодовую точку свыше 0xFF. Операторы поразрядных операций со строками обрабатывают свои операнды как строки байтов, а значения свыше 0xFF бессмысленны в этом контексте.

Некоторые случаи стали ошибками выполнения в Perl 5.28; другие — в Perl 5.32.

Использование строк с кодовыми точками свыше 0xFF в качестве аргументов к vec запрещено

(F) Вы попытались использовать vec со строкой, содержащей кодовую точку свыше 0xFF, что здесь бессмысленно.

Это стало ошибкой выполнения в Perl 5.32.

Использование заражённых аргументов в %s устарело

(W taint, deprecated) Вы передали system() или exec() несколько аргументов, и по крайней мере один из них заражён. Раньше это было разрешено, но в будущей версии Perl станет ошибкой выполнения. Очистите свои аргументы. См. perlsec.

Использование неназначенной кодовой точки или несамостоятельного графема в качестве разделителя недопустимо

(F) Графем — это то, что носитель языка воспринимает как символ. В Unicode (и, следовательно, в Perl) графем может фактически состоять из нескольких смежных символов, которые вместе образуют полный графем. Например, может быть основной символ, такой как "R", и диакритический знак, такой как «^», которые отображаются как один символ, где диакритический знак нависает над "R". Perl в настоящее время позволяет использовать такие диакритические знаки в качестве разделителей строк, шаблонов и т. д. При отображении диакритический знак будет выглядеть так, как будто он принадлежит символу слева от него. Чтобы перейти к возможности использования графемов в качестве разделителей, мы не можем разрешить использование разделителей, которые сами не являются графемами. Кроме того, разделитель должен быть уже назначен (или известно, что он никогда не будет назначен), чтобы сделать код более будущеустойчивым, так как в противном случае код, который работает сегодня, не сможет компилироваться, если текущий неназначенный разделитель окажется чем-то, что не является самостоятельным графемом. Поскольку Unicode никогда не назначит несимвольных кодовых точек и кодовых точек, превышающих допустимый максимум Unicode, те могут быть разделителями, и их использование является законным.

Использование неинициализированного значения%s

(W uninitialized) Было использовано неопределённое значение, как будто оно было определено. Оно интерпретировалось как "" или 0, но, возможно, это ошибка. Для подавления этого предупреждения присвойте переменным определённые значения.

Чтобы помочь вам определить, что было неопределено, Perl попытается сообщить вам имя переменной (если есть), которая была неопределена. В некоторых случаях это невозможно, поэтому он также сообщит вам, в каком операторе использовалось неопределённое значение. Обратите внимание, что Perl оптимизирует вашу программу, и оператор, отображённый в предупреждении, может не обязательно отображаться буквально в вашей программе. Например, "that $foo" обычно оптимизируется в "that " . $foo, а предупреждение будет относиться к оператору concatenation (.), даже если . нет в вашей программе.

"use re 'strict'" — экспериментальная функция

(S experimental::re_strict) Разные моменты, когда шаблон регулярного выражения компилируется под 'strict', могут измениться в будущих версиях Perl несовместимым образом. Это означает, что шаблон, который компилируется сегодня, может не скомпилироваться в будущей версии Perl. Это предупреждение, чтобы оповестить вас об этом риске.

Использование \x{...} для более чем двух шестнадцатеричных символов в регулярном выражении; отмечено <-- HERE в m/%s/

(F) В регулярном выражении вы указали что-то вроде

(?[ [ \xBEEF ] ])

Perl не уверен, имели ли вы в виду это

(?[ [ \x{BEEF} ] ])

или это

(?[ [ \x{BE} E F ] ])

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

Использование только первого символа, возвращаемого \N{} в классе символов в регулярном выражении; отмечено <-- HERE в m/%s/

(W regexp) Имена символов Юникода (\N{...}) могут возвращать последовательность из нескольких символов. Хотя класс символов должен соответствовать только одному символу входных данных, Perl будет правильно сопоставлять всю последовательность, за исключением случаев, когда класс инвертирован ([^...]) или символ эскейпа находится в начале или конце диапазона. В этих случаях неясно, что должно произойти. В таких обстоятельствах Perl отбрасывает все, кроме первого символа возвращаемой последовательности, что, вероятно, не то, что вы хотите.

Использование только результатов одного символа, возвращаемых \p{} в (?[...]) в регулярном выражении; отмечено <-- HERE в m/%s/

(W regexp) Расширенные классы символов в настоящее время не могут обрабатывать операнды, которые оцениваются более чем в один символ. Эти операнды удаляются из результатов расширения \p{}.

Такая ситуация может произойти, например, в

(?[ \p{name=/KATAKANA/} ])

«БУКВА КАТАКАНА АЙНУ П» — это законное имя Юникода (технически «именованная последовательность»), но фактически это два символа. Вышеприведённое выражение будет сопоставлять только имена Юникода, содержащие КАТАКАНА, которые представляют отдельные символы.

Использование /u для '%s' вместо /%s в регулярном выражении; отмечено <-- HERE в m/%s/

(W regexp) Вы использовали границу Юникода (\b{...} или \B{...}) в части регулярного выражения, где действуют модификаторы набора символов /a или /aa. Эти два модификатора указывают на интерпретацию ASCII, и это не имеет смысла для определения Юникода. Сгенерированное регулярное выражение будет скомпилировано таким образом, что граница будет использовать весь Юникод. Другие части регулярного выражения не будут затронуты.

Использование !~ с %s не имеет смысла

(F) Использование оператора !~ с s///r, tr///r или y///r в настоящее время зарезервировано для будущего использования, так как точное поведение не определено. (Простое возвращение булевого значения, обратного изменённой строке, обычно не очень полезно.)

Замещение UTF-16 U+%X

(S surrogate) У вас было замещение UTF-16 в контексте, где они не считаются допустимыми. Эти коды, между U+D800 и U+DFFF (включительно), используются Юникодом только для UTF-16. Однако Perl внутренне разрешает все беззнаковые целочисленные коды (до предела размера, доступного на вашей платформе), включая суррогаты. Но это может вызвать проблемы при вводе или выводе, откуда, вероятно, и исходит это сообщение. Если вы действительно точно знаете, что делаете, вы можете отключить это предупреждение, используя no warnings 'surrogate';.

Значение %s может быть "0"; проверьте с помощью defined()

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

Значение CLI-символа "%s" слишком длинное

(W misc) Предупреждение, характерное для VMS. Perl попытался прочитать значение элемента %ENV из таблицы символов CLI и обнаружил, что результирующая строка длиннее 1024 символов. Возвращаемое значение было усечено до 1024 символов.

Переменная "%s" недоступна

(W closure) Во время компиляции внутренняя именованная подпрограмма или eval пытается захватить внешнюю лексическую переменную, которая в данный момент недоступна. Это может произойти по двум причинам. Во-первых, внешняя лексическая переменная может быть объявлена во внешней анонимной подпрограмме, которая ещё не создана. (Помните, что именованные подпрограммы создаются на этапе компиляции, а анонимные подпрограммы — на этапе выполнения.) Например,

sub { my $a; sub f { $a } }

В момент создания f она не может захватить текущее значение $a, так как анонимная подпрограмма ещё не создана. Напротив, в следующем случае предупреждение не будет выведено, так как анонимная подпрограмма к этому моменту была создана и активна:

sub { my $a; eval 'sub f { $a }' }->();

Вторая ситуация возникает, когда eval обращается к переменной, которая вышла из области видимости, например,

    sub f {
	my $a;
	sub { eval '$a' }
    }
    f()->();

Здесь, когда переменная '$a' в eval компилируется, f() не выполняется, поэтому её $a недоступен для захвата.

Переменная "%s" не импортирована%s

(S misc) При включённом "use strict" вы ссылались на глобальную переменную, которую, по-видимому, хотели импортировать из другого модуля, поскольку что-то другое с тем же именем (обычно подпрограмма) экспортируется этим модулем. Обычно это означает, что вы поставили не тот символ перед переменной. Также возможно, вы использовали переменную "our", область видимости которой закончилась.

Регулярное выражение с изменяемой длиной обратного просмотра не реализовано в m/%s/

(F) Это сообщение больше не должно отображаться начиная с Perl 5.30. Оно сохранено в этом документе для удобства пользователей, использующих более раннюю версию Perl.

В Perl 5.30 и более ранних версиях обратный просмотр разрешается только для подвыражений, длина которых фиксирована и известна на этапе компиляции. Для положительного обратного просмотра вы можете использовать конструкцию регулярного выражения \K, чтобы получить эквивалентную функциональность. См. (?<=pattern) и \K в perlre.

Начиная с Perl 5.18, существуют неочевидные правила Юникода под /i, которые могут сопоставляться переменным образом, но вы можете не думать, что это возможно. Например, подстрока "ss" может сопоставляться с одним символом LATIN SMALL LETTER SHARP S. Вот полный список текущих правил, влияющих на ASCII-символы:

 ASCII
sequence      Matches single letter under /i
  FF          U+FB00 LATIN SMALL LIGATURE FF
  FFI         U+FB03 LATIN SMALL LIGATURE FFI
  FFL         U+FB04 LATIN SMALL LIGATURE FFL
  FI          U+FB01 LATIN SMALL LIGATURE FI
  FL          U+FB02 LATIN SMALL LIGATURE FL
  SS          U+00DF LATIN SMALL LETTER SHARP S
              U+1E9E LATIN CAPITAL LETTER SHARP S
  ST          U+FB06 LATIN SMALL LIGATURE ST
              U+FB05 LATIN SMALL LIGATURE LONG S T

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

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

(?<![sS]t)
(?<![fF]f[iI])

Это обманывает Perl, чтобы он не сопоставлял лигатуры.

Другой вариант для Perl, начиная с версии 5.16, если вам нужны только ASCII-сопоставления, — добавить модификатор /aa к регулярному выражению. Это исключит все эти неочевидные сопоставления, тем самым устранив это сообщение. Вы также можете сказать

use if $] ge 5.016, re => '/aa';

чтобы применить /aa ко всем регулярным выражениям, скомпилированным в пределах его области видимости. См. re.

Положительный обратный просмотр переменной длины с захватом является экспериментальным в регулярном выражении m/%s/

(W) Положительный обратный просмотр переменной длины с захватом не определён чётко. Это предупреждение информирует вас о том, что вы используете конструкцию, которая может измениться в будущих версиях perl. Подробности см. в документации положительного обратного просмотра в perlre. Вы можете заглушить это предупреждение следующим образом:

no warnings 'experimental::vlb';
Отрицательный обратный просмотр переменной длины с захватом является экспериментальным в регулярном выражении m/%s/

(W) Отрицательный обратный просмотр переменной длины с захватом не определён чётко. Это предупреждение информирует вас о том, что вы используете конструкцию, которая может измениться в будущих версиях perl. Подробности см. в документации отрицательного обратного просмотра в perlre. Вы можете заглушить это предупреждение следующим образом:

no warnings 'experimental::vlb';
Переменная "%s" %s скрывает более раннее объявление в том же %s

(W shadow) Переменная "my", "our" или "state" была повторно объявлена в текущей области видимости или операторе, фактически исключая любой доступ к предыдущему экземпляру. Это практически всегда ошибка в написании. Обратите внимание, что предыдущая переменная будет существовать до конца области видимости или до уничтожения всех ссылок на неё через замыкания.

Синтаксис переменной

(A) Вы случайно выполнили свой скрипт через csh вместо Perl. Проверьте строку #!, или вручную введите свой скрипт в Perl.

Переменная "%s" не будет оставаться общей

(W closure) Внутренняя (вложенная) именованная подпрограмма ссылается на лексическую переменную, определённую во внешней именованной подпрограмме.

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

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

Векторный аргумент не поддерживается в альфа-версиях

(S printf) Формат %vd (s)printf не поддерживает объекты версии с альфа-частями.

Шаблон глагола '%s' имеет обязательный аргумент в регулярном выражении; отмечено <-- HERE в m/%s/

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

Шаблон глагола '%s' не может иметь аргумент в регулярном выражении; отмечено <-- HERE в m/%s/

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

Маркер конфликта системы управления версиями

(F) Парсер обнаружил строку, начинающуюся с <<<<<<<, >>>>>>>, или =======. Возможно, это следы системы управления версиями, оставшиеся после неудачной операции слияния.

Номер версии должен быть константой

(P) При попытке перевести оператор use Module n.n LIST в эквивалентный блок BEGIN была обнаружена внутренняя несогласованность с номером версии.

Строка версии '%s' содержит неверные данные; игнорируется: '%s'

(W misc) Строка версии содержит неверные символы в конце, которые игнорируются.

Предупреждение: что-то не так

(W) Вы передали warn() пустую строку (эквивалент warn "") или вызвали её без аргументов, а $@ было пустым.

Предупреждение: не удалось корректно закрыть дескриптор файла %s

(S) Неявное закрытие, выполненное open(), вызвало ошибку при закрытии. Обычно это означает, что на вашем файловом хранилище закончилось место.

Предупреждение: не удалось корректно закрыть дескриптор файла: %s
Предупреждение: не удалось корректно закрыть дескриптор файла %s: %s

(S io) При неявном закрытии дескриптора файла, когда счётчик ссылок достиг нуля, произошли ошибки, например:

{
    open my $fh, '>', $file  or die "open: '$file': $!\n";
    print $fh $data or die "print: $!";
} # implicit close here

Поскольку различные ошибки могут быть обнаружены только при закрытии (например, буферизация может позволить print в данном примере вернуть true, даже если диск заполнен), игнорировать его результат опасно. Поэтому, когда это происходит неявно, Perl сигнализирует об ошибках предупреждением.

До версии 5.22.0 Perl игнорировал такие ошибки, поэтому общепринятая конструкция, показанная выше, могла привести к скрытой потере данных.

Предупреждение: Использование "%s" без скобок неоднозначно

(S ambiguous) Вы написали унарный оператор, за которым следует то, что выглядит как бинарный оператор, который также мог быть интерпретирован как терм или унарный оператор. Например, если вы знаете, что функция rand имеет необязательный аргумент 1.0, и вы пишете

rand + 5;

вы можете ПОНЯТЬ, что написали то же самое, что и

rand() + 5;

но на самом деле получили

rand(+5);

Поэтому используйте скобки, чтобы указать, что вы имеете в виду.

when устарел

(D deprecated::smartmatch) when зависит от smartmatch, который устарел. Кроме того, у него есть несколько особых случаев, которые могут быть не очевидны, и он будет удалён в Perl 5.42. См. объяснение в "Экспериментальные подробности о given и when" в perlsyn.

Широкий символ в %s

(S utf8) Perl встретил широкий символ (ординалий >255), когда этого не ожидал. Это предупреждение по умолчанию включено для ввода/вывода (например, print).

Если это предупреждение исходит от ввода/вывода, самый простой способ его отключить — добавить уровень :utf8, например, binmode STDOUT, ':utf8'. Другой способ отключить предупреждение — добавить no warnings 'utf8';, но это часто ближе к обходу проблемы. В общем случае необходимо явно указать кодировку для дескриптора файла, см. open и "binmode" в perlfunc.

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

Широкий символ (U+%X) в %s

(W locale) В однобайтовой кодировке (т.е., не UTF-8) был встречен многобайтовый символ. Perl считает этот символ указанным кодовым пунктом Unicode. Сочетание не-UTF-8 кодировок и Unicode опасно. Почти наверняка некоторые символы будут иметь два разных представления. Например, в кодировке ISO 8859-7 (греческий) кодовый пункт 0xC3 представляет собой заглавную Гамму. Но также и 0x393. Это сделает сравнение строк ненадежным.

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

Внутри [] длина '%c' не разрешена

(F) Счётчик в шаблоне (un)pack может быть заменён на [TEMPLATE] только если TEMPLATE всегда соответствует тому же количеству упакованных байтов, которые можно определить только по шаблону. Это невозможно, если он содержит какие-либо коды @, /, U, u, w или *-длину. Измените шаблон.

При попытке разрешить вызов метода %s->%s() не удаётся найти пакет "%s", хотя он указан в @%s::ISA (возможно, вы забыли загрузить "%s"?)

(W syntax) Возможно, @ISA содержит неверно написанное или никогда не загружаемое имя пакета, что может привести к тому, что Perl выберет метод родительского класса по умолчанию для разрешения вызова метода. Если это преднамеренно, вы можете сделать что-то вроде

@Missing::Package::ISA = ();

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

%s() с отрицательным аргументом

(S misc) Некоторые операции не имеют смысла с отрицательными аргументами. Предупреждение выводится, и операция не выполняется.

write() для закрытого дескриптора файла %s

(W closed) Дескриптор файла, в который вы пытаетесь записать, был закрыт до этого момента. Проверьте свой поток управления.

%s "\x%X" не отображается в Unicode

(S utf8) При чтении в разных кодировках Perl пытается отобразить всё в символы Unicode. Прочитанные байты не являются допустимыми в этой кодировке. Например

utf8 "\xE4" does not map to Unicode

если вы пытаетесь прочитать латинскую "a-диарезис" из Latin-1 как UTF-8.

'X' вне строки

(F) У вас был шаблон (un)pack, который указал относительное положение перед началом строки, подлежащей (un)упаковке. См. "pack" в perlfunc.

'x' вне строки в unpack

(F) У вас был шаблон unpack, который указал относительное положение после конца строки, подлежащей распаковке. См. "pack" в perlfunc.

ВЫ ЕЩЁ НЕ ОТКЛЮЧИЛИ СКРИПТЫ С ИЗМЕНЕНИЕМ ИДЕНТИФИКАТОРА В ЯДРЕ!

(F) И вы, вероятно, никогда не сделаете этого, потому что, скорее всего, у вас нет исходников вашего ядра, и ваш поставщик, вероятно, не волнуется о ваших желаниях. Существует уязвимость везде, где у вас есть скрипт с изменением идентификатора, и чтобы её устранить, нужно удалить бит с изменением идентификатора из скрипта, который вы пытаетесь запустить. Чтобы фактически запустить скрипт с изменением идентификатора, лучший вариант — поместить C-оболочку с изменением идентификатора вокруг вашего скрипта.

Вам нужно привести в кавычки "%s"

(W syntax) Вы присвоили имя обработчика сигналов как слово без кавычек. К сожалению, у вас уже объявлена подпрограмма с этим именем, что означает, что Perl 5 попытается вызвать подпрограмму при выполнении присваивания, что, вероятно, не то, что вы хотите. (Если это именно то, что вам нужно, поставьте & перед именем.)

Ваши случайные числа не так уж и случайны

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

Регулярное выражение нулевой длины \N{} помечено <-- HERE в m/%s/

(F) Имена Unicode-символов (\N{...}) могут возвращать последовательность нулевой длины. Такой символ использовался в расширенном классе символов, т.е. (?[...]), или в use re 'strict', что запрещено. Проверьте, что использован правильный символ, и соответствующий обработчик charnames активен. <-- HERE показывает, где в регулярном выражении была обнаружена проблема.

См. также

предупреждения, диагностика.

© 1993–2023 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.38.0/perldiag

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API