Spec-Zone.ru › Perl 5.32

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) означает предупреждение в категории closed.

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

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

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

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

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

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

Алиасинг через ссылку экспериментальный

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

no warnings "experimental::refaliasing";
use feature "refaliasing";
\$x = \$y;
Выделение слишком велико: %x

(X) На компьютере MS-DOS вы не можете выделить более 64К.

'%c' разрешено только после типов %s в %s

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

alpha->numify() приводит к потере данных

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

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

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

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

Чтобы молчаливо интерпретировать это как оператор 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 выполняет перенаправление в командной строке и думает, что вы пытаетесь перенаправить stdout как в файл, так и в конвейер в другую команду. Вам нужно выбрать одно или другое, хотя ничего не мешает вам направлять данные в программу или скрипт 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 вы забыли закрывающую скобку ). (Уровни занимаются преобразованием данных между внешним и внутренним представлениями). 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) Аргумент 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 уменьшил счетчик ссылок скаляра, чтобы проверить, станет ли он нулевым, и обнаружил, что он уже стал нулевым ранее и должен был быть освобожден, и, вероятно, был освобожден. Это может указывать на то, что 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 *).

Неправильный шаблон замены после обработки eval

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

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

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

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

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

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

Неправильный хэш

(P) Одной из внутренних процедур хэширования был передан нулевой указатель HV.

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

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

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

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

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

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

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

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

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

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

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

(P) Внутренний запрос попросил добавить запись в массив в не таблицу символов.

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

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

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

(P) Внутренний запрос попросил добавить запись в дескриптор файла в не таблицу символов.

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

(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::, но компилятор не обнаружил других использований этого пространства имён до этого момента. Возможно, вам нужно предварительно объявить пакет?

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 он столкнулся с логическим именем или определением символа, которое было слишком длинным, поэтому оно было усечено до показанной строки.

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

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

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

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

Невозможно 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 в typeglob

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

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

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

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

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

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

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

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

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

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

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

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

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

Невозможно связать @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.

Нельзя освятить значение, не являющееся ссылкой

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

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

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

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

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

Нельзя вызвать метод "%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" на отсутствие nosuid

(P) По какой-то причине невозможно проверить файловую систему скрипта на отсутствие nosuid.

Невозможно преобразовать %s в %s в %s

(F) Некоторые типы SVs, в частности реальные записи таблицы символов (typeglobs), нельзя заставить перестать быть тем, чем они являются. Поэтому вы не можете сказать:

*foo += 1;

Вы МОЖЕТЕ сказать:

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

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

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

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

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

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

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

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

Невозможно использовать "default" вне топ-капитализатора

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

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

(S) Это предупреждение указывает на ошибку во внутренних механизмах Perl. Perl пытался определить класс (например, LISTOP) определённого оператора и не смог. Это, вероятно, связано с ошибкой в внутренних компонентах 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), рассмотрите использование ограниченной формы псевдонима локали (см. "Псевдоним локали "use locale"" в perllocale) вроде "use locale ':not_characters'".

Обратите внимание, что неудачные операции изменения регистра, выполненные в результате сопоставления с образцом с регистронезависимым /i регулярным выражением, будут показаны в этом предупреждении как имеющие операцию 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) Вызов system(), exec() или piped 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.);

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

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

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

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

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

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

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

(W pipe) Создание дочернего процесса в открытом канале завершилось ошибкой 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" в блок "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 сигнал) Perl обнаружил, что он запускается с сигналом SIGCHLD (иногда известным как SIGCLD) отключенным. Поскольку отключение этого сигнала повлияет на правильное определение статуса завершения дочерних процессов, Perl сбросил сигнал на его значение по умолчанию. Эта ситуация обычно указывает на то, что родительская программа, в которой может выполняться Perl (например, cron), крайне небрежна.

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

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

Нельзя выполнить "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) Вы указали для поиска (или require, или use) файл, который не был найден. Perl ищет файл во всех указанных в @INC расположениях, если в имени файла не указан полный путь. Возможно, вам нужно установить переменную среды PERL5LIB или PERL5OPT, чтобы указать, где находится дополнительная библиотека, или, возможно, скрипту нужно добавить имя библиотеки в @INC. Или, возможно, вы неправильно написали имя файла. См. "require" в perlfunc и lib.

Не найден auto/%s.al в @INC

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

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

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

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

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

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

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

Не найден пакет %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) Вам запрещено назначение значения указанному элементу или попытка изменить его, например, с помощью автоинкремента.

Нельзя изменить несуществующий подстрочный элемент

(P) Внутренняя функция, выполняющая присваивание к substr(), получила NULL.

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

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

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

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

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 inplace) Вы запросили изменение на месте без создания резервной копии. 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 из подпрограммы с левой частью

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

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

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

Нельзя вернуть %s в контекст скаляра с левой частью

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

Не удалось получить информацию о скрипте "%s"

(P) По какой-то причине вы не можете выполнить fstat() для скрипта, хотя он уже открыт. Странно.

Нельзя взять логарифм %g

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

Нельзя взять квадратный корень из %g

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

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

(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 практически бесполезными, поэтому теперь генерируется ошибка.

Если вам нужна проверка на непустоту, то просто поместите её в контекст булевых значений (см. "Scalar values" в 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 блокирует для предотвращения случайного выполнения. См. "Symbolic references" в perlref. Это может быть вызвано @ или $ в строке с двойными кавычками непосредственно перед интерполяцией переменной, например, в "user @$twitter_id", что говорит о том, чтобы рассматривать содержимое $twitter_id как ссылку на массив; используйте \ для указания буквального символа @, за которым следует содержимое $twitter_id: "user \@$twitter_id".

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

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

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

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

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

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

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

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

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

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

Символ, следующий за "\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}. См. "CUSTOM ALIASES" в charnames.

Определения псевдонимов charnames не должны содержать заключительных пробелов; отмечено <-- HERE в %s

(F) Вы определили имя символа, которое заканчивалось пробелом. Удалите заключительный пробел(ы). Обычно эти имена определяются в аргументе импорта :alias для use charnames, но они могут быть определены установленным переводчиком в $^H{charnames}. См. "CUSTOM ALIASES" в charnames.

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

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

"\c%c" можно проще записать как "%s"

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

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

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

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

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

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

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

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

(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 использует это универсальное сообщение, когда ни одна из обнаруженных ошибок не была достаточно серьёзной, чтобы немедленно остановить компиляцию.

Превышен предел рекурсии сложных подвыражений регулярного выражения (%d)

(W regexp) Двигатель регулярных выражений использует рекурсию в сложных ситуациях, когда требуется обратное следование. Глубина рекурсии ограничена 32766, а возможно, и меньше на архитектурах, где стек не может неограниченно расти. («Простые» и «средние» ситуации обрабатываются без рекурсии и не ограничены лимитом.) Попробуйте сократить строку, подлежащую проверке; использовать циклы в коде Perl (например, с while) вместо двигателя регулярных выражений; или переписать регулярное выражение так, чтобы оно было проще или меньше обращается к обратной трассировке. (См. perlfaq2 для информации об освоении регулярных выражений.)

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

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

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

(F) Подпрограмма, зарегистрированная для обработки перегрузки констант (см. overload) или обработчик пользовательских имён символов (см. "CUSTOM TRANSLATORS" в charnames) вернула неопределённое значение.

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

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

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

(F) Константа (возможно, объявленная с помощью use constant pragma) обращается по ссылке, но это приводит к ссылке неправильного типа. Сообщение указывает ожидаемый тип ссылки. Обычно это указывает на синтаксическую ошибку в обращении к ссылке на константу. См. "Constant Functions" в 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) Вы переопределили подпрограмму, которая ранее была пригодна для встраивания. См. "Constant Functions" в perlsub для комментариев и обходных путей.

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

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

Константа(%s) неизвестна

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

: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.

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

(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 рекурсия) Эта подпрограмма вызвала себя (прямо или косвенно) более чем в 100 раз больше, чем вернулась. Вероятно, это указывает на бесконечную рекурсию, если только вы не пишете странные программы для бенчмарков, в которых случае это указывает на что-то другое.

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

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

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

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

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

(F) Вы сказали что-то вроде «использовать модуль 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"}
Разделитель для документа здесь слишком длинный

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

Устаревшее использование my() в ложном условии. Это станет фатальной ошибкой в Perl 5.30

(D устаревшее) Вы использовали объявление, аналогичное 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.

DESTROY создал новую ссылку на объект «%s», который только что был уничтожен

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

Не создан допустимый заголовок

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

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

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

(Вы имели в виду &%s вместо этого?)

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

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

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

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

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

Умер

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

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

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

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

(F) Вы сказали что-то вроде «использовать модуль 42», но модуль не определил $VERSION.

'/' не принимает счетчик повторений

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

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

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

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

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

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

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

do_study: недостаточно памяти

(P) Это должно было быть поймано safemalloc() вместо этого.

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

(S синтаксис) Это обоснованное предположение, сделанное в сочетании с сообщением «%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.

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

(S синтаксис) В 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.

Вход в эффективное %s не удался

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

%ENV проименовано как %s

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

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

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

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

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

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

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

Eval-group не разрешен, используйте re 'eval' в regex m/%s/

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

EVAL без изменения pos превысил лимит в regex; помечено <-- HERE в m/%s/

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

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

Чрезмерно длинный оператор <>

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

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

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

%sВыполнение %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 выход) Вы выходите из eval нестандартным способом, например, с помощью goto или оператора управления циклом.

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

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

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

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

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

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

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

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

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

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

(?13

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

Ожидается интерполированная расширенная группа символов в regex; помечено <-- 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) Чтобы использовать подписи подпрограмм, необходимо их включить:

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

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

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

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

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

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

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

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

Ложный диапазон [] "%s" в regex; помечено <-- HERE в m/%s/

(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) Связанный массив утверждал, что имеет отрицательное количество элементов, что невозможно.

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

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

File::Glob::glob() исчезнет в perl 5.30. Используйте File::Glob::bsd_glob() вместо него.

(D устаревшее) File::Glob имеет функцию glob, которая просто вызывает bsd_glob. Однако ее прототип отличается от прототипа CORE::glob, и поэтому File::Glob::glob не следует использовать.

File::Glob::glob() устарела в perl 5.8.0. Сообщение об устаревании было выпущено начиная с perl 5.26.0, и функция исчезнет в perl 5.30.0.

Код, использующий File::Glob::glob(), должен вызывать File::Glob::bsd_glob() вместо него.

Файловое описание %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.

Конечный $ должен быть \$ или $имя

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

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

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

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

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

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

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

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

(W синтаксис) Вы написали

if ($foo = 123)

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

if ($foo == 123)

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

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

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

gdbm store returned %d, errno %d, key "%s"

(S) Предупреждение расширения GDBM_File о том, что операция store завершилась неудачно.

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

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

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

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

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

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

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

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

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

(S experimental::smartmatch) given зависит от smartmatch, который является экспериментальным, поэтому его поведение может измениться или даже быть удалено в будущих выпусках perl. См. объяснение в "Экспериментальные детали по given и when" в perlsyn.

Глобальный символ "%s" требует явного имени пакета (вы забыли объявить "my %s"?)

(F) Вы указали "use strict" или "use strict vars", что означает, что все переменные должны быть либо лексически связанными (используя "my" или "state"), объявлены заранее с помощью "our" или явно квалифицированы для указания пакета, в котором находится глобальная переменная (используя "::").

glob завершился неудачно (%s)

(S glob) Что-то пошло не так с внешней(ими) программой(ами), используемой для glob и <*.c>. Обычно это означает, что вы предоставили шаблон glob, который заставил внешнюю программу завершиться с ненулевым статусом. Если сообщение указывает, что аномальное завершение привело к созданию coredump, это также может означать, что ваша csh (C оболочка) повреждена. Если это так, вы должны изменить все переменные, связанные с 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 переполнение) Вы вызвали gmtime с числом, которое не могло быть обработано: слишком большим, слишком малым или NaN. Возвращаемое значение равно undef.

gmtime(%f) слишком велико

(W переполнение) Вы вызвали gmtime с числом, которое было больше, чем она может надёжно обработать, и gmtime , вероятно, вернула неверную дату. Это предупреждение также срабатывает при NaN (специальном значении «не число»).

gmtime(%f) слишком мало

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

Получена ошибка от DosAllocMem

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

goto должен иметь метку

(F) В отличие от "next" или "last", вам не разрешено перейти в неопределённое место назначения. См. "goto" в perlfunc.

Переход к неопределённой подпрограмме%s

(F) Вы попытались вызвать подпрограмму с goto &sub синтаксисом, но указанная подпрограмма не определена или, если она была определена, она была с тех пор удалена.

Имя группы должно начинаться с символа слова, не являющегося цифрой, в регулярном выражении; отмечено <-- ЗДЕСЬ в 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{} в классе символов в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(W regexp) Имена Unicode-символов (\N{...}) могут возвращать последовательность нулевой длины. При использовании такого escape-символа в классе символов его поведение не определено. Проверьте, что использован правильный escape-символ и обработчик charname находится в области видимости.

Недопустимая %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. Проверьте написание. См. также "Can't find Unicode property definition "%s"".

Неправильно сформированное значение среды CRTL "%s"

(W internal) Предупреждение, характерное для VMS. Perl пытался прочитать внутренний массив среды CRTL и встретил элемент без разделителя = для разделения ключей и значений. Элемент игнорируется.

Неправильно сформированное сообщение в prime_env_iter: |%s|

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

(при очистке) %s

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

Неудача пользовательских обратных вызовов, отправленных с флагом G_KEEPERR , также может привести к этому предупреждению. См. "G_KEEPERR" в perlcall.

Неполное выражение внутри '(?[ ])' в регулярном выражении; отмечено <-- HERE в m/%s/

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

Несогласованная иерархия во время слияния C3 класса '%s': слияние завершилось ошибкой для родителя '%s'

(F) Порядок разрешения методов (MRO) данного класса не соответствует C3, и вы включили MRO C3 для этого класса. Подробнее о C3 см. документацию в mro.

Отступ на строке %d здесь-документа не соответствует разделителю

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

Например, строка 2 ниже неверна, потому что у нее нет, по крайней мере, 2 пробелов, но строки 1 и 3 в порядке, потому что у них есть по крайней мере 2:

if ($something) {
  print <<~EOF;
    Line 1
   Line 2 not
      Line 3
    EOF
}

Обратите внимание, что табуляция и пробелы сравниваются строго, что означает, что 1 табуляция не будет соответствовать 8 пробелам.

Бесконечная рекурсия в регулярном выражении

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

Бесконечная рекурсия через пустой шаблон

(F) Вы попытались использовать пустой шаблон внутри блока кода регулярного выражения, например /(?{ s!!! })/, что привело к повторному выполнению того же шаблона, что представляет собой бесконечный цикл, который прерывается сбрасыванием исключения.

Инициализация переменных состояния в списке в настоящее время запрещена

(F) state разрешает только инициализацию одной переменной, указанной без скобок. Поэтому state $a = 42 и state @a = qw(a b c) разрешены, но не state ($a) = 42 или state. Для инициализации более одной state переменной инициализируйте их по одной.

%%s[%s] в скалярном контексте лучше записывать как $%s[%s]

(W syntax) В скалярном контексте вы использовали индекс/срез массива (указано %), чтобы выбрать один элемент массива. Обычно лучше запрашивать скалярное значение (указано $). Разница в том, что $foo[&bar] всегда ведет себя как скаляр, как в возвращаемом значении, так и при оценке аргумента, тогда как %foo[&bar] предоставляет контекст списка для его индекса, что может делать странные вещи, если вы ожидаете только один индекс. При вызове в контексте списка он также возвращает индекс (что возвращает &bar), помимо значения.

%%s{%s} в скалярном контексте лучше записывать как $%s{%s}

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

Небезопасная зависимость в %s

(F) Вы пытались сделать что-то, что не понравилось механизму маркировки данных. Механизм маркировки данных включен, когда вы запускаете скрипт с правами root или при явном включении с помощью флага -T. Механизм маркировки помечает все данные, полученные напрямую или косвенно от пользователя, которому не доверяют. Если такие данные используются в «опасной» операции, выдается эта ошибка. Подробнее см. perlsec.

Небезопасный каталог в %s

(F) Вы не можете использовать system(), exec() или открытие с передачей в pipe в скрипте с правами root или group, если $ENV{PATH} содержит каталог, доступный для записи всем пользователям. Кроме того, PATH не должен содержать относительные каталоги. См. perlsec.

Небезопасное использование $ENV{%s} при запуске %s

(F) Вы не можете использовать system(), exec() или открытие с передачей в pipe в скрипте с правами root или group, если какие-либо из $ENV{PATH}, $ENV{IFS}, $ENV{CDPATH}, $ENV{ENV}, $ENV{BASH_ENV} или $ENV{TERM} получены из данных, предоставленных (или потенциально предоставленных) пользователем. Скрипт должен устанавливать путь к известному значению, используя надёжные данные. См. perlsec.

Небезопасное пользовательское свойство %s

(F) Perl обнаружил немаркированные данные при попытке компиляции регулярного выражения, содержащего вызов пользовательской функции свойства символов, например \p{IsFoo} или \p{InFoo}. См. "User-Defined Character Properties" в perlunicode и perlsec.

Переполнение целого числа в строке формата для %s

(F) Индексы и ширины, указанные в строке формата printf() или sprintf(), слишком велики. Числа не должны вызывать переполнение для целых чисел вашей архитектуры.

Переполнение целого числа в числе %s

(S overflow) Указанное вами шестнадцатеричное, восьмеричное или двоичное число (будучи литералом или аргументом для hex() или oct()) слишком велико для вашей архитектуры и было преобразовано в число с плавающей точкой. На 32-битной архитектуре наибольшим шестнадцатеричным, восьмеричным или двоичным числом, представимым без переполнения, является 0xFFFFFFFF, 037777777777 или 0b11111111111111111111111111111111 соответственно. Обратите внимание, что Perl прозрачно преобразует все числа в представление с плавающей точкой внутри - с возможной потерей точности в последующих операциях.

Переполнение целого числа в srand

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

Переполнение целого числа в версии
Переполнение целого числа в версии %d

(W overflow) Некоторая часть инициализации версии слишком велика для размера целых чисел вашей архитектуры. Это не предупреждение, так как нет рациональной причины, чтобы версия пыталась использовать элемент больше, чем обычно 2**32. Обычно это происходит из-за попытки использовать какое-то странное математическое выражение в качестве версии, например, 100/9.

Internal disaster in regex; marked by <-- HERE in m/%s/

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

Internal inconsistency in tracking vforks

(S) Предупреждение, специфичное для VMS. Perl отслеживает количество вызовов fork и exec, чтобы определить, должен ли текущий вызов exec повлиять на текущий скрипт или дочерний процесс (см. "exec LIST" в perlvms). По какой-то причине этот счётчик был поврежден, поэтому Perl делает предположение и обрабатывает этот exec как запрос на завершение скрипта Perl и выполнение указанной команды.

internal %<num>p might conflict with future printf extensions

(S internal) Внутренняя процедура Perl, обрабатывающая форматирование printf и sprintf, следует немного другим правилам, когда вызывается из кода C или XS. В частности, форматы, состоящие из цифр, за которыми следует "p" (например, "%7p"), зарезервированы для будущего использования. Если вы видите это сообщение, значит, модуль XS попытался вызвать эту процедуру с одним из таких зарезервированных форматов.

Internal urp in regex; marked by <-- HERE in m/%s/

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

%s (...) interpreted as function

(W syntax) Вы нарушили правило, согласно которому любой оператор списка, за которым следуют скобки, превращается в функцию, со всеми аргументами оператора списка, найденными внутри скобок. См. "Terms and List Operators (Leftward)" в perlop.

In '(?...)', the '(' and '?' must be adjacent in regex; marked by <-- HERE in m/%s/

(F) Двухсимвольная последовательность "(?" в этом контексте в шаблоне регулярного выражения должна быть неделимым токеном, без чего-либо между "(" и "?", но вы их разделили пробелом.

In '(*...)', the '(' and '*' must be adjacent in regex; marked by <-- HERE in m/%s/

(F) Двухсимвольная последовательность "(*" в данном контексте в шаблоне регулярного выражения должна быть неделимым токеном, без чего-либо между "(" и "*", но вы их разделили. Исправьте шаблон и повторите попытку.

Invalid %s attribute: %s

(F) Указанный атрибут для подпрограммы или переменной не был распознан Perl или пользователем. См. attributes.

Invalid %s attributes: %s

(F) Указанные атрибуты для подпрограммы или переменной не были распознаны Perl или пользователем. См. attributes.

Invalid character in charnames alias definition; marked by <-- HERE in '%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+...} in regex; marked by <-- HERE in m/%s/

(F) Символьный констант, представленный ..., не является допустимым шестнадцатеричным числом. Либо он пуст, либо вы попытались использовать символ, кроме 0–9 или A–F, a–f в шестнадцатеричном числе.

Invalid module name %s with -%c option: contains single ':'

(F) Имя модуля в командных строчных опциях perl's -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-десятичных точек с ведущей «v» и по крайней мере тремя компонентами. Текст в скобках указывает, какие критерии не выполнены. Для получения дополнительной информации о допустимых форматах версий обратитесь к модулю version.

Invalid type '%s' in %s

(F) Указанный символ не является допустимым типом для pack или unpack. См. "pack" в perlfunc.

(W) Указанный символ не является допустимым типом для pack или unpack, но ранее молча игнорировался.

Неверный формат версии (%s)

(F) Номер версии не соответствует критериям «lax» для версий. Номер версии «lax» — это положительное десятичное число (целое или дробное) без показательной записи или же строка v с точечной десятичной записью. Если строка v имеет меньше трёх компонентов, она должна начинаться с символа 'v'. В противном случае, ведущий символ 'v' является необязательным. Как десятичные, так и версии с точечной десятичной записью могут иметь заключительный компонент "alpha", разделённый символом нижнего подчёркивания после дробной или точечной десятичной записи. Текст в скобках указывает, какие критерии не были выполнены. Подробнее о допустимых форматах версий см. в модуле version.

Неверный объект версии

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

В '(*VERB...)', скобки '(' и '*' должны быть смежными в регулярном выражении; помечено <-- HERE в m/%s/
Инвертирование класса символов, содержащего многосимвольный последовательность, запрещено в регулярном выражении; помечено <-- HERE в 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' — неизвестный тип связи в регулярном выражении; помечено <-- HERE в m/%s/

(F) Вы использовали \b{...} или \B{...} и ... Perl неизвестен. Текущие допустимые значения приведены в "\b{}, \b, \B{}, \B" в perlrebackslash.

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

(F) Указанный вами шаблон может привести к бесконечному циклу в регулярном выражении, поэтому он запрещён. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.

%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'. (В более ранних версиях: когда $* была установлена в значение true, все регулярные выражения вели себя так, как будто они были написаны с использованием /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 не знает.

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

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

-i используется без имён файлов в командной строке, чтение из STDIN

(S inplace) Параметр -i был передан в командной строке, указывая, что скрипт предназначен для редактирования файлов на месте, но файлы не были указаны. Это обычно ошибка, так как редактирование STDIN на месте не имеет смысла и может вводить в заблуждение, так как может показаться, что perl завис, когда на самом деле он просто пытается прочитать STDIN. Вы должны либо указать имя файла для редактирования, либо удалить -i из командной строки. Подробности см. в perlrun.

Мусор в конце регулярного выражения в регулярном выражении m/%s/

(P) Парсер регулярных выражений запутался.

\K не разрешено в утверждениях lookahead/lookbehind в регулярном выражении; помечено <-- HERE в m/%s/

(F) В вашем регулярном выражении использовалось \K в утверждении lookahead или lookbehind, что запрещено.

Метка не найдена для "last %s"

(F) Вы назвали цикл для выхода, но вы не находитесь в цикле с таким именем, даже если учитывать вызовы. См. "last" в perlfunc.

Метка не найдена для "next %s"

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

Метка не найдена для "redo %s"

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

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

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

длина/код после конца строки в 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 или допущена опечатка в шаблоне. Например, вы действительно хотели сопоставить символ перевода страницы? Если да, все управляющие символы вертикального пробела ASCII могут быть представлены последовательностями экранирования, которые не будут выглядеть столь резко, как ваш шаблон при отображении.

\r    carriage return
\f    form feed
\n    line feed
\cK   vertical tab
%s: загружаемая библиотека и двоичные файлы Perl не совпадают (получен ключ рукопожатия %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(2) возвращает ненулевое значение для них. Но в некоторых локалях оно возвращает 0. Perl использует первый подход, вообще не используя ispunct() (см. примечание [5] в perlrecharclass), и это сообщение выводится, чтобы сообщить вам, что вы получаете подход Perl, а не подход локали.

Локаль '%s' может работать некорректно.%s

(W locale) Вы используете именованную локаль, которая не UTF-8, и Perl определил, что она не полностью совместима с тем, что он может обработать. Вторая %s приводит причину.

Наиболее частой причиной является то, что локаль содержит символы, которые представлены более чем одним байтом. Perl может обрабатывать только такие локали, которые являются UTF-8. Вероятнее всего, указанная локаль — это не-UTF-8 локаль для языка Восточной Азии, такого как китайский или японский.

Некоторые устаревшие локали, которые не являются супермножеством ASCII, в основном те, что в ISO 646 или других 7-битных локалях, таких как ASMO 449, также могут иметь проблемы, в зависимости от того, какие части набора символов ASCII изменяются локалью и используются программой. Сообщение об ошибке перечисляет определяемые конфликтующие символы.

Обратите внимание, что не все несовместимости обнаруживаются.

Если это произойдёт с вами, вы можете только переключиться на другую локаль или использовать Encode для перевода из локали в UTF-8; если это непрактично, вас предупреждают о том, что некоторые вещи могут сломаться.

Это сообщение выводится каждый раз, когда некорректная локаль включается в пределах use locale, или при первом, возможно, затронутом действии, если use locale унаследует некорректную локаль. Оно не выводится для каких-либо операций из модуля POSIX.

localtime(%f) не удалось

(W overflow) Вы вызвали localtime с числом, которое он не смог обработать: слишком большим, слишком малым или NaN. Возвращённое значение — undef.

localtime(%f) слишком велико

(W overflow) Вы вызвали localtime с числом, которое было больше, чем он может надёжно обработать, и localtime , вероятно, вернул неправильную дату. Это предупреждение также срабатывает с NaN (специальное значение «не число»).

localtime(%f) слишком мало

(W overflow) Вы вызвали localtime с числом, которое было меньше, чем он может надёжно обработать, и localtime , вероятно, вернул неправильную дату.

Обратный просмотр длиной более %d не реализован в регулярном выражении m/%s/

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

Потеря точности при %s %f на 1

(W imprecision) Значение, которое вы пытались прирастить или уменьшить на единицу, слишком велико для точного хранения в представлении с плавающей точкой, поэтому целевое значение ++ или -- не изменилось. Perl выводит это предупреждение, потому что уже переключился с целых чисел на числа с плавающей точкой, когда значения слишком велики для целых чисел, а теперь даже числа с плавающей точкой недостаточны. Возможно, вы захотите перейти к явному использованию Math::BigInt.

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

(W io) Вы попытались выполнить lstat на файловом дескрипторе. Что вы имели в виду? lstat() имеет смысл только для имён файлов. (Perl выполнил fstat() вместо этого на файловом дескрипторе.)

Атрибут lvalue %s уже определён для подпрограммы

(W misc) Хотя attributes.pm позволяет это, включение или выключение атрибута lvalue для уже определённой Perl-подпрограммы не всегда работает должным образом. Это может или может не сделать то, что вы хотите, в зависимости от кода внутри подпрограммы, с точными подробностями, которые могут изменяться между версиями Perl. Делайте это только если вы действительно знаете, что делаете.

Атрибут lvalue проигнорирован после определения подпрограммы

(W misc) Использование декларативной синтаксической конструкции :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, но на самом деле ими не были (например, это были данные в legacy 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», сделав предыдущий параметр необязательным, а последующий — обязательным. Параметры заполняются слева направо, поэтому вызывающий не может опустить предыдущий и передать последующий. Если вы хотите действовать так, как будто параметры заполняются справа налево, объявите самый правый параметр необязательным, а затем переставьте параметры в теле подпрограммы.

Сопоставление несимвола Юникода 0x%X с свойством Юникода; может быть не переносимым

(S non_unicode) Perl позволяет строкам содержать супермножество кодов символов Юникода; каждый код может быть так же велик, как хранится в знаковом целочисленном типе на вашей системе, но эти значения могут не быть приняты другими языками/системами. Это сообщение появляется, когда вы сопоставили строку, содержащую такой код, с образцом регулярного выражения, и код был сопоставлен с свойством Юникода, \p{...} или \P{...}. Свойства Юникода определены только для кодов символов Юникода, поэтому результат этого сопоставления не определен Юникодом, но Perl (начиная с версии 5.20) обрабатывает несимволы Юникода так, как будто они являются типичными неназначенными символами Юникода, и сопоставил их соответствующим образом. Определяется ли соответствие таких кодов данному свойству, указано в "Свойства, доступные через \p{} и \P{}" в perluniprops.

Это сообщение подавляется (если оно не сделано фатальным), если оно не существенно для результатов сопоставления, если код является символом Юникода или нет. Например, свойство \p{ASCII_Hex_Digit} может сопоставиться только с 22 символами [0-9A-Fa-f], поэтому очевидно, что все остальные символы, Юникод или нет, не будут ему соответствовать. (И \P{ASCII_Hex_Digit} будет соответствовать каждому коду, кроме этих 22.)

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

См. "За пределами кодов символов Юникода" в perlunicode для получения дополнительной информации.

%s соответствует пустой строке многократно в регулярном выражении; отмечено <-- ЗДЕСЬ в 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 запрещен

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

Возможно, бесконечная многострочная строка %s, начатая в строке %d

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

Неправильное размещение _ в числе

(W syntax) Подчеркивание в числовой константе не разделяло две цифры.

Отсутствует аргумент для %n в %s

(F) %n использовалось в строке формата без соответствующего аргумента для записи текущей длины строки.

Отсутствует аргумент в %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.

Отсутствует правая фигурная скобка у \%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 синтаксис) Это обоснованное предположение, сделанное в сочетании с сообщением «%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
Попытка изменения значения массива, которое нельзя создать, %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 (см. "Копирование при записи" в perlguts), но общий буфер строки не удалось сделать только для чтения.

mprotect для %p %u завершился ошибкой %d

(S) Вы скомпилировали Perl с -DPERL_DEBUG_READONLY_OPS (см. perlhacktips), но дерево операций не удалось сделать только для чтения.

mprotect RW для строки COW %p %u завершился ошибкой %d

(S) Вы скомпилировали Perl с -DPERL_DEBUG_READONLY_COW (см. "Копирование при записи" в perlguts), но общий буфер строки только для чтения не удалось сделать изменяемым.

mprotect RW для %p %u завершился ошибкой %d

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

msg%s не реализован

(F) У вас нет межпроцессного обмена сообщениями System V на вашей системе.

Многомерный синтаксис %s не поддерживается

(W синтаксис) Многомерные массивы не записываются так, как $foo[1,2,3]. Они записываются так, как $foo[1][2][3], как в C.

Не разрешено несколько параметров slurpy

(F) В сигнатурах подпрограмм параметр slurpy (@ или %) должен быть последним параметром, и их должно быть не более одного; например:

sub foo ($a, @b)    {} # legal
sub foo ($a, @b, %) {} # invalid
'/' должен следовать за числовым типом в unpack

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

%s не должен быть именованной последовательностью в операторе транслитерации

(F) Транслитерация (tr/// и y///) транслитерирует отдельные символы. Но именованная последовательность по определению представляет собой больше, чем отдельный символ, и поэтому выполнение этой операции над ней не имеет смысла.

"my sub" еще не реализован

(F) Лексически-ограниченные подпрограммы еще не реализованы. Не пробовали это еще.

"my" подпрограмма %s не может находиться в пакете

(F) Лексически-ограниченные подпрограммы не находятся в пакете, поэтому не имеет смысла пытаться объявить их с квалификатором пакета в начале.

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

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

"my" переменная %s не может находиться в пакете

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

Имя "%s::%s" использовалось только один раз: возможная опечатка

(W once) Опечатки часто проявляются как уникальные имена переменных. Если у вас была веская причина для использования уникального имени, просто укажите его ещё раз каким-то образом, чтобы подавить сообщение. Объявление our также предоставлено для этой цели.

ПРИМЕЧАНИЕ: Это предупреждение обнаруживает символы пакета, которые использовались только один раз. Это означает, что лексические переменные никогда не будут вызывать это предупреждение. Это также означает, что все переменные пакета $c, @c, %c, а также *c, &c, sub c{}, c(), и c (дескриптор файла или формат) считаются одинаковыми; если программа использует $c только один раз, но также использует любой из других, это предупреждение не будет сработано. Символы, начинающиеся с нижнего подчеркивания, и символы, использующие специальные идентификаторы (см. perldata), исключаются из этого предупреждения.

Требуется ровно 3 восьмеричных цифры в регулярном выражении; помечено <-- HERE в 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 в контексте lvalue

(F) Когда vec вызывается в контексте lvalue, второй аргумент должен быть больше или равен нулю.

Отрицательное значение счётчика повторений ничего не делает

(W числовое) Вы попытались выполнить оператор повторения x меньше 0 раз, что не имеет смысла.

Вложенные квантификаторы в регулярном выражении; помечено <-- HERE в m/%s/

(F) Нельзя квантифицировать квантификатор без вмешательства скобок. Таким образом, такие конструкции, как ** или +* или ?*, недопустимы. <-- HERE показывает, где в регулярном выражении была обнаружена проблема.

Обратите внимание, что минимальные квантификаторы *?, +?, и ??, по-видимому, являются вложенными квантификаторами, но таковыми не являются. См. perlre.

%s никогда не был введен

(S внутреннее) Символ, о котором идет речь, был объявлен, но каким-то образом вышел за пределы области видимости, прежде чем мог быть использован.

next::method/next::can/maybe::next::method не может найти содержащий метод

(F) next::method необходимо вызывать в контексте реального метода в реальном пакете, и он не смог найти такой контекст. См. mro.

\N в классе символов должен быть именованным символом: \N{...} в регулярном выражении; отмечено <-- HERE в m/%s/

(F) Новое (с Perl 5.12) значение \N как [^\n] недействительно в классе символов в квадратных скобках по той же причине, что . в классе символов теряет свою специальность: оно соответствует почти всему, чего, вероятно, вы не хотите.

\N{} здесь ограничено одним символом в регулярном выражении; отмечено <-- HERE в 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 обрабатывает перенаправление командной строки самостоятельно и обнаружил одиночный символ '>' в конце командной строки, поэтому не знает, куда вы хотите перенаправить стандартный вывод.

Нет выходного файла после > или >> в командной строке

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

Имя пакета не разрешено для подпрограммы %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 в вашей оболочке, чтобы увидеть допустимые имена сигналов на вашей системе.

Не найдено соответствий для шаблона Unicode свойства:

(W regexp) Вы указали шаблон подстановки для значения свойства Unicode, но в текущей версии Unicode нет значения свойства, которое ему соответствует. Проверьте правильность написания.

Не ссылка на код

(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 debugging) Некоторая внутренняя процедура run() была вызвана с указателем на нулевой код операции.

Пустой шаблон в строке формы

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

Null realloc

(P) Была предпринята попытка realloc NULL.

NULL аргумент регулярного выражения

(P) Внутренние процедуры сопоставления шаблонов серьёзно сбойнули.

NULL параметр регулярного выражения

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

Неправильное количество аргументов/значений для подпрограммы '%s'

(F) Подпрограмма, использующая параметр slurpy hash в своей подписи, получила нечётное количество аргументов для заполнения массива. Требуется, чтобы аргументы были спарены, с тем же количеством ключей, что и значений. Виновником, скорее всего, является вызывающая подпрограмму.

Сообщение пытается включить имя вызываемой подпрограммы. Если подпрограмма была алиасирована, будет показано оригинальное имя подпрограммы, независимо от того, какое имя использовала вызывающая её подпрограмма.

Нечётное количество аргументов для overload::constant

(W overload) Вызов overload::constant содержал нечётное количество аргументов. Аргументы должны идти парами.

Нечётное количество элементов в анонимном массиве

(W misc) Вы указали нечётное количество элементов для инициализации массива, что странно, так как массивы состоят из пар ключ/значение.

Нечётное количество элементов в присваивании массива

(W misc) Вы указали нечётное количество элементов для инициализации массива, что странно, так как массивы состоят из пар ключ/значение.

Смещение за пределами строки

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

Использование старого разделителя пакетов в строке

(W syntax) Вы использовали старый разделитель пакетов, ',', в переменной, имя которой указано внутри двойной кавычки; например, "In $name's house". Это эквивалентно "In $name::s house". Если вы имели в виду первое, поставьте обратный слэш перед апострофом ("In $name\'s house").

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

(W unopened) Была предпринята попытка операции ввода-вывода на дескрипторе файла, который никогда не был инициализирован. Вам необходимо выполнить вызов open(), sysopen() или socket(), или вызвать конструктор из пакета FileHandle.

-%s на неоткрытом дескрипторе файла %s

(W unopened) Вы попытались применить оператор проверки файла к дескриптору файла, который не открыт. Проверьте свой поток управления. См. также "-X" в perlfunc.

oops: oopsAV

(S internal) Внутреннее предупреждение о том, что грамматика сломана.

oops: oopsHV

(S internal) Внутреннее предупреждение о том, что грамматика сломана.

Операнд без предшествующего оператора в регулярном выражении; отмечен <-- 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 суррогат) Вы выполнили операцию, требующую правил Юникода, на суррогате Юникода. Юникод не одобряет использование суррогатов для чего-либо, кроме хранения строк в UTF-16, но правила (нехотя) определены для суррогатов, и они ничего не делают для этой операции. Поскольку использование суррогатов может быть опасным, Perl предупреждает.

Если показанная операция — "ToFold", это означает, что сопоставление без учёта регистра в регулярном выражении выполнялось по кодовому значению.

Если вы знаете, что делаете, вы можете отключить это предупреждение с помощью no warnings 'surrogate';.

Оператор или точка с запятой отсутствуют перед %s

(S неоднозначно) Вы использовали переменную или вызов подпрограммы, где анализатор ожидал оператор. Анализатор предположил, что вы действительно имели в виду оператор, но это, скорее всего, не так. Например, если вы скажете "*foo *foo", это будет интерпретировано как если бы вы сказали "*foo * 'foo'".

Недостающее выражение по умолчанию для необязательного параметра

(F) В сигнатуре подпрограммы вы написали что-то вроде "$a =", создав именованный необязательный параметр без значения по умолчанию. Для безымянного необязательного параметра разрешается не иметь значения по умолчанию, но для именованного необходимо указать конкретное значение по умолчанию. Скорее всего, вам нужно "$a = undef".

Переменная "our" %s объявлена повторно

(W shadow) Похоже, вы уже объявляли ту же глобальную переменную ранее в текущей области видимости.

Ошибка: не хватает памяти!

(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) Аргумент '.' в шаблоне пытался переместить рабочую позицию перед началом строка, которую создают функции pack.

'@' вне строки в 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) Произошла неудача во внутренней проверке согласованности при попытке сброса слабой ссылки.

Критическая ошибка: do_subst

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

Критическая ошибка: do_trans_%s

(P) Внутренние функции do_trans были вызваны с недействительными операционными данными.

Критическая ошибка: fold_constants JMPENV_PUSH вернуло %d

(P) При попытке сворачивания констант была поймана исключительная ситуация, отличная от ошибки eval.

Критическая ошибка: frexp: %f

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

Критическая ошибка: goto, тип=%u, ix=%ld

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

Критическая ошибка: gp_free не смог освободить указатель на glob

(P) Внутренняя функция, используемая для очистки элементов типа glob, пыталась это сделать многократно, но каждый раз что-то повторно создавало элементы в glob. Скорее всего, glob содержит объект со ссылкой обратно на glob и деструктором, который добавляет новый объект в glob.

Критическая ошибка: INTERPCASEMOD, %s

(P) Лексер попал в плохое состояние в модификаторе регистра.

Критическая ошибка: INTERPCONCAT, %s

(P) Лексер попал в плохое состояние при разборе строки с квадратными скобками.

Критическая ошибка: kid popen errno read

(F) Ответ поделенного процесса вернул непонятное сообщение об errno.

Критическая ошибка: last, тип=%u

(P) Мы вытолкнули контекст из стека в контекст блока, и обнаружили, что это не контекст блока.

Критическая ошибка: leave_scope clearsv

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

Критическая ошибка: leave_scope несоответствие %u

(P) Сохранённый стек, вероятно, вышел из синхронизации. По крайней мере, вверху стека был неверный перечислитель.

Критическая ошибка: magic_killbackrefs

(P) Произошла неудача во внутренней проверке согласованности при попытке сбросить все слабые ссылки на объект.

Критическая ошибка: malloc, %s

(P) Что-то запросило отрицательное количество байт для malloc.

Критическая ошибка: переполнение памяти

(P) Что-то попыталось выделить больше памяти, чем возможно, или отрицательное количество.

Критическая ошибка: pad_alloc, %p!=%p

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

Критическая ошибка: pad_free curpad, %p!=%p

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

Критическая ошибка: pad_free po

(P) Внутри был обнаружен нулевой смещение scratch pad. Была предпринята попытка освободить целевой элемент, который не был выделен.

Критическая ошибка: pad_reset curpad, %p!=%p

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

Критическая ошибка: pad_sv po

(P) Внутри был обнаружен нулевой смещение scratch pad. Скорее всего, оператор потребовал целевой элемент, но этот целевой элемент не был выделен по каким-либо причинам.

Критическая ошибка: pad_swipe curpad, %p!=%p

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

Критическая ошибка: pad_swipe po

(P) Обнаружено недопустимое смещение scratch pad.

Критическая ошибка: pp_iter, тип=%u

(P) Итератор foreach был вызван не в рамках цикла.

panic: pp_match%s

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

panic: realloc, %s

(P) Нечто запросило отрицательное количество байтов для realloc.

panic: ошибка подсчёта ссылок на nsv в sv_replace() (%d != 1)

(P) Внутренней функции sv_replace() был передан новый SV с числом ссылок, отличным от 1.

panic: restartop в %s

(P) Некоторая внутренняя процедура запросила goto (или что-то подобное), но не предоставила пункт назначения.

panic: return, тип=%u

(P) Мы извлекли контекст из стека в подпрограмму или контекст eval, но затем обнаружили, что это не подпрограмма или контекст eval.

panic: scan_num, %s

(P) scan_num() была вызвана на нечто, что не является числом.

panic: Последовательность (?{...}): в регулярном выражении m/%s/ не найден блок кода

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

panic: strxfrm() получает абсурдные результаты - a => %u, ab => %u

(P) Проверка целостности интерпретатора для функции C strxfrm() не удалась. В вашей текущей локали преобразованная строка "ab" короче, чем преобразованная строка "a", что бессмысленно.

panic: sv_chop %s

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

panic: sv_insert, midend=%p, bigend=%p

(P) В процедуру sv_insert() было указано удалить больше строк, чем их было.

panic: top_env

(P) Компилятор попытался выполнить goto или что-то странное.

panic: нереализованная операция %s (#%d) вызвана

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

panic: неизвестный OA_*: %x

(P) Внутренняя процедура обработки аргументов вызовов подпрограммы &CORE::foo() не смогла определить ожидаемый тип аргументов.

panic: utf16_to_utf8: нечётная длина байтов

(P) Нечто попыталось вызвать utf16_to_utf8 с нечётной (а не чётной) длиной байтов.

panic: utf16_to_utf8_reversed: нечётная длина байтов

(P) Нечто попыталось вызвать utf16_to_utf8_reversed с нечётной (а не чётной) длиной байтов.

panic: yylex, %s

(P) Лексер попал в некорректное состояние при обработке модификатора случая.

Отсутствуют скобки вокруг списка "%s"

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

my $foo, $bar = @_;

а имели в виду

my ($foo, $bar) = @_;

Помните, что "my", "our", "local" и "state" имеют более высокий приоритет, чем запятая.

Внутренняя ошибка парсинга кода (%s)

(F) Парсинг кода, предоставленного расширением, нарушил API парсера обнаруживаемым способом.

Вложенность подпрограмм шаблона без изменения позиции превысила предел в регулярном выражении

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

-p направление: %s

(F) Во время неявного вывода, вызванного параметром командной строки -p, произошла ошибка. (Этот вывод направляется в стандартный вывод, если вы не перенаправили его с помощью select()).

Версия API Perl %s из %s не соответствует %s

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

Правила сворачивания Perl устарели для 0x%X; пожалуйста, используйте утилиту perlbug для отчёта; в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

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

Экспериментальный слой PerlIO ':win32'

(S experimental::win32_perlio) Слой PerlIO :win32 является экспериментальным. Если вы хотите рискнуть его использовать, просто отключите это предупреждение:

no warnings "experimental::win32_perlio";
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, более новой, чем текущая. Сколько времени прошло с тех пор, как вы обновляли 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}', seed установлен не полностью

(S) PERL_HASH_SEED должен соответствовать /^\s*(?:0x)?[0-9a-fA-F]+\s*\z/, но содержит не-шестнадцатеричный символ. Это может означать, что вы используете не тот seed.

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:] в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Класс в синтаксисе класса символов [: :] неизвестен. <-- ЗДЕСЬ показывает, где в регулярном выражении была обнаружена проблема. Обратите внимание, что классы символов POSIX не имеют префикс is, в отличие от соответствующих интерфейсов C: другими словами, это [[:print:]], а не isprint. См. perlre.

POSIX getpgrp не принимает аргумент

(F) На вашей системе реализована POSIX функция getpgrp(), которая не принимает аргумент в отличие от BSD версии, которая принимает pid.

Синтаксис POSIX [%c-%c] должен быть внутри классов символов%s в регулярном выражении; отмечено <-- ЗДЕСЬ в 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 syntax) Возможна проблема с использованием оператора управления потоком (например, return) и оператора с низким приоритетом, например or. Рассмотрим:

sub { return $a or $b; }

Это анализируется как:

sub { (return $a) or $b; }

Что фактически равно:

sub { return $a; }

Используйте скобки или вариант оператора с высоким приоритетом.

Обратите внимание, что это также может срабатывать для конструкций, таких как:

sub { 1 if die; }
Возможная проблема с приоритетом битового оператора %s

(W precedence) Ваша программа использует битовый логический оператор в сочетании с оператором числового сравнения, например:

if ($x & $y == 0) { ... }

Это выражение фактически эквивалентно $x & ($y == 0), из-за более высокого приоритета ==. Это, вероятно, не то, что вы хотите. (Если вы действительно хотели написать это, отключите предупреждение или, лучше, явно поставьте скобки и напишите $x & ($y == 0)).

Возможная нежелательная интерполяция $\ в регулярном выражении

(W ambiguous) Вы сказали что-то вроде m/$\/ в регулярном выражении. Регулярное выражение m/foo$\s+bar/m преобразуется в: совпадение слова 'foo', разделителя записей вывода (см. "$\" в perlvar) и буквы 's' (один или более раз) за которым следует слово 'bar'.

Если это то, что вы имели в виду, вы можете отключить предупреждение, используя m/${\}/ (например: m/foo${\}s+bar/).

Если вместо этого вы хотели сопоставить слово 'foo' в конце строки, за которым следует пробел и слово 'bar' на следующей строке, то можно использовать m/$(?)\/ (например: m/foo$(?)\s+bar/).

Возможная нежелательная интерполяция %s в строке

(W ambiguous) Вы сказали что-то вроде '@foo' в строке с двойными кавычками, но в области видимости не было массива @foo в данный момент. Если вам нужен буквальный @foo, то напишите его как \@foo; в противном случае узнайте, что случилось с массивом, о котором, по-видимому, вы потеряли след.

Проблема с приоритетом: open %s должен быть open(%s)

(S precedence) Старый нестандартный конструкт

open FOO || die;

теперь интерпретируется как

open(FOO || die);

из-за строгой регулярности грамматики Perl 5 в унарные и списочные операторы. (Старый open был немного и того, и другого.) Вы должны поместить круглые скобки вокруг имени файлового дескриптора или использовать новый оператор "or" вместо "||".

Преждевременный конец заголовков скрипта

См. "500 Server error".

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

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

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

(W closed) Файловый дескриптор, в который вы печатаете, был закрыт некоторое время назад. Проверьте свой поток управления.

Процесс завершен сигналом SIG%s

(W) Это стандартное сообщение, выдаваемое приложениями OS/2, тогда как приложения *nix завершаются без звука. Это считается функцией порта OS/2. Это можно легко отключить с помощью соответствующих обработчиков сигналов, см. "Сигналы" в perlipc. См. также "Процесс завершен сигналами SIGTERM/SIGINT" в perlos2.

Прототип после '%c' для %s : %s

(W illegalproto) Символ следует за % или @ в прототипе. Это бесполезно, так как % и @ поглощают остальную часть аргументов подпрограммы.

Несоответствие прототипов: %s vs %s

(S prototype) Подпрограмма, которая объявлялась или определялась, ранее была объявлена или определена с другим прототипом функции.

Прототип не завершён

(F) Вы опустили закрывающую скобку в определении прототипа функции.

Прототип '%s' переопределён атрибутом 'prototype(%s)' в %s

(W prototype) Прототип был объявлен как в скобках после имени подпрограммы, так и через атрибут прототипа. Прототип в скобках бесполезен, так как он будет заменён прототипом из атрибута до того, как он будет когда-либо использован.

Квантификатор следует за пустым выражением в регулярном выражении; помечено <-- 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}.

Неожиданный квантификатор на выражении нулевой длины в регулярном выражении 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

(Вы можете принудительно обеспечить переносимость, указав диапазон Юникода, что означает, что конечные точки задаются по \N{...}, но смысл может оставаться неочевидным.) Более строгие правила требуют, чтобы диапазоны, начинающиеся или заканчивающиеся ASCII-символом, который не является управляющим символом, имели все свои конечные точки в виде буквального символа, а не в виде какой-либо последовательности экранирования (например, "\x41"), и диапазоны должны состоять только из цифр или только из заглавных букв или только из строчных букв.

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

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

Более строгие правила помогают обнаружить опечатки и другие ошибки. Вы включили диапазон, и по крайней мере одна из конечных точек — десятичная цифра. Согласно более строгим правилам, в этом случае обе конечные точки должны быть цифрами в одной группе из 10 последовательных цифр.

Попытка использования readdir() с недопустимым дескриптором каталога %s

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

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

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

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

(W closed) Вы пытались прочитать из закрытого дескриптора файла.

read() для незапущенного дескриптора файла %s

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

Перераспределение слишком велико: %x

(F) Вы не можете выделить более 64К на компьютере MS-DOS.

realloc() для освобождённой памяти проигнорирован

(S malloc) Внутренняя функция realloc() была вызвана на уже освобождённый элемент.

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

(S debugging) Вы не можете использовать опцию -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 redundant) Вы вызвали функцию с больше количеством аргументов, чем указывалось требуемым количеством аргументов. В настоящее время это выдаётся только в том случае, если формат типа 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 в регулярном выражении; отмечено <-- HERE в m/%s/

(F) Вы использовали \g0 или что-то подобное в регулярном выражении. Вы можете ссылаться на захватывающие скобки только с строго положительными целыми числами (обычные обратные ссылки) или с строго отрицательными целыми числами (относительные обратные ссылки). Использование 0 не имеет смысла.

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

(F) Вы использовали что-то вроде \7 в своём регулярном выражении, но в выражении нет не менее семи наборов захватывающих скобок. Если вы хотели вставить символ с порядковым номером 7 в регулярное выражение, добавьте нули для получения трёхзначного числа: \007.

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

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

(F) Вы использовали что-то вроде \k'NAME' или \k<NAME> в своём регулярном выражении, но нет соответствующих именованных захватывающих скобок, таких как (?'NAME'...) или (?<NAME>...). Проверьте, правильно ли написано имя как в обратной ссылке, так и в объявлении.

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

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

(F) Вы использовали что-то вроде \g{-7} в своём регулярном выражении, но в выражении нет не менее семи наборов закрытых захватывающих скобок до места, где находилось \g{-7}.

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

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

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

Модификатор регулярного выражения "/%c" может появиться не более двух раз
Модификатор регулярного выражения "%c" может появиться не более двух раз в регулярном выражении; отмечено <-- HERE в m/%s/

(F) В шаблоне регулярного выражения было слишком много вхождений указанного модификатора. Удалите лишние.

Модификатор регулярного выражения "%c" не может появиться после "-" в регулярном выражении; отмечено <-- HERE в m/%s/

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

Модификатор регулярного выражения "/%c" не может появиться дважды
Модификатор регулярного выражения "%c" не может появиться дважды в регулярном выражении; отмечено <-- HERE в m/%s/

(F) В шаблоне регулярного выражения было слишком много вхождений указанного модификатора. Удалите лишние.

Модификаторы регулярных выражений "/%c" и "/%c" взаимоисключают друг друга
Модификаторы регулярных выражений "%c" и "%c" взаимоисключают друг друга в регулярном выражении; отмечено <-- HERE в m/%s/

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

Недостаточно места для регулярного выражения в регулярном выражении m/%s/

(P) Ошибка «не может произойти», так как safemalloc() должна была её поймать раньше.

Повторяющаяся строка формата никогда не завершится (~~ и @#)

(F) Ваш формат содержит последовательность повторения ~~ до пустой строки и числовое поле, которое никогда не станет пустым, так что повторение никогда не завершится. Можно использовать ^# вместо этого. См. perlform.

Список замены длиннее списка поиска

(W misc) Вы использовали список замены, который длиннее списка поиска. Поэтому дополнительные элементы в списке замены бессмысленны.

'(*%s' требует завершающего ':' в регулярном выражении; отмечено <-- HERE в 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 не будет магически преобразовывать скаляры в списки. См. perlref.

Значение скаляра @%s{%s} лучше записать как $%s{%s}

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

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

Шаблон поиска не завершен

(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) Возможная ошибка синтаксиса рядом, вероятно, вызвана отсутствующей точкой с запятой или, возможно, некоторыми другими отсутствующими операторами, такими как запятая.

полу-паника: попытка дублирования освобождённой строки

(S internal) Внутренняя функция newSVsv() была вызвана для дублирования скаляра, который ранее был помечен как освобождённый.

sem%s не реализован

(F) На вашей системе нет системных семафоров IPC.

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

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

Последовательность "\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) Указанная именованная группа в формате (?'...') или (?<...>) была без закрывающей кавычки или угловой скобки. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема.

Последовательность (?(%c... не завершена в регулярном выражении; отмечена <-- ЗДЕСЬ в m/%s/

(F) Имя ссылки в формате (?('...')...) или (?(<...>)...) отсутствовала закрывающая кавычка или угловая скобка после имени. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема.

Последовательность (...) не завершена в регулярном выражении; отмечена <-- ЗДЕСЬ в m/%s/

(F) Отсутствует соответствующая закрывающая скобка для '('. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема.

Последовательность \%s... не завершена в регулярном выражении; отмечена <-- ЗДЕСЬ в m/%s/

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

Последовательность (?{...}) не завершена скобкой ')'

(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 это казалось работать так же, как присвоение значения undef, но на самом деле работало по-другому, было менее эффективным, и с очень плохой вероятностью могло привести к разделению вашего файла строковым представлением ссылки.

В Perl 5.20.0 это было изменено, чтобы оно точно стало таким же, как присвоение $/ значению undef, за исключением того, что будет выведено это предупреждение.

Рекомендуется изменить ваш код на явное присвоение $/ значению undef, если вы хотите прочитать весь файл. Начиная с Perl 5.28, присвоение $/ ссылке на целое число, которое не является положительным, является фатальной ошибкой.

Запрещено присваивать $/ ссылку на %s

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

shm%s не реализован

(F) На вашей системе нет системного межпроцессного обмена данными с общей памятью System V.

!=~ должно быть !~

(W синтаксис) Оператор несовпадения — !~, а не !=~. !=~ будет интерпретирован как операторы != (неравно числовое) и ~ (дополнение по модулю 1): вероятно, вы не имели в виду это.

/%s/ должно быть записано как "%s"

(W синтаксис) Вы использовали шаблон, где Perl ожидал найти строку, как в первом аргументе join. Perl будет рассматривать результат совпадения шаблона с $_ как строку, что, вероятно, не то, что вы имели в виду.

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

(W закрыто) Вы пытались выполнить shutdown на закрытом сокете. Кажется, это немного излишне.

Обработчик сигнала SIG%s "%s" не определен

(W сигнал) Обработчик сигнала, указанный в %SIG, на самом деле не существует. Возможно, вы поместили его в неправильный пакет?

Утечка Slab из cv %p

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

sleep(%u) слишком большой

(W переполнение) Вы вызвали sleep с числом, которое оно не может надежно обработать, и sleep вероятно, проспал меньше времени, чем было запрошено.

Параметр slurpy не последний

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

Умное сопоставление неопределённого объекта нарушает инкапсуляцию

(F) Не следует использовать оператор ~~ на объекте, который его не перегружает: Perl отказывается использовать внутреннюю структуру объекта для умного сопоставления.

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

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

К сожалению, ключи хэша должны быть меньше 2**31 байта

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

sort — теперь зарезервированное слово

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

Фильтры исходных данных применяются только к потокам байтов

(F) Вы пытались активировать фильтр исходных данных (обычно путем загрузки модуля фильтра исходных данных) внутри строки, переданной в eval. Это запрещено функцией unicode_eval. Вместо этого рассмотрите использование evalbytes. См. feature.

splice() смещение за пределами массива

(W разное) Вы попытались указать смещение, которое вышло за пределы массива, переданного в splice(). Вместо этого операция 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()->();

Здесь, когда в eval находится '\&a', она компилируется, f() в данный момент не выполняется, поэтому ее &a недоступна для захвата.

Подпрограмма "%s" &%s скрывает более раннее объявление в том же %s

(W тень) Подпрограмма "my" или "state" была переопределена в текущей области видимости или в текущем операторе, фактически устраняя весь доступ к предыдущему экземпляру. Это почти всегда ошибка в наборе символов. Обратите внимание, что предыдущая подпрограмма все равно будет существовать до конца области видимости или до тех пор, пока не будут уничтожены все ссылки на нее замыкания.

Подпрограмма %s переопределена

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

{
    no warnings 'redefine';
    eval "sub name { ... }";
}
Подпрограмма "%s" не будет оставаться совмещенной

(W closure) Внутренняя (вложенная) именованная подпрограмма ссылается на подпрограмму "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 до типа, который на самом деле был хуже его текущего типа.

Переключатель (?(condition)... содержит слишком много ветвей в регулярном выражении; помечено <-- ЗДЕСЬ в m/%s/

(F) Конструкция (?(condition)if-clause|else-clause) может иметь не более двух ветвей (if-clause и else-clause). Если вы хотите, чтобы одна или обе содержали чередование, например, используя this|that|other, заключите её в скобки группировки:

(?(condition)(?:this|that|other)|else-clause)

Пометка <-- ЗДЕСЬ указывает местоположение в регулярном выражении, где была обнаружена проблема. См. perlre.

Условие переключателя не распознано в регулярном выражении; помечено <-- ЗДЕСЬ в m/%s/

(F) Часть условия конструкции (?(condition)if-clause|else-clause) неизвестна. Условие должно быть одним из следующих:

(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

Пометка <-- ЗДЕСЬ указывает местоположение в регулярном выражении, где была обнаружена проблема. См. perlre.

Переключатель (?(condition)... не завершен в регулярном выражении; помечено <-- ЗДЕСЬ в m/%s/

(F) Вы опустили закрывающую скобку в блоке (?(condition)... где-то в шаблоне. Добавьте закрывающую скобку в нужное место. См. perlre.

переключение эффективного %s не реализовано

(F) При использовании псевдонима use filetest, мы не можем переключать реальные и эффективные uid или gid.

синтаксическая ошибка

(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".

Синтаксическая ошибка в (?[...]) в регулярном выражении; помечено <-- ЗДЕСЬ в m/%s/

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

%s синтаксис OK

(F) Окончательное сообщение об успешном выполнении perl -c.

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

(W closed) Вы пытались читать из закрытого файлового дескриптора.

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

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

Система V %s не реализована на этом компьютере

(F) Вы пытались выполнить что-то с функцией, начинающейся с "sem", "shm" или "msg", но IPC системы V не реализована на вашем компьютере. В некоторых машинах функциональность может существовать, но не быть настроена. Обратитесь к поддержке вашей системы.

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

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

-T и -B не реализованы для файловых дескрипторов

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

Целевая метка goto слишком глубоко вложена

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

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

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

tell() на неоткрытом файловом дескрипторе

(W unopened) Вы пытались использовать функцию 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) Эта функция — на самом деле крючок для будущего использования.

Функция regex_sets находится в стадии тестирования

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

no warnings "experimental::regex_sets";
Функция signatures находится в стадии тестирования

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

no warnings "experimental::signatures";
use feature "signatures";
sub foo ($left, $right) { ... }
Функция stat перед %s не была lstat

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

Функция Unicode property wildcards находится в стадии тестирования

(S experimental::uniprop_wildcards) Эта функция находится в стадии тестирования, и её поведение может быть изменено в будущих выпусках perl. См. "Wildcards in Property Values" в perlunicode.

Атрибут 'unique' может быть применён только к переменным 'our'

(F) Этот атрибут никогда не поддерживался для объявлений my или sub.

Этот Perl не может сбросить элементы CRTL environ (%s)
Этот Perl не может установить элементы CRTL environ (%s=%s)

(W internal) Предупреждения, специфичные для VMS. Вы пытались изменить или удалить элемент массива внутреннего окружения 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.

Функция 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) Вы пытались определить пользовательское отображение To для lc(), lcfirst, uc(), или ucfirst() (или их строковых версий), но указали недопустимое отображение. См. "User-Defined Character Properties" в perlunicode.

Слишком глубоко вложенные ()-группы

(F) Ваш шаблон содержит ()-группы с чрезмерно глубоким уровнем вложенности.

Недостаточно аргументов для syscall

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

Недостаточно аргументов для подпрограммы '%s'

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

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

Опция "-%s" указана слишком поздно

(X) Строка #! (или её локальный эквивалент) в скрипте Perl содержит опцию -M, -m или -C.

В случае -M и -m это ошибка, так как эти опции не предназначены для использования внутри скриптов. Используйте use pragma вместо этого.

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

Слишком поздно для выполнения блока %s

(W void) Блок CHECK или INIT определяется во время выполнения, когда возможность их выполнения уже упущена. Возможно, вы загружаете файл с require или do вместо use. Или, возможно, вам следует поместить require или do внутри блока BEGIN.

Слишком много аргументов для syscall

(F) Perl поддерживает максимум только 14 аргументов для syscall().

Слишком много аргументов для %s

(F) Функция требует меньшего количества аргументов, чем вы указали.

Слишком много аргументов для подпрограммы '%s'

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

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

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

(F) Превышено максимальное количество открывающихся "(" скобок, которые не сопоставлены соответствующими закрывающими. Это ограничение предотвращает излишнее потребление памяти. Изначально оно установлено в 1000, но может быть изменено путем задания ${^RE_COMPILE_RECURSION_LIMIT} на другое значение. Это может потребоваться сделать в блоке BEGIN до компиляции шаблона регулярного выражения.

Слишком много )

(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' заблокирован маской операций

(F) Вы попытались использовать оператор из безопасной области, в которой он запрещен. См. Safe.

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

(F) Ваша машина не реализует механизм усечения файла, о котором известно Configure.

Тип аргумента %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 обнаружил некоторые строки, оставшиеся в общей таблице строк, используемой для копирования при записи и для ключей хеша. Элементы должны были быть освобождены, поэтому это указывает на ошибку где-то.

Несбалансированные tmp: %d больше выделений, чем освобождений

(S internal) Код выхода обнаружил внутреннее несоответствие в количестве выделенных и освобождённых смертных скаляров.

Неопределённый формат "%s" вызван

(F) Похоже, указанный формат не существует. Возможно, он находится в другом пакете? См. perlform.

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

(F) Указанная подпрограмма сравнения сортировки, похоже, не существует. Возможно, она находится в другом пакете? См. "sort" в perlfunc.

Неопределённая подпрограмма &%s вызвана

(F) Указанная подпрограмма не определена или, если она была определена, она с тех пор была удалена.

Вызвана неопределённая подпрограмма

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

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

(F) Указанная подпрограмма сравнения сортировки объявлена, но, похоже, ещё не определена. См. "sort" в perlfunc.

Неопределённый основной формат "%s" вызван

(F) Указанный формат не существует. Возможно, он находится в другом пакете? См. perlform.

Значение переменной типа glob не задано

(W misc) Значение переменной типа glob не было задано, как в *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*{/
Неэкранированная левая фигурная скобка в регулярном выражении пропускается в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(W regexp) Если вы хотите сопоставить литеральную "{"-символ (U+007B LEFT CURLY BRACKET) в шаблоне регулярного выражения, запомните простое правило — необходимо каким-либо образом экранировать каждый литеральный экземпляр. Обычно проще всего предварять его обратной косой чертой, как "\{" или заключить его в квадратные скобки ("[{]"). Если разделители шаблона также являются фигурными скобками, соответствующая правая фигурная скобка ("}") также должна быть экранирована, чтобы избежать путаницы для парсера, например,

qr{abc\{def\}ghi}

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

Контексты, где не генерируются предупреждения или ошибки:

  • как первый символ в шаблоне или после "^", указывающего на привязку совпадения к началу строки.

  • как первый символ после "|", указывающего на альтернативу.

  • как первый символ в скобочном группировании, например

    /foo({bar)/
    /foo(?:{bar)/
  • как первый символ после квантификатора

    /\s*{/
Неэкранированный литеральный '%c' в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(W regexp) (только в use re 'strict')

В пределах области use re 'strict' в шаблоне регулярного выражения вы включили неэкранированный } или ], который был интерпретирован буквально. Эти два символа иногда являются метасимволами, а иногда литералами, в зависимости от того, что предшествует им в шаблоне. Это отличается от аналогичного ), который всегда является метасимволом, если не экранирован.

Это действие на расстоянии, возможно, на большом расстоянии, может привести к тому, что Perl будет молча неправильно интерпретировать то, что вы имели в виду, поэтому когда вы указываете, что хотите дополнительную проверку use re 'strict', генерируется это предупреждение. Если вы имели в виду символ как литерал, просто подтвердите это для Perl, предваряя символ обратной косой чертой или сделав его частью символьного класса в квадратных скобках (например, [}]). Если вы имели в виду его в качестве закрывающей соответствующей [ или {, вам нужно будет просмотреть шаблон, чтобы понять, почему этого не происходит.

Неудачная операция unexec из %s в %s!

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

Неожиданный бинарный оператор '%c' без предшествующего операнда в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

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

(?[ | \p{Digit} ])

где "|" — бинарный оператор с операндом справа, но без операнда слева.

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

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

(?[ z ])

Внутри (?[ ]), не допускаются литеральные символы, если они не находятся внутри внутренней пары квадратных скобок, например

(?[ [ z ] ])

Еще один вариант — вы забыли обратную косую черту. Perl недостаточно умен, чтобы понять, что вы имели в виду.

Неожиданное постоянное lvalue входа в подпрограмму через тип/targ %d:%d

(P) При компиляции вызова подпрограммы в контексте lvalue Perl не прошёл внутреннюю проверку непротиворечивости. Он столкнулся с некорректным деревом операторов.

Неожиданный выход %u

(S) exit() был вызван или скрипт иначе завершился успешно, когда PERL_EXIT_WARN было установлено в PL_exit_flags.

Неожиданный выход с ошибкой %d

(S) Был вызван необработанный die(), когда PERL_EXIT_WARN было установлено в PL_exit_flags.

Неожиданная ')' в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

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

(?[ ( \p{Digit} + ) ])

")" находится вне контекста. По всей видимости, что-то должно было быть объединено с цифрами, или "+" не должно было быть там, или что-то подобное. Perl не может понять, что было задумано.

Неожиданный ']' без последующей ')' в (?[... в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

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

Неожиданная '(' без предшествующего оператора в регулярном выражении; отмечено <-- ЗДЕСЬ в 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 не реализованы в (?[...]) в регулярном выражении; отмечено <-- ЗДЕСЬ в 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';.

Неизвестное имя символа '%s'

(F) Имя, которое вы использовали внутри \N{} Perl не знает. Проверьте правописание. Вы можете использовать use charnames ":loose" для того, чтобы не нужно было быть таким точным в отношении пробелов, тире и регистров в стандартных именах Unicode. (Любые пользовательские псевдонимы, которые были созданы, должны быть указаны точно, независимо от того, используется :loose или нет.) Эта ошибка также может произойти, если \N{} не находится в области действия соответствующего use charnames.

Неизвестный конструктор '(*...)' '%s' в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

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

Ошибка неизвестного типа

(P) Perl собирался вывести сообщение об ошибке в $@, но переменная $@ не существовала, даже после попытки её создания.

Неизвестная категория локали %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. Кто-то сильно запутался или, возможно, пытается подорвать заполнение Perl %ENV в корыстных целях.

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

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

if ($a =~ /foo/and $bar == 3) { ... }

Флаг "a" является допустимым, но "n" — нет, и это вызывает ошибку. Вероятно, вместо этого имелось в виду:

if ($a =~ /foo/ and $bar == 3) { ... }
Неизвестный подпрагма "re" '%s' (известные — это: %s)

(W) Вы попытались использовать неизвестный подпрагма прагмы "re".

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

(F) Часть условия конструкции (?(condition)if-clause|else-clause) неизвестна. Условие должно быть одним из следующих:

(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

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

Неизвестная буква опции Unicode '%c'

(F) Вы указали неизвестную опцию Unicode. См. документацию по ключу -C в perlrun для списка известных опций.

Неизвестное значение опции Unicode %d

(F) Вы указали неизвестное значение опции Unicode. См. документацию по ключу -C в perlrun для списка известных опций.

Неизвестный шаблон глагола '%s' в регулярном выражении; отмечено <-- HERE в m/%s/

(F) Вы либо сделали ошибку в написании, либо неправильно поставили квантификатор * после открывающей фигурной скобки в вашем шаблоне. Проверьте шаблон и перечитайте perlre для получения подробной информации о допустимых шаблонах глаголов.

Неизвестная категория предупреждений '%s'

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

Обратите внимание, что если вы хотите включить категорию предупреждений, зарегистрированную модулем (например, use warnings 'File::Find'), этот модуль должен быть загружен.

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

(F) Скобки вокруг класса символов должны соответствовать друг другу. Если вы хотите включить закрывающую скобку в класс символов, экранируйте её или поставьте её первой. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.

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

(F) В регулярных выражениях неэкранированные круглые скобки всегда должны быть сбалансированы. Если вы пользователь vi, клавиша % может быть полезна для поиска соответствующей скобки. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.

Незакрытая правая скобка %s

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

Неоцитированная строка "%s" может конфликтовать с будущим ключевым словом

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

Нераспознанный символ %s; отмечено <-- HERE после %s в столбце %d

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

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

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

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

(W regexp) Вы использовали комбинацию обратной косой черты и символа, которая не распознаётся Perl внутри класса символов. Символ был понят буквально, но это может измениться в будущих версиях Perl. <-- HERE показывает, где в регулярном выражении был обнаружен escape.

Нераспознанный escape \%c передан

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

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

(W regexp) Вы использовали комбинацию обратной косой черты и символа, которая не распознаётся Perl. Символы были поняты буквально, но это может измениться в будущих версиях Perl. <-- HERE показывает, где в регулярном выражении был обнаружен escape.

Нераспознанное имя сигнала "%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 Byte Order Mark (BOM), который объявляет его кодировку Unicode, которую Perl не может прочитать.

Функция работы с сокетами "%s" не поддерживается

(F) Ваша система не поддерживает механизм сокетов Berkeley, или, по крайней мере, так решил Configure.

Незакрытый аргумент '(*...' в регулярном выражении; отмечено <-- HERE в m/%s/

(F) Вы использовали шаблон (*...:...), но не завершили его ). Исправьте шаблон и повторите попытку.

Незавершенный список атрибутов

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

Незавершенный параметр атрибута в списке атрибутов

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

Незавершенное сжатое целое число

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

Незавершенная конструкция '(*...' в регулярном выражении; отмечено <-- HERE в m/%s/

(F) Вы использовали шаблон вида (*...), но не завершили его ). Исправьте шаблон и повторите попытку.

Незавершенный разделитель для здесь-документа

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

<<"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 в контексте void

(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; без каких-либо аргументов. Это не очень полезно.

Бесполезное использование sort в скалярном контексте

(W void) Вы использовали sort в скалярном контексте, как в:

my $x = sort @y;

Это не очень полезно, и Perl в настоящее время оптимизирует это.

Бесполезное использование %s без значений

(W syntax) Вы использовали функцию push() или unshift() без аргументов, кроме массива, например, push(@x) или unshift(@foo). Обычно это не окажет никакого эффекта на массив, поэтому совершенно бесполезно. В принципе, push(@tied_array) может иметь некоторый эффект, если массив привязан к классу, который реализует метод PUSH. В этом случае вы можете записать его как push(@tied_array,()), чтобы избежать этого предупреждения.

"use" недопустим в выражении

(F) Ключевое слово "use" распознается и выполняется во время компиляции и не возвращает полезного значения. См. perlmod.

Использование простого << для обозначения <<"" запрещено

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

Использование простого разделителя было устаревшим в 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 устаревшее) Использование goto для перехода из внешнего области в внутреннюю область устарело и должно быть избегаемо.

Это было устаревшим в Perl 5.12.

Использование '%s' в \p{} или \P{} устарело, потому что: %s

(D устаревшее) Некоторые свойства устарели в 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 запрещено в подмассивах с дикими картами свойств 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, устаревшее) Вы передали 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) Экранированные символы Unicode (\N{...}) могут возвращать многосимвольные последовательности. Хотя класс символов должен соответствовать только одному символу входных данных, Perl будет правильно соответствовать всей последовательности, за исключением случаев, когда класс инвертирован ([^...]), или если escape-последовательность является началом или концом диапазона. В этих случаях поведение не ясно. В таких обстоятельствах Perl отбрасывает все символы возвращаемой последовательности, кроме первого, что, вероятно, не то, что вы хотите.

Использование только одиночных символов, возвращённых \p{} в (?[...]) в регулярном выражении; отмечено <-- HERE в m/%s/

(W regexp) Расширенные классы символов в настоящее время не могут обрабатывать операнды, которые возвращают более одного символа. Эти операнды удаляются из результатов расширения \p{}.

Эта ситуация может возникнуть, например, в

(?[ \p{name=/KATAKANA/} ])

"KATAKANA LETTER AINU P" — законное имя Юникода (технически «именованная последовательность»), но на самом деле это два символа. Вышеуказанное выражение будет соответствовать только именам Юникода, содержащим 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" вы обращались к глобальной переменной, которую, по-видимому, считали импортированной из другого модуля, потому что что-то другое с таким же именем (обычно подпрограмма) экспортируется этим модулем. Обычно это означает, что вы поставили неправильный символ перед вашей переменной.

Обратная ссылка переменной длины не реализована в регулярном выражении 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, чтобы он не соответствовал лигатурам.

Другой вариант для Perls, начиная с 5.16, если вам нужны только соответствия ASCII, — добавить модификатор /aa к регулярному выражению. Это исключит все эти неочевидные соответствия, тем самым устранив это сообщение. Вы также можете сказать

use if $] ge 5.016, re => '/aa';

чтобы применить /aa ко всем регулярным выражениям, скомпилированным в этой области. Смотрите re.

Переменная "%s" %s маскирует более раннее объявление в том же %s

(W shadow) Переменная с "my", "our" или "state" была переопределена в текущей области видимости или операторе, фактически исключив весь доступ к предыдущему экземпляру. Это почти всегда ошибка в написании. Обратите внимание, что предыдущая переменная всё ещё будет существовать до конца области видимости или до уничтожения всех ссылок на неё из замыканий.

Синтаксис переменных

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

Переменная "%s" не останется общей

(W closure) Внутренняя (вложенная) именованная подпрограмма ссылается на лексическую переменную, определённую во внешней именованной подпрограмме.

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

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

векторный аргумент не поддерживается в альфа-версиях

(S printf) Формат (s)printf %vd не поддерживает объекты версии с альфа-частями.

Шаблон глагола '%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

Так как различные ошибки могут быть обнаружены только close() (например, буферизация может позволить print в этом примере возвращать true даже при полном диске), опасно игнорировать его результат. Поэтому при неявном выполнении Perl будет выводить предупреждения об ошибках.

До версии 5.22.0 Perl игнорировал такие ошибки, поэтому приведенный выше шаблон кода мог привести к скрытой потере данных.

Предупреждение: Использование "%s" без скобок неоднозначно

(S ambiguous) Вы написали унарный оператор, за которым следует что-то, похожее на бинарный оператор, который также мог быть интерпретирован как терм или унарный оператор. Например, если вы знаете, что функция rand имеет аргумент по умолчанию 1.0, и вы пишете

rand + 5;

вы можете ПОНЯТЬ, что написали то же самое, что и

rand() + 5;

но на самом деле у вас получилось

rand(+5);

Поэтому поставьте скобки, чтобы указать, что вы действительно имеете в виду.

когда экспериментально

(S experimental::smartmatch) when зависит от smartmatch, который является экспериментальным. Кроме того, у него есть несколько особых случаев, которые могут быть не очевидны сразу, и их поведение может измениться или даже быть удалено в любой будущей версии Perl. См. объяснение в разделе ""Экспериментальные подробности по 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 рассматривает этот символ как указанный код Юникода. Сочетание не-UTF-8 кодировок и Юникода опасно. Практически наверняка некоторые символы будут иметь два разных представления. Например, в кодировке 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" не отображается в Юникод

(S utf8) При чтении в разных кодировках Perl пытается преобразовать всё в символы Юникода. Считанные байты не являются допустимыми в этой кодировке. Например

utf8 "\xE4" does not map to Unicode

если вы пытаетесь прочитать а-диарезес Latin-1 как UTF-8.

'X' вне строки

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

'x' вне строки в unpack

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

ВЫ ЕЩЕ НЕ ОТКЛЮЧИЛИ СКРИПТЫ SET-ID В ЯДРЕ!

(F) И вы, вероятно, никогда не сделаете этого, потому что, скорее всего, у вас нет исходных кодов вашего ядра, и ваш поставщик, вероятно, не заботится о том, чего вы хотите. Есть уязвимость в любом месте, где у вас есть скрипт set-id, и чтобы её устранить, вам нужно удалить бит set-id из скрипта, который вы пытаетесь запустить. Чтобы фактически запустить скрипт set-id, ваш лучший вариант — поместить оболочку set-id C вокруг вашего скрипта.

Вам нужно заключить "%s" в кавычки

(W syntax) Вы присвоили имя голого слова обработчику сигнала. К сожалению, у вас уже есть подпрограмма с таким именем, что означает, что Perl 5 попытается вызвать подпрограмму при выполнении присваивания, чего вы, вероятно, не хотите. (Если это то, что вы хотите, поставьте & перед именем.)

Ваши случайные числа не так случайны

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

Регулярное выражение нулевой длины \N{}; помечено <-- HERE в m/%s/

(F) Имена эскейпов символов Юникода (\N{...}) могут возвращать последовательность нулевой длины. Такой эскейп был использован в расширенном классе символов, т.е. (?[...]), или в use re 'strict', что недопустимо. Проверьте, что используется правильный эскейп и правильный обработчик имен символов. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема.

См. также

warnings, diagnostics.

© 1993–2020 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.32.0/perldiag

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API