Spec-Zone.ru › Perl 5.36

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 experimental::refaliasing) Это предупреждение выводится, если вы используете конструктор ссылки в левой части присваивания для алиасирования одной переменной к другой. Просто подавите предупреждение, если хотите использовать эту возможность, но знайте, что тем самым вы рискуете использовать экспериментальную функцию, которая может измениться или быть удалена в будущей версии Perl:

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

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

alpha->numify() с потерей информации

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

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

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

Чтобы принудительно интерпретировать как вызов подпрограммы, поставьте амперсанд перед именем подпрограммы или укажите имя с пакетом. В качестве альтернативы, вы можете импортировать подпрограмму (или предположить, что она импортирована с помощью use subs) 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 I/O вы забыли закрывающую скобку ) для списка аргументов. (Слои заботятся о преобразовании данных между внешним и внутренним представлениями). Perl остановил разбор списка слоёв на этом этапе и не пытался добавить этот слой. Если ваш код явно не запрашивал не удавшуюся операцию, это может быть результатом значения переменной окружения PERLIO.

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

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

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

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

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

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

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

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

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

(S внутреннее) Счётчики ссылок испортились для псевдонимов символов.

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

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

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

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

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

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

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

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

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

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

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

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

av_reify вызван для связанного массива

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

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

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

Неправильный шаблон подстановки, оценённый с помощью eval

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

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

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

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

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

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

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

(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" не допускается при использовании "strict subs"

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

Оголённое слово "%s" ссылается на несуществующий пакет

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

Использование оголённого дескриптора файла "%s" запрещено при включении 'без функции "bareword_filehandles"'

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

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

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

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

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

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

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

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

Двоичное число > 0b11111111111111111111111111111111 не переносимо

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

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

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

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

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

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

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

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

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

builtin::import может быть вызван только на этапе компиляции

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

Обратный вызов вызвал exit

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

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

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

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

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

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

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

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

Невозможно открыть %s как dirhandle: он уже открыт как filehandle

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

Невозможно открыть %s как filehandle: он уже открыт как dirhandle

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

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

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

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

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

Нельзя "%s" вне блока "defer"

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

Нельзя "%s" вне блока "finally"

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

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

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

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

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

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

(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 в %s в %s

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

*foo += 1;

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

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

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

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

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

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

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

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

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

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

(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), рассмотрите возможность использования ограниченной формы предикатов локали (см. "The "use locale" pragma" in perllocale) типа "use locale ':not_characters'".

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Метка %s не найдена

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

Файл %s не найден в переменной PATH

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

Файл %s не найден в переменной PATH, '.' не входит в PATH

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

Невозможно найти символ завершения строки %s до конца файла

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(F) Команда "goto" была выполнена для перехода в середину цикла foreach. Невозможно перейти туда из здесь. См. "goto" в perlfunc.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Невозможно найти пакет %s для @%s::ISA

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(S 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 потерял свой environ, или определить PERL_ENV_TABLES (см. perlvms), чтобы environ не проверялся.

Невозможно повторно объявить "%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 из подпрограммы-lvalue

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

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

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

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

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

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

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

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

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

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

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

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

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

Невозможно улучшить %s (%d) до %d

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

if (%hash) {
   # not empty
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(F) Вы попытались ослабить не ссылку. Ослабить можно только ссылки.

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

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

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

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

Символ после "\c" должен быть печатаемым символом ASCII

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

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

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

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

Символ в формате 'C' внутри pack

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

pack("C", $x)

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

pack("C", $x & 255)

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

Символ в формате 'c' внутри pack

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

pack("c", $x)

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

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

Если вам действительно нужно упаковать коды символов Unicode, используйте формат "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.

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

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

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

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

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

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

closedir() для невалидного каталожного дескриптора %s

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

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

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

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

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

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

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

Код отсутствует после '/'

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

Code point 0x%X не является Unicode и не является переносимым

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

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

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

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

Code point 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 recursion) Эта подпрограмма вызвала себя (прямо или косвенно) более чем в 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"}
Разделитель для документа here слишком длинный

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

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

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

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

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

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

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

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

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

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

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

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

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

Died

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

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

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

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

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

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

(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) Внутренняя обработка магических переменных была проклята.

Преобразование объявления use VERSION ниже v5.11 устарело

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

(Вам нужно предварительно объявить %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.

Duplicate free() проигнорировано

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

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

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

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

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

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' и расширяется до символа NUL.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

EVAL without pos change exceeded limit in regex; marked by <-- HERE in m/%s/

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

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

Excessively long <> operator

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

exec? I'm not *that* kind of operating system

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

Выход из формата с помощью %s

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

Выход из псевдоблока с помощью %s

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

Выход из подпрограммы с помощью %s

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

Выход из подстановки с помощью %s

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

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

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

(?13

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

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

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

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

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

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

(F) Чтобы использовать алиасирование через ссылки, сначала необходимо включить эту возможность:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Критическая ошибка VMS (код %d) в %s, строка %d

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Окончательный символ $ должен быть \$ или $имя

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

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

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

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

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

for my (...) экспериментальная функция

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

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

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

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

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

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

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

if ($foo = 123)

вместо

if ($foo == 123)

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

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

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

gdbm хранение вернуло %d, errno %d, ключ "%s"

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

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. См. объяснение в "Experimental Details on given and when" в perlsyn.

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

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

glob неудался (%s)

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

Glob не завершён

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

gmtime(%f) неудался

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

%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) Именованные escapes Юникод-символов (\N{...}) могут возвращать последовательность нулевой длины. При использовании такого escape в классе символов его поведение не определено. Проверьте, используется ли правильный escape и соответствующий обработчик charname.

Недопустимая %s цифра '%c' проигнорирована

(W цифра) Здесь %s — одно из "двоичное", "восьмеричное" или "шестнадцатеричное". Вы, возможно, использовали цифру, не являющуюся допустимой для заданного типа, например, только 0 и 1 для двоичного числа. Для восьмеричных чисел это поднимается только в том случае, если недопустимый символ — '8' или '9'. Для шестнадцатеричных чисел 'A' - 'F' и 'a' - 'f' являются допустимыми. Интерпретация числа остановлена непосредственно перед нарушающей цифрой или символом.

Недопустимая двоичная цифра '%c'

(F) Вы использовали цифру, отличную от 0 или 1, в двоичном числе.

Недопустимый символ после '_' в прототипе для %s : %s

(W недопустимыйпрототип) В объявлении прототипа был обнаружен недопустимый символ. Символ '_' в прототипе должен следовать за ';', указывающий, что остальные параметры являются необязательными, или одним из '@' или '%', так как эти два принимают 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 недопустимыйпрототип) В объявлении прототипа был обнаружен недопустимый символ. Допустимые символы в прототипах — $, @, %, *, ;, [, ], &, \, и +. Возможно, вы пытались написать сигнатуру подпрограммы, но не включили эту функцию предварительно (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).

Неправильный скрипт с правами suid

(F) Скрипт, запущенный с правами suidperl, был каким-то образом неправильным.

Неправильный ключ в PERL5OPT: -%c

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

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

(F) Вы указали имя свойства, похожее на Unicode, в шаблоне регулярного выражения (используя \p{} или \P{}), которое Perl не распознает как официальное свойство Unicode и, вероятно, должно было быть именем пользовательского свойства, но им оно не может быть, поскольку должно начинаться с In или Is. Проверьте написание. См. также "Не найдено определение свойства Unicode "%s"".

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

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

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

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

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

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

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

Неявное использование @_ в %s с подпрограммой со сигнатурой - экспериментально

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

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

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

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

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

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

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

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

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

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

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

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

Бесконечная рекурсия в пользовательском свойстве

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

Перестройте определения своих свойств, чтобы избежать этого.

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

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

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

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

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

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

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

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

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

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

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

(F) Вы не можете использовать system(), exec() или открытие с помощью管道 в скрипте с правами setuid или setgid, если $ENV{PATH} содержит каталог, доступный для записи всем. Кроме того, PATH не должен содержать относительных каталогов. См. perlsec.

Небезопасный $ENV{%s} при запуске %s

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

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

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

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

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

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

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

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

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

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

(W 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 не соответствует одному символу при преобразовании из кодировки, указанной с помощью pragma кодировки. 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 -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-string» с точками и десятичными значениями, начинающаяся с символа '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...)' скобка '(' и звёздочка '*' должны быть смежными в регулярном выражении; помечено <-- ЗДЕСЬ в m/%s/
Инвертирование класса символов, содержащего последовательность из нескольких символов, запрещено в регулярном выражении; помечено <-- ЗДЕСЬ в 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' — неизвестный тип границы в регулярном выражении; помечено <-- ЗДЕСЬ в m/%s/

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

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

(F) Указанный вами шаблон может привести к бесконечной работе регулярного выражения, поэтому он запрещён. <-- ЗДЕСЬ показывает, где в регулярном выражении была обнаружена проблема. См. 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" в регулярном выражении; помечено <-- ЗДЕСЬ в m/%s/

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

Вы указали символ, у которого есть более простой способ записи, который также переносим на платформы с различными наборами символов.

$* больше не поддерживается начиная с Perl 5.30

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

Вместо использования $* вы должны использовать модификаторы регулярных выражений /m (и, возможно, /s). Вы можете включить /m для лексической области (даже для всего файла) с use re '/m'. (В более старых версиях: когда $* имело значение "истина", все регулярные выражения вели себя так, как будто они были написаны с использованием /m.)

Использование этой переменной станет фатальной ошибкой в Perl 5.30.

$# больше не поддерживается начиная с Perl 5.30

(F) Специальная переменная $#, устаревшая в старых версиях Perl, была удалена начиная с 5.10.0, больше не поддерживается и является фатальной ошибкой начиная с Perl 5.30. Вместо этого следует использовать функции printf/sprintf.

'%s' — не ссылка на код

(W overload) Второй (четвертый, шестой и т. д.) аргумент overload::constant должен быть ссылкой на код. Либо анонимная подпрограмма, либо ссылка на подпрограмму.

'%s' — не тип, подлежащий перегрузке

(W overload) Вы попытались перегрузить тип константы, который неизвестен пакету overload.

'%s' не распознан как встроенная функция

(F) Была предпринята попытка use модуль прагмы builtin для создания лексического псевдонима для неизвестного имени функции.

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

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

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

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

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

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

Это может измениться в будущем, см. Support \K in lookarounds.

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

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

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

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

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

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

Отключение эффективных %s завершилось с ошибкой

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

length/код после конца строки в 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 несовместимы (получено %s ключ рукопожатия %p, необходимо %p)

(P) Библиотека динамической загрузки .so или .dll загружалась в процесс, который был скомпилирован с другой версией Perl, чем эта библиотека.

Переустановка модуля XS, скорее всего, исправит эту ошибку.

Локаль '%s' содержит (по крайней мере) следующие символы, имеющие неожиданные значения: %s Программа Perl будет использовать ожидаемые значения

(W locale) Вы используете локаль UTF-8 с именем. Ожидается, что локали UTF-8 будут иметь определённое поведение, и большинство из них ему соответствует. Это сообщение появляется, когда Perl обнаруживает отклонения от ожидаемого поведения и сообщает вам, что ожидаемое поведение перекрывает эти различия.

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

Одним из таких примеров является то, что, вопреки утверждениям, Unicode не полностью игнорирует локаль. У турецкого и некоторых родственных языков есть два типа символов "I". Один с точкой в верхнем и нижнем регистре, а другой — без точки в обоих случаях. Unicode позволяет локали использовать либо турецкие правила, либо правила, используемые во всех других случаях, где существует только один тип "I", без точки в верхнем регистре и с точкой в нижнем. Ядро Perl пока не обрабатывает турецкий случай, и это сообщение предупреждает вас об этом. Вместо этого модуль Unicode::Casing позволяет в основном реализовать турецкие правила изменения регистра.

Другой распространённой причиной являются символы

$ + < = > ^ ` | ~

Эти символы вызывают проблемы. Стандарт C гласит, что их следует рассматривать как знаки препинания в C локали (и стандарт POSIX ссылается на стандарт C), и Unicode, как правило, рассматривается как супермножество C локали. Однако Unicode добавил дополнительную категорию «Символ» и классифицирует эти символы как символы. Большинство локалей UTF-8 обрабатывают их как знаки препинания, так что ispunct(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 (начиная с v5.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 в строке формата без соответствующего аргумента, чтобы Perl записал текущую длину строки.

Отсутствует аргумент в %s

(W missing) Вы вызвали функцию с меньшим количеством аргументов, чем указано в других аргументах.

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

Отсутствует аргумент для -%c

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

Отсутствуют фигурные скобки у \N{}
Отсутствуют фигурные скобки у \N{} в регулярном выражении; помечено <-- ЗДЕСЬ в m/%s/

(F) Неправильный синтаксис литерала имени символа \N{charname} в контексте двойных кавычек. Это также может произойти, когда есть пробел (или комментарий) между \N и { в регулярном выражении с модификатором /x. Этот модификатор не изменяет требования, что фигурная скобка должна следовать непосредственно за \N.

Отсутствуют фигурные скобки у \o{}

(F) \o должно быть непосредственно после { в контексте двойных кавычек.

Отсутствует запятая после первого аргумента функции %s

(F) Хотя некоторые функции позволяют вам указать дескриптор файла или «косвенный объект» перед списком аргументов, эта функция не из них.

Отсутствует команда в открытии по конвейпу

(W pipe) Вы использовали конструкцию open(FH, "| command") или open(FH, "command |"), но команда отсутствовала или была пустой.

Отсутствует имя управляющего символа в \c

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

Отсутствует ']' в прототипе для %s : %s

(W illegalproto) Группировка началась с [, но никогда не закрывалась ].

Отсутствует имя в "%s подпрограмма"

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

Отсутствует $ у переменной цикла

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

(Отсутствует оператор перед %s?)

(S syntax) Это обоснованное предположение, сделанное в сочетании с сообщением «%s найден, где ожидался оператор». Часто отсутствующим оператором является запятая.

Отсутствующий или неопределённый аргумент для %s

(F) Вы пытались вызвать require или do без аргумента или с неопределённым значением в качестве аргумента. Require ожидает имя пакета или описание файла в качестве аргумента; do ожидает имя файла. См. "require EXPR" в perlfunc и "do EXPR" в perlfunc.

Отсутствует правая фигурная скобка у \%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

PerlIO::scalar также выведет это сообщение как предупреждение, если вы попытаетесь открыть скаляр только для чтения для записи.

Попытка изменения значения массива, которое невозможно создать, %s

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

Попытка изменить значение хэш-таблицы, которое нельзя создать, %s

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

Имя модуля должно быть константой

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

Имя модуля требуется с опцией -%c

(F) Опции -M или -m указывают Perl на загрузку модуля, но вы опустили имя модуля. Обратитесь к perlrun за подробной информацией об опциях -M и -m.

Более одного аргумента для открытия функции '%s'

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

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

(S) Вы скомпилировали Perl с опцией -DPERL_DEBUG_READONLY_COW (см. "Копирование при записи" в 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) На вашей системе нет IPC сообщений System V.

Многомерный поиск в хэш-таблице отключен

(F) Вы передали список индексов для поиска в хэш-таблице по no feature "multidimensional";, например:

$z = $foo{$x, $y};

что по умолчанию работает как:

$z = $foo{join($;, $x, $y)};
Многомерный синтаксис %s не поддерживается

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

Не разрешается использование нескольких параметров со 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) Новое значение \N как [^\n] (начиная с Perl 5.12) не является допустимым в квадратных скобках класса символов по той же причине, что . в классе символов теряет свою специфику: оно соответствует почти всему, что, вероятно, не является желаемым.

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

(F) Имена Юникода с экранированием (\N{...}) могут возвращать последовательность из нескольких символов. Несмотря на то, что класс символов должен соответствовать только одному символу входных данных, Perl будет правильно сопоставлять всю последовательность, за исключением определённых условий. В настоящее время это

Когда класс инвертирован ([^...])

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

Экранирование является начальной или конечной точкой диапазона

Аналогично неясным является то, что должно быть сгенерировано, когда \N{...} используется в качестве одной из конечных точек диапазона, например, в

[\x{41}-\N{ARABIC SEQUENCE YEH WITH HAMZA ABOVE WITH AE}]

Здесь неясно, что подразумевается, так как экранирование \N{...} представляет собой последовательность кодовых точек, поэтому это считается ошибкой.

В наборе регулярных выражений

Синтаксис (?[ ]) в регулярном выражении генерирует список отдельных кодовых точек, ни одна из которых не может быть последовательностью.

Запрещено использование %s во время выполнения setuid

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

Код не указан для -%c

(F) Командные опции Perl -e и -E требуют аргумента. Если вы хотите запустить пустую программу, передайте пустую строку в качестве отдельного аргумента или запустите программу, состоящую из одного 0 или 1:

perl -e ""
perl -e0
perl -e1
Запятая не допускается после %s

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

Возможной причиной этого является то, что вы ожидали импортировать константу в своё пространство имён с помощью use или import, но такого импорта не произошло. Например, возможно, ваша операционная система не поддерживает эту конкретную константу. Надеюсь, вы использовали явный список импорта для констант, которые вы ожидаете увидеть; см. "use" в perlfunc и "import" в perlfunc. Хотя явный список импорта, вероятно, поймал бы эту ошибку раньше, он, естественно, не исправляет тот факт, что ваша операционная система всё ещё не поддерживает эту константу. Возможно, у вас есть опечатка в списке символов импорта констант use или import или в имени константы в строке, где произошла эта ошибка?

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

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

Нет определённой процедуры DB::DB

(F) Текущий выполняемый код был скомпилирован с ключом -d, но по какой-то причине текущий отладчик (например, perl5db.pl или модуль Devel::) не определил процедуру, которая должна вызываться в начале каждой инструкции.

Нет dbm на этой машине

(P) Это считается внутренней ошибкой, так как в настоящее время каждая машина должна предоставлять dbm, потому что Perl поставляется с SDBM. См. SDBM_File.

Нет определённой процедуры DB::sub

(F) Текущий выполняемый код был скомпилирован с ключом -d, но по какой-то причине текущий отладчик (например, perl5db.pl или модуль Devel::) не определил процедуру DB::sub , которая должна вызываться в начале каждого обычного вызова подпрограммы.

Не найдены цифры для литерала %s

(F) После 0x не было найдено шестнадцатеричных цифр, или после 0b не было найдено двоичных цифр.

Не указан каталог для -I

(F) Командная опция -I требует имени каталога как части того же аргумента. Используйте, например, -Ilib. -I lib не сработает.

Файл ошибок отсутствует после 2> или 2>> на командной строке

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

Нет символа завершения группы '%c' в шаблоне

(F) Шаблон pack или unpack имеет открывающую '(' или '[' без соответствующей закрывающей пары. См. "pack" в perlfunc.

Файл ввода отсутствует после < на командной строке

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

Нет метода next::'%s' для %s

(F) next::method не нашёл дальнейших экземпляров этого имени метода в оставшихся пакетах MRO этого класса. Если вы не хотите, чтобы он выбрасывал исключение, используйте maybe::next::method или next::can. См. mro.

Бесконечный счётчик повторений ничего не делает

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

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

(F) В регулярном выражении был нешестнадцатеричный символ, где ожидался шестнадцатеричный, например

(?[ [ \xDG ] ])
(?[ [ \x{DEKA} ] ])
Нешестнадцатеричный символ '%c' преждевременно завершает \x. Результат: "%s"

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

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

Невосьмеричный символ в регулярном выражении; отмечен <-- HERE в m/%s/

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

(?[ [ \o{1278} ] ])
Невосьмеричный символ '%c' преждевременно завершает \o. Результат: "%s"

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

Когда не используется \o{...}, вы написали что-то вроде \08, или \179 в строке с двойными кавычками. Решение указано, при этом все, кроме последней цифры, обрабатываются как один символ, заданный в восьмеричном формате. Последняя цифра — следующий символ в строке. Чтобы указать Perl, что именно это вы хотите, можно использовать синтаксис \o{ }, или использовать ровно три цифры для задания восьмеричного значения символа.

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

"no" не допускается в выражении

(F) Ключевое слово "no" распознаётся и выполняется во время компиляции и не возвращает полезного значения. См. perlmod.

Переданное нестроковое значение в качестве маски битов

(W misc) В качестве аргумента маски битов для select передано число. Используйте функцию vec() для построения масок битов дескрипторов файлов для select. См. "select" в perlfunc.

Файл вывода отсутствует после > на командной строке

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

Файл вывода отсутствует после > или >> на командной строке

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

Имя пакета недопустимо для подпрограммы %s в "our"
Имя пакета недопустимо для переменной %s в "our"

(F) Полностью квалифицированные имена подпрограмм и переменных недопустимы в объявлениях "our", потому что это не имеет смысла по существующим правилам. Такой синтаксис зарезервирован для будущих расширений.

Скрипт Perl не найден во вводе

(F) Вы вызвали perl -x, но в файле не найдена строка, начинающаяся с #! и содержащая слово "perl".

setregid не доступен

(F) Configure не нашёл ничего, похожего на вызов setregid() для вашей системы.

setreuid не доступен

(F) Configure не нашёл ничего, похожего на вызов setreuid() для вашей системы.

Класс %s не найден

(F) Вы предоставили квалификатор класса в объявлении "my", "our" или "state", но этот класс не существует на данном этапе вашей программы.

Поле класса "%s" не найдено в переменной %s типа %s

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

Такого хука нет: %s

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

Нет такого открытого канала

(P) Ошибка, специфичная для VMS. Внутренняя процедура my_pclose() пыталась закрыть канал, который не был открыт. Это следовало бы поймать ранее как попытку закрыть незакрытый дескриптор файла.

Нет такого сигнала: SIG%s

(W signal) Вы указали имя сигнала как индекс к %SIG, которое не было распознано. Используйте команду kill -l в вашей оболочке, чтобы увидеть допустимые имена сигналов на вашей системе.

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

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

Не ссылка на CODE

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

Не ссылка на GLOB

(F) Perl пытался оценить ссылку на "typeglob" (то есть запись таблицы символов, которая выглядит как *foo), но вместо этого обнаружил ссылку на что-то другое. Вы можете использовать функцию ref(), чтобы узнать, какой тип ссылки это на самом деле. См. perlref.

Не ссылка на HASH

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

Символ '#' не допускается непосредственно после сигила в сигнатуре подпрограммы

(F) В определении сигнатуры подпрограммы комментарий, следующий за сигилом ($, @ или %), должен быть отделён пробелом или запятой и т. п., особенно для избежания путаницы с переменной $#. Например:

# bad
sub f ($# ignore first arg
       , $b) {}
# good
sub f ($, # ignore first arg
       $b) {}
Не ссылка на ARRAY

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

Не ссылка на SCALAR

(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-параметр regexp

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

Число слишком длинное

(F) Perl ограничивает представление десятичных чисел в программах примерно 250 символами. Вы превысили эту длину. В будущих версиях Perl, вероятно, будет устранено это произвольное ограничение. Тем временем, попробуйте использовать научную запись (например, "1e6" вместо "1_000_000").

Число без цифр

(F) Perl искал число, но не нашёл ничего, что выглядело как число. Это происходит, например, с \o{}, если между фигурными скобками нет числа.

Результат числового форматирования слишком большой

(F) Длина результата числового форматирования, переданного sprintf() или printf(), была слишком большой для того, чтобы функция C могла это сообщить. Это ограничение обычно составляет 2 ГБ.

Числовые переменные, содержащие более одной цифры, не могут начинаться с '0'

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

Восьмеричное число > 037777777777 не переносимо

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

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

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

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

Нечётное количество аргументов для 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 не задан в true. См. overload.

Операция "%s" возвращает свой аргумент для не-Unicode кодовой точки 0x%X

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

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

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

Операция "%s" возвращает свой аргумент для суррогата UTF-16 U+%X

(S surrogate) Вы выполнили операцию, требующую правил Юникода, над суррогатом Юникода. Юникод не одобряет использование суррогатов для чего-либо, кроме хранения строк в UTF-16, но для суррогатов (нехотя) определены правила, и они ничего не делают для этой операции. Поскольку использование суррогатов может быть опасным, Perl предупреждает.

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

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

Пропущен оператор или точка с запятой перед %s

(S ambiguous) Вы использовали переменную или вызов подпрограммы там, где синтаксический анализатор ожидал оператор. Синтаксический анализатор предположил, что вы действительно имели в виду оператор, но это, скорее всего, неверно. Например, если вы напишите "*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 скомпилирован с этой опцией, Perl может использовать содержимое $^M в качестве аварийного пула после завершения работы с сообщением об ошибке. В этом случае ошибка может быть обработана один раз, и сообщение об ошибке будет содержать строку и файл, где произошёл неудачный запрос.

Ошибка памяти при чрезвычайно большом запросе

(F) Вы не можете выделить более 2^31+"небольшое количество" байт. Эта ошибка, скорее всего, вызвана опечаткой в программе Perl. Например, $arr[time] вместо $arr[$time].

Ошибка памяти для стека yacc

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

'.' вне строки в pack

(F) Аргумент к '.' в шаблоне попытался переместить рабочую позицию перед началом упаковываемой строки.

'@' вне строки в unpack

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

'@' вне строки с некорректным UTF-8 в unpack

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

Неверный аргумент перегрузки '%s'

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

Перегруженная операция разыменования не вернула ссылку

(F) Объект с перегруженным оператором разыменования был разыменован, но перегруженная операция не вернула ссылку. См. overload.

Перегруженная функция qr не вернула REGEXP

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

Атрибут пакета %s может конфликтовать с будущим служебным словом: %s

(W reserved) Было использовано имя атрибута в нижнем регистре, имеющее обработчик для данного пакета. Это имя может получить смысл в Perl в будущем, хотя пока нет. Возможно, вам следует использовать имя атрибута с прописными буквами. См. attributes.

Переполнение счётчика повторений в pack/unpack

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

Переполнение страницы

(W io) Один вызов write() произвёл больше строк, чем помещается на странице. См. perlform.

Паника: %s

(P) Внутренняя ошибка.

Паника: попытка вызвать %s в %s

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

Паника: дочерний псевдопроцесс никогда не был запланирован

(P) Дочерний псевдопроцесс в реализации ithreads на Windows не был запланирован в течение отведённого времени и поэтому не смог должным образом инициализироваться.

Паника: ck_grep, тип=%u

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

Паника: повреждённый индекс сохранённого стека %ld

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

Паника: del_backref

(P) Не удалось выполнить внутреннюю проверку целостности при попытке сбросить слабую ссылку.

Паника: 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.

Паника: INTERPCASEMOD, %s

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

Паника: INTERPCONCAT, %s

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

Паника: kid popen errno read

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

Паника: несоответствие leave_scope %u

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

Паника: magic_killbackrefs

(P) Не удалось выполнить внутреннюю проверку целостности при попытке сбросить все слабые ссылки на объект.

Паника: malloc, %s

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

Паника: переполнение памяти

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

Паника: newFORLOOP, %s

(P) Парсер не прошёл внутреннюю проверку целостности при разборе цикла foreach.

Паника: pad_alloc, %p!=%p

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

Паника: pad_free curpad, %p!=%p

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

Паника: pad_free po

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

Паника: pad_reset curpad, %p!=%p

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

Паника: pad_sv po

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

Паника: pad_swipe curpad, %p!=%p

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

Паника: pad_swipe po

(P) Было обнаружено недопустимое смещение буфера.

Паника: pp_iter, тип=%u

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

Паника: pp_match%s

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

Паника: realloc, %s

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

Паника: несоответствие счётчика ссылок на nsv в sv_replace() (%d != 1)

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

Паника: restartop в %s

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

Паника: return, тип=%u

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

Паника: scan_num, %s

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

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

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

Паника: sv_chop %s

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

Паника: sv_insert, midend=%p, bigend=%p

(P) Функция sv_insert() получила указание удалить больше строк, чем существует в строке.

Паника: top_env

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

panic: неожиданное постоянное lvalue entersub entry через тип/targ %d:%d

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

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 парсера обнаруживаемым образом.

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

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

-p назначение: %s

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

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

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

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

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

Perl_my_%s() недоступен

(F) Ваша платформа имеет очень необычный порядок байтов и размер целых чисел, поэтому невозможно было настроить некоторые или все функции преобразования порядка байтов с фиксированной шириной. Это проблема только тогда, когда вы используете модификаторы '<' или '>' в шаблонах (un)pack. См. "pack" в perlfunc.

Perl %s требуется (вы имели в виду %s?)--это только %s, остановлено

(F) Код, который вы пытаетесь запустить, запросил более новую версию Perl, чем у вас установлена. Возможно, use 5.10 был написан вместо use 5.010 или use v5.10. Без ведущего v, число интерпретируется как десятичное, где каждые три цифры после десятичной точки представляют часть номера версии. Так 5.10 эквивалентно v5.100.

Perl %s требуется--это только %s, остановлено

(F) Модуль, о котором идет речь, использует функции версии Perl, более новой, чем текущая. Сколько времени прошло с момента последнего обновления?

См. "require" в perlfunc.

PERL_SH_DIR слишком длинный

(F) Ошибка, характерная для OS/2. PERL_SH_DIR — это каталог для поиска sh-оболочки. См. "PERL_SH_DIR" в perlos2.

PERL_SIGNALS неверный: "%s"

(X) См. "PERL_SIGNALS" в perlrun для допустимых значений.

Perl'ы начиная с %s слишком современные--это %s, остановлено

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

perl: предупреждение: Не шестнадцатеричный символ в '$ENV{PERL_HASH_SEED}', 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 в разделе PROBLEMS WITH LOCALES.

perl: предупреждение: странная настройка в '$ENV{PERL_PERTURB_KEYS}': '%s'

(S) Perl был запущен с переменной окружения PERL_PERTURB_KEYS, но она содержала неожиданное значение. Допустимые значения этого параметра следующие:

Numeric | String        | Result
--------+---------------+-----------------------------------------
0       | NO            | Disables key traversal randomization
1       | RANDOM        | Enables full key traversal randomization
2       | DETERMINISTIC | Enables repeatable key traversal
        |               | randomization

Принимаются как числовые, так и строковые значения, но обратите внимание, что строковые значения чувствительны к регистру. Значение по умолчанию для этого параметра - "RANDOM" или 1.

pid %x не является дочерним

(W exec) Предупреждение, характерное для VMS. Waitpid() было попрошено дождаться процесса, который не является дочерним процессом текущего процесса. Хотя это нормально с точки зрения VMS, это, вероятно, не то, что вы имели в виду.

'P' должен иметь явное значение размера в unpack

(F) Формат unpack P должен иметь явное значение размера, а не "*".

Неизвестный POSIX класс [:%s:] в регулярном выражении; отмечено <-- HERE в m/%s/

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

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

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

Синтаксис POSIX [%c-%c] должен быть внутри классов символов%s в регулярном выражении; отмечено <-- HERE в m/%s/

(W regexp) Perl считает, что вы имели в виду POSIX класс символов, но не использовали достаточно скобок. Эти конструкции POSIX классов [: :], [= =] и [. .] идут *внутри* классов символов, квадратные скобки являются частью конструкции, например: qr/[012[:alpha:]345]/. Скорее всего, то, к чему скомпилировалось регулярное выражение, не соответствует вашим намерениям. Например, qr/[:alpha:]/ компилируется в обычный класс символов в квадратных скобках, состоящий из четырёх символов ":", "a", "l", "h", и "p". Чтобы указать POSIX класс, он должен был быть написан qr/[[:alpha:]]/.

Обратите внимание, что [= =] и [. .] в настоящее время не реализованы; они просто заглушки для будущих расширений и вызовут фатальные ошибки. <-- HERE показывает, где была обнаружена проблема в регулярном выражении. См. perlre.

Если указание класса не было полностью корректным, сообщение об ошибке указывает это.

Синтаксис POSIX [. .] зарезервирован для будущих расширений в регулярном выражении; отмечено <-- HERE в m/%s/

(F) Внутри классов символов регулярных выражений ([]) синтаксис, начинающийся с "[." и заканчивающийся ". ]", зарезервирован для будущих расширений. Если вам нужно представить эти последовательности символов внутри класса символов регулярного выражения, просто укажите квадратные скобки с обратной косой чертой: "\[." и ".\]". <-- HERE показывает, где была обнаружена проблема в регулярном выражении. См. perlre.

Синтаксис POSIX [= =] зарезервирован для будущих расширений в регулярном выражении; отмечено <-- HERE в m/%s/

(F) Внутри классов символов регулярных выражений ([]) синтаксис, начинающийся с "[=" и заканчивающийся "=]", зарезервирован для будущих расширений. Если вам нужно представить эти последовательности символов внутри класса символов регулярного выражения, просто укажите квадратные скобки с обратной косой чертой: "\[=" и "=\]". <-- HERE показывает, где была обнаружена проблема в регулярном выражении. См. perlre.

Возможная попытка добавить комментарии в список qw()

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

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

@list = qw(
    a # a comment
    b # another comment
);

в то время как вам нужно было написать это:

@list = qw(
    a
    b
);

Если вы действительно хотите комментарии, составьте свой список старым способом, с кавычками и запятыми:

@list = (
    'a',    # a comment
    'b',    # another comment
);
Возможная попытка разделить слова запятыми

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

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

qw! a, b, c !;

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

qw! a b c !;
Возможная ошибка повреждения памяти: %s переполнил 3-й аргумент

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

Возможная проблема с приоритетом оператора управления потоком

(W 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 против %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 раз, просто напишите {0}.

Квантификатор неожиданный при нулевой длине выражения в регулярном выражении m/%s/

(W regexp) Вы применили квантификатор регулярного выражения в месте, где это не имеет смысла, например, на утверждении нулевой ширины. Попробуйте поместить квантификатор внутрь утверждения. Например, способ сопоставить "abc", при условии, что за ним следуют три повторения "xyz", это /abc(?=(?:xyz){3})/, а не /abc(?=xyz){3}/.

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

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

Диапазоны ASCII-печатьных символов должны быть подмножеством "0-9", "A-Z" или "a-z" в регулярном выражении; отмечено <-- HERE в m/%s/

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

Строгие правила помогают найти опечатки и другие ошибки. Возможно, вы даже не имели в виду здесь диапазон, если "-" должно было быть другим символом или должно было быть экранировано (например, "\-"). Если вы действительно имели в виду диапазон, тот, который был использован, не является переносимым между платформами ASCII и EBCDIC и не имеет очевидного смысла для случайного читателя.

[3-7]    # OK; Obvious and portable
[d-g]    # OK; Obvious and portable
[A-Y]    # OK; Obvious and portable
[A-z]    # WRONG; Not portable; not clear what is meant
[a-Z]    # WRONG; Not portable; not clear what is meant
[%-.]    # WRONG; Not portable; not clear what is meant
[\x41-Z] # WRONG; Not portable; not obvious to non-geek

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

refcnt_dec: fd %d%s
refcnt: fd %d%s
refcnt_inc: fd %d%s

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

Найден ссылка там, где ожидался список чётной длины

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

%hash = { one => 1, two => 2, };    # WRONG
%hash = [ qw/ an anon array / ];    # WRONG
%hash = ( one => 1, two => 2, );    # right
%hash = qw( one 1 two 2 );                  # also fine
Ссылка уже слабая

(W misc) Вы попытались ослабить ссылку, которая уже является слабой. Это не оказывает никакого эффекта.

Ссылка не является слабой

(W misc) Вы попытались ослабить ссылку, которая не является слабой. Это не оказывает никакого эффекта.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

'(*%s' требует завершающего ':' в регулярном выражении; помечено <-- ЗДЕСЬ в m/%s/

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

'%s' разрешено в '\o{%s}%d'

Начиная с Perl 5.32, это сообщение больше не генерируется. Вместо этого см. "Недесятичный символ '%c' прерывает \o преждевременно. Разрешено как "%s"". (W misc, regexp) Вы написали что-то вроде \08, или \179 в строке с двойными кавычками. Все, кроме последней цифры, интерпретируются как один символ, указанный в восьмеричной системе счисления. Последняя цифра — это следующий символ в строке. Чтобы сказать Perl, что именно это вы хотите, вы можете использовать синтаксис \o{ }, или использовать ровно три цифры для указания восьмеричного числа для символа.

Обратный оператор %s=

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

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

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

Утечка скаляров: %d

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

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

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

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

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

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

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

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

(F) Лексер не смог найти конечный разделитель конструкции // или m{}. Помните, что разделители в скобках учитывают уровень вложенности. Пропущенный ведущий $ из переменной $m может вызвать эту ошибку.

Обратите внимание, что с Perl 5.10.0 // также может быть конструкцией «определено или», а не просто пустым шаблоном поиска. Поэтому код, написанный в Perl 5.10.0 или более поздних версиях, использующий // как конструкцию «определено или», может быть неправильно проанализирован Perl до версии 5.10.0 как шаблон поиска, не имеющий окончания.

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

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

%sseek() на незапущенном дескрипторе файла

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

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

(F) Эта машина не реализует системный вызов select().

Самосвязи массивов и хэшей не поддерживаются

(F) Самосвязи массивов и хэшей не поддерживаются в текущей реализации.

Точка с запятой пропущена

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

полупаника: попытка дублировать освобожденную строку

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

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

(F) На вашем компьютере нет IPC-семафоров System V.

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

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

Последовательность «\c{» неверна

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

Неполное выражение (? в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

(F) Регулярное выражение закончилось неполным расширением (?). <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.

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

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

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

(F) Вы использовали расширение регулярного выражения, которое не имеет смысла. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема. Это может произойти при использовании конструкции (?^...), чтобы указать Perl на использование стандартных модификаторов регулярных выражений, и вы избыточно указали стандартный модификатор. Для других причин, см. perlre.

Незаконченный комментарий (?#... в регулярном выражении m/%s/

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

Незаконченное именованное обращение (?&... в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

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

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

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

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

(F) Выражение с предсказанием (?=...) или (?!...) или обратным предсказанием (?<=...) или (?<!...) было без заключительной скобки. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема.

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

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

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

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

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

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

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

(F) Код Perl внутри {...} должен завершаться скобкой ')'.

Незаконченное именованное обращение (?P>... в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

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

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

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

Незаконченное именованное обращение ?P=... в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/

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

Незаконченное выражение (?R) в регулярном выражении m/%s/

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

Ошибка сервера 500

(A) Это сообщение об ошибке, которое обычно отображается в окне браузера при попытке выполнения CGI-программы (включая SSI) через веб. Фактический текст ошибки сильно варьируется от сервера к серверу. Наиболее часто встречающиеся варианты — "Ошибка сервера 500", "Метод (что-то) запрещён", "Документ не содержит данных", "Преждевременное завершение заголовков скрипта" и "Не создан допустимый заголовок".

Это ошибка CGI, а не ошибка Perl.

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

https://www.perl.org/CGI_MetaFAQ.html
http://www.htmlhelp.org/faq/cgifaq.html
http://www.w3.org/Security/Faq/

Также следует обратиться к perlfaq9.

setegid() не реализован

(F) Вы пытались присвоить $), но ваша операционная система не поддерживает системный вызов setegid() (или эквивалент), или, по крайней мере, Configure об этом не сообщил.

seteuid() не реализован

(F) Вы пытались присвоить $>, но ваша операционная система не поддерживает системный вызов seteuid() (или эквивалент), или, по крайней мере, Configure об этом не сообщил.

setpgrp не принимает аргументы

(F) На вашей системе используется setpgrp() из BSD 4.2, который не принимает аргументов, в отличие от POSIX setpgid(), который принимает идентификатор процесса и идентификатор группы процессов.

setrgid() не реализован

(F) Вы пытались присвоить $(, но ваша операционная система не поддерживает системный вызов setrgid() (или эквивалент), или, по крайней мере, Configure об этом не сообщил.

setruid() не реализован

(F) Вы пытались присвоить $<, но ваша операционная система не поддерживает системный вызов setruid() (или эквивалент), или, по крайней мере, Configure об этом не сообщил.

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

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

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

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

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

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

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

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

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

(F) На вашем компьютере нет IPC-разделяемой памяти System V.

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

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

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

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

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

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

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

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

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

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

sleep(%u) слишком велико

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

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

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

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

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

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

(S experimental::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() с каким-то оператором после него, кроме die(). Это почти всегда ошибка, потому что exec() никогда не возвращает значение, если не произошло ошибки. Вероятно, вы хотели использовать system() вместо него, который возвращает значение. Чтобы подавить это предупреждение, поместите exec() в блок сам по себе.

Подпрограмма "state" %s не может быть в пакете

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

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

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

Переменная "state" %s не может быть в пакете

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

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

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

Строки с кодовыми точками более 0xFF могут не быть отображены в файловых дескрипторах в памяти

(W utf8) Вы попытались открыть ссылку на скаляр для чтения или добавления, где скаляр содержал кодовые точки более 0xFF. Файловые дескрипторы в памяти моделируют файлы на диске и могут содержать только байты.

Найден заглушка при разрешении метода "%s" перегрузки "%s" в пакете "%s"

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

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

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

sub foo :lvalue ($a, $b) { ... }  # 5.20 and 5.28 +
sub foo ($a, $b) :lvalue { ... }  # 5.22 .. 5.26
Подпрограмма "&%s" недоступна

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

sub { my sub a {...} sub f { \&a } }

В момент создания f, она не может захватить текущую подпрограмму "a", так как анонимная подпрограмма еще не была создана. И наоборот, следующее предупреждение не выдаст, так как анонимная подпрограмма к этому моменту была создана и активна:

sub { my sub a {...} eval 'sub f { \&a }' }->();

Во-вторых, ситуация вызвана тем, что eval обращается к лексической подпрограмме, которая вышла из области видимости, например,

sub f {
    my sub a {...}
    sub { eval '\&a' }
}
f()->();

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

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

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

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

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

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

(W замыкание) Внутренняя (вложенная) именованная подпрограмма ссылается на подпрограмму "my", определённую во внешней именованной подпрограмме.

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

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

Бесконечный цикл подстановки

(P) Подстановка находилась в бесконечном цикле. (Очевидно, подстановка не должна итерировать больше раз, чем есть символов ввода, что и произошло.) См. раздел о подстановке в "Regexp Quote-Like Operators" в perlop.

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

(F) Лексер не смог найти внутренний разделитель конструкции s/// или s{}{} . Помните, что разделители в скобках учитывают уровень вложенности. Пропуск ведущего $ из переменной $s может вызвать эту ошибку.

Замена подстановки не завершена

(F) Лексер не смог найти конечный разделитель конструкции s/// или s{}{} . Помните, что разделители в скобках учитывают уровень вложенности. Пропуск ведущего $ из переменной $s может вызвать эту ошибку.

substr за пределами строки

(W substr)(F) Вы попытались обратиться к substr(), который указывал за пределами строки. То есть, абсолютное значение смещения было больше длины строки. См. "substr" в perlfunc. Это предупреждение является фатальным, если substr используется в контексте lvalue (например, как левая часть присваивания или как аргумент подпрограммы).

sv_upgrade с типа %d вниз до типа %d

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

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

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

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

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

Условие переключения не распознано в регулярном выражении; отмечено <-- 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
(?!...) (?<!...)   true if subpattern fails to match
(?{ CODE })        true if code returns a true value
(R)                true if evaluating inside recursion
(R1) (R2) ...      true if directly inside capture group 1, 2, etc.
(R&NAME)           true if directly inside named capture
(DEFINE)           always false; for defining named subpatterns

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

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

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

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

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

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

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

A keyword is misspelled.
A semicolon is missing.
A comma is missing.
An opening or closing parenthesis is missing.
An opening or closing brace is missing.
A closing quote is missing.

Часто вместе с сообщением о синтаксической ошибке будет другое сообщение с дополнительной информацией. (Иногда помогает включить -w.) Само сообщение об ошибке часто указывает, где в строке оно прекратило попытку анализа. Иногда реальная ошибка находится на несколько токенов раньше, потому что Perl хорошо обрабатывает произвольный ввод. Иногда номер строки может быть вводящим в заблуждение, и в редких случаях единственный способ понять, что вызывает ошибку, — это вызывать perl -c многократно, отрезая половину программы каждый раз, чтобы посмотреть, исчезла ли ошибка. Это своего рода кибернетический аналог 20 вопросов.

синтаксическая ошибка в строке %d: '%s' неожиданно

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

синтаксическая ошибка в файле %s в строке %d, следующие 2 токена "%s"

(F) Эта ошибка, скорее всего, произойдёт, если вы запускаете скрипт perl5 через интерпретатор perl4, особенно если следующие 2 токена — "use strict" или "my $var" или "our $var".

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

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

%s синтаксически верен

(F) Финальное сообщение при успешном выполнении perl -c.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Функция crypt() не реализована из-за чрезмерной паранойи.

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

Экспериментальная функция declared_refs не включена

(F) Чтобы объявить ссылки на переменные, как в my \%x, сначала необходимо включить эту функцию:

no warnings "experimental::declared_refs";
use feature "declared_refs";
Функция %s не реализована

(F) Функция, указанная в сообщении, не реализована на данной архитектуре, согласно результатам проверок Configure.

Функция private_use экспериментальна

(S experimental::private_use) Эта функция — это заглушка для будущего использования.

Функция stat перед %s не была lstat

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

Функция Unicode свойств-подстановок экспериментальна

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

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

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

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

(W внутреннее) Предупреждения, специфичные для 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.

Таймаут ожидания определения другим потоком \p{%s}

(F) В первый раз, когда используется пользовательское свойство ("Пользовательские свойства символов" в perlunicode), его определение ищется и преобразуется во внутреннюю форму для более эффективной обработки при последующих использованиях. Может возникнуть проблема, если два или более потока попытаются выполнить эту обработку почти одновременно. Вместо этого вокруг этой задачи создаётся критическая секция, блокируя все, кроме одного потока от её выполнения. Это сообщение указывает, что поток, выполняющий преобразование, занимает неожиданно много времени. Таймаут существует только для предотвращения тупиковой ситуации; он достаточно велик, чтобы система, вероятно, находилась в режиме перегрузки и была на грани сбоя. Нет реального решения, кроме перезагрузки.

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

(F) Ваша версия C-библиотеки, по-видимому, не поддерживает times(). Я предполагаю, что вы не работаете в Unix-подобной системе.

"-T" указан в строке #!, он также должен использоваться в командной строке

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

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

Если скрипт Perl выполняется как perl scriptname, то опция -%c должна появиться в командной строке: perl -%c scriptname.

To%s: незаконное отображение '%s'

(F) Вы пытались определить пользовательское отображение для lc(), lcfirst(), uc() или ucfirst() (или их строковых аналогов), но указали незаконное отображение. См. "Пользовательские свойства символов" в perlunicode.

Глубоко вложенные ()-группы

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

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

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

Недостаточно аргументов для подпрограммы '%s' (получено %d; ожидалось %d)

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

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

Недостаточно аргументов для подпрограммы '%s' (получено %d; ожидается как минимум %d)

Аналогично предыдущему сообщению, но для подпрограмм, принимающих переменное количество аргументов.

Недопустимое использование опции "-%s"

(X) Строка #! (или её локальный эквивалент) в скрипте Perl содержит опцию -M, -m или -C.

В случае с -M и -m, это ошибка, так как эти опции не предназначены для использования внутри скриптов. Используйте pragma use вместо этого.

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

Поздно для выполнения блока %s

(W void) Блок CHECK или INIT определяется во время выполнения, когда возможность их выполнения уже упущена. Возможно, вы загружаете файл с require или do, когда должны использовать use. Или, возможно, вы должны поместить require или do внутри блока BEGIN.

Слишком много аргументов для syscall

(F) Perl поддерживает не более 14 аргументов для syscall().

Слишком много аргументов для %s

(F) Функция требует меньшего количества аргументов, чем вы указали.

Слишком много аргументов для подпрограммы '%s' (получено %d; ожидалось %d)

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

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

Слишком много аргументов для подпрограммы '%s' (получено %d; ожидалось не более %d)

Аналогично предыдущему сообщению, но для подпрограмм, принимающих переменное количество аргументов.

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

(F) Вы превысили число открытых "(" скобок, которые не были закрыты соответствующими закрывающими. Это ограничение предотвращает избыточное потребление памяти. Оно изначально установлено в 1000, но может быть изменено установкой ${^RE_COMPILE_RECURSION_LIMIT} в другое значение. Это может потребоваться сделать в блоке BEGIN перед компиляцией шаблона регулярного выражения.

Слишком много закрывающих скобок )

(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, в котором он запрещен. См. Safe.

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

(F) Ваша машина не реализует механизм усечения файла, о котором знает Configure.

try/catch - экспериментальная функция

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

try/catch/finally - экспериментальная функция

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

Тип аргумента %d для &CORE::%s должен быть %s

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

Тип аргумента %d для %s должен быть %s (а не %s)

(F) Эта функция требует, чтобы аргумент в этом месте был определённого типа. Массивы должны быть @NAME или @{EXPR}. Хэши должны быть %NAME или %{EXPR}. Не допускается неявное разыменование – используйте формы {EXPR} для явного разыменования. См. perlref.

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

(F) Ваша машина не реализует функцию umask, и вы попытались использовать её для ограничения разрешений для себя (EXPR & 0700).

Несбалансированный контекст: %d дополнительных PUSHes по сравнению с POPs

(S internal) Код выхода обнаружил внутреннее несоответствие в количестве входов и выходов контекстов выполнения.

Несбалансированные сохранения: %d дополнительных сохранений по сравнению с восстановлениями

(S internal) Код выхода обнаружил внутреннее несоответствие в количестве сохранённых значений.

Несбалансированные области: %d дополнительных ENTERs по сравнению с LEAVEs

(S internal) Код выхода обнаружил внутреннее несоответствие в количестве входов и выходов блоков.

Несбалансированный счётчик ссылок таблицы строк: (%d) для "%s"

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

Несбалансированные временные переменные: %d дополнительных выделений по сравнению с освобождениями

(S internal) Код выхода обнаружил внутреннее несоответствие в количестве выделенных и освобождённых временных скаляров.

Неопределённый формат "%s" вызван

(F) Формат, указанный не существует. Возможно, он находится в другом пакете? См. perlform.

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

(F) Указанная подпрограмма сравнения сортировки, кажется, не существует. Возможно, она находится в другом пакете? См. "sort" в perlfunc.

Неопределённая подпрограмма &%s вызвана

(F) Указанная подпрограмма не определена или, если она была определена, она была удалена.

Вызвана неопределённая подпрограмма

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

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

(F) Указанная подпрограмма сравнения сортировки объявлена, но, кажется, ещё не определена. См. "sort" в perlfunc.

Неопределённый верхний формат "%s" вызван

(F) Указанный формат не существует. Возможно, он находится в другом пакете? См. perlform.

Неопределённое значение присвоено typeglob

(W misc) Неопределённое значение было присвоено typeglob, как в *foo = undef. Это ничего не делает. Возможно, вы имели в виду undef *foo.

%s: Неопределённая переменная

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

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

(F) Простое правило, которое нужно запомнить, если вы хотите сопоставить литеральную "{" фигурную скобку (U+007B LEFT CURLY BRACKET) в шаблоне регулярного выражения, заключается в том, чтобы каким-то образом экранировать каждый экземпляр литерала. Обычно проще всего его предварять обратным слэшем, как "\{" или заключить его в квадратные скобки ("[{]"). Если разделители шаблона также являются фигурными скобками, все соответствующие правые фигурные скобки ("}") также следует экранировать, чтобы избежать путаницы в анализаторе, например,

qr{abc\{def\}ghi}

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

Контексты, в которых не выдаются предупреждения или ошибки:

  • как первый символ в шаблоне или после "^", указывая на привязку соответствия к началу строки.

  • как первый символ после "|", обозначающего альтернативу.

  • как первый символ в скобочной группировке, такой как

    /foo({bar)/
    /foo(?:{bar)/
  • как первый символ после квантификатора

    /\s*{/
Неэкранированная левая фигурная скобка в регулярном выражении пропускается в регулярном выражении; помечено <-- HERE в m/%s/

(W regexp) Простое правило, которое следует запомнить, если вы хотите сопоставить символ "{" (U+007B LEFT CURLY BRACKET) в шаблоне регулярного выражения, состоит в том, чтобы каким-то образом экранировать каждый символ. Обычно проще всего поставить перед ним обратную косую черту, например "\{" или заключить его в квадратные скобки ("[{]"). Если разделителями шаблона также являются фигурные скобки, любую соответствующую правую фигурную скобку ("}") также следует экранировать, чтобы избежать путаницы в анализаторе, например,

qr{abc\{def\}ghi}

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

Контексты, в которых не генерируются предупреждения или ошибки:

  • в качестве первого символа в шаблоне или после "^", указывающего на привязку совпадения к началу строки.

  • в качестве первого символа после "|", указывающего на альтернативу.

  • в качестве первого символа в группировке в скобках, например

    /foo({bar)/
    /foo(?:{bar)/
  • в качестве первого символа после квантификатора

    /\s*{/
Неэкранированный литеральный символ '%c' в регулярном выражении; помечено <-- HERE в m/%s/

(W regexp) (только в use re 'strict')

В рамках use re 'strict' в шаблоне регулярного выражения вы включили неэкранированный } или ], который интерпретировался буквально. Эти два символа иногда являются метасимволами, а иногда литералами, в зависимости от того, что предшествует им в шаблоне. Это отличается от аналогичного ), который всегда является метасимволом, если не экранирован.

Это действие на расстоянии, возможно, на большом расстоянии, может привести к тому, что Perl молча неправильно интерпретирует то, что вы имели в виду, поэтому при указании дополнительной проверки use re 'strict', генерируется это предупреждение. Если вы имели в виду символ как литерал, просто подтвердите это Perl, поставив перед символом обратную косую черту, или сделайте его частью класса символов в квадратных скобках (например, [}]). Если вы имели в виду его как закрывающую соответствующую [ или {, вам нужно будет просмотреть шаблон, чтобы понять, почему это не происходит.

Неудалось unexec из %s в %s!

(F) Процедура unexec() по какой-то причине завершилась неудачей. Обратитесь к вашему местному представителю FSF, который, вероятно, её туда и поместил.

Неожиданный бинарный оператор '%c' без предшествующего операнда в регулярном выражении; помечено <-- HERE в m/%s/

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

(?[ | \p{Digit} ])

где "|" является бинарным оператором с операндом справа, но без операнда слева.

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

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

(?[ z ])

В (?[ ]), не допускаются литеральные символы, если они не находятся внутри пары квадратных скобок, например

(?[ [ z ] ])

Другая возможность заключается в том, что вы забыли обратную косую черту. Perl недостаточно умен, чтобы понять, что вы имели в виду.

Неожиданный выход %u

(S) exit() был вызван или скрипт иначе завершился успешно, когда PERL_EXIT_WARN было установлено в PL_exit_flags.

Неожиданный выход с ошибкой %d

(S) Неперехваченное die() было вызвано, когда PERL_EXIT_WARN было установлено в PL_exit_flags.

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

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

(?[ ( \p{Digit} + ) ])

Символ ")" стоит не на своём месте. Похоже, что числа должны были быть объединены с цифрами, или "+" не должно было там стоять, или что-то подобное. Perl не может понять, что имелось в виду.

Неожиданный ']' без последующего ')' в (?[... в регулярном выражении; помечено <-- HERE в m/%s/

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

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

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

(?[ \p{Digit} ( \p{Lao} + \p{Thai} ) ])

Перед "(" должен быть оператор, поскольку нет указаний на то, как цифры должны быть объединены с символами в лаосской и тайской системах письма.

Не рекомендуется использовать универсальный несимвол U+%X для открытого обмена

(S nonchar) Некоторые кодовые точки, такие как U+FFFE и U+FFFF, определены в стандарте Unicode как несимволы. Они являются допустимыми кодовыми точками, но зарезервированы для внутреннего использования; поэтому приложения не должны пытаться обмениваться ими. Приложение может вообще не ожидать ни одного из этих символов, и их получение может привести к ошибкам. Если вы знаете, что делаете, вы можете отключить это предупреждение, используя no warnings 'nonchar';.

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

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

(F) Универсальный символ подстановки свойства Unicode выглядит как шаблон регулярного выражения с разделителями (все внутри фигурных скобок заключенного \p{...}). Закрывающий разделитель для сопоставления открывающего не был найден. Если открывающий разделитель экранирован, поставив перед ним обратную косую черту, то закрывающий тоже должен быть экранирован.

Функции универсальных строк не реализованы в (?[...]) в регулярном выражении; помечено <-- HERE в m/%s/

(F) Универсальное свойство строки — это свойство, которое расширяется до последовательности нескольких символов. Примером является \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' в регулярном выражении; помечено <-- HERE в m/%s/

(F) За (* следовала конструкция, которую компилятор регулярных выражений не распознает. Проверьте правильность написания.

Неизвестная ошибка

(P) Perl собирался вывести сообщение об ошибке в $@, но переменная $@ не существовала, даже после попытки её создать.

Неизвестная категория локали %d; не удается установить её на %s

(W locale) Вы использовали категорию локали, которую Perl не распознает, поэтому не может выполнить ваш запрос. Проверьте, используете ли вы допустимую категорию. Если да, см. "Multi-threaded" in perllocale для получения советов по сообщению об этой ошибке как об ошибке и по изменению Perl локально, чтобы удовлетворить ваши потребности.

Неизвестный режим open() '%s'

(F) Второй аргумент open() с тремя аргументами не входит в список допустимых режимов: <, >, >>, +<, +>, +>>, -|, |-, <&, >&.

Неизвестный слой PerlIO "%s"

(W layer) Была предпринята попытка добавить неизвестный слой в систему ввода-вывода Perl. (Слои обрабатывают преобразование данных между внешним и внутренним представлениями.) Обратите внимание, что некоторые слои, такие как mmap, не поддерживаются во всех средах. Если ваш программа не явно запросила операцию, которая привела к ошибке, это может быть результатом значения переменной окружения PERLIO.

Неизвестный процесс %x отправил сообщение prime_env_iter: %s

(P) Ошибка, специфичная для VMS. Perl считывал значения для %ENV до итерации по нему, и кто-то вставил сообщение в поток данных, который Perl ожидал. Кто-то очень запутался или, возможно, пытался злонамеренно изменить состав %ENV.

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

(F) Символы, стоящие непосредственно после закрывающего разделителя шаблона регулярного выражения, интерпретируются Perl как флаги модификаторов для регулярного выражения. Один из указанных вами флагов недопустим. Это может произойти, если вы не поставили пробел между концом регулярного выражения и последующим алфавитно-цифровым оператором:

if ($a =~ /foo/and $bar == 3) { ... }

"a" — это допустимый флаг модификатора, но "n" — нет, и это вызывает ошибку. Скорее всего, имелось в виду:

if ($a =~ /foo/ and $bar == 3) { ... }
Неизвестный подпрагма "re" '%s' (известные: %s)

(W) Вы попытались использовать неизвестный под-pragma для pragma "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. См. документацию переключателя perlrun -C для списка известных опций.

Неизвестное значение опции Unicode %d

(F) Вы указали неизвестное значение опции Unicode. См. документацию переключателя perlrun -C для списка известных опций.

Неизвестное имя пользовательского свойства \p{%s}

(F) Вы указали использование свойства в \p{...}, которое является синтаксически правильным пользовательским свойством, но определение для него не было найдено к моменту, когда оно потребовалось для продолжения. Проверьте правильность написания. См. "Пользовательские свойства символов" в perlunicode.

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

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

Неизвестная категория предупреждений '%s'

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

Нераспознанный символ %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 newline) Была попытка выполнить операцию с файлом на имени файла, и эта операция завершилась неудачей, ВЕРОЯТНО, потому что имя файла содержало перевод строки, ВЕРОЯТНО, потому что вы забыли использовать 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) Лексер увидел открывающую (левую) круглую скобку при разборе списка атрибутов, но соответствующая закрывающая (правая) круглая скобка не была найдена. Возможно, вам нужно добавить (или удалить) символ обратного слеша, чтобы скобки были сбалансированы. См. attributes.

Незавершенное сжатое целое число

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

Бесполезный (?%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, где список поиска имеет ту же длину, что и список замены. Дополнительную информацию о модификаторе /d см. в perlop.

Бесполезное использование \E

(W misc) В строке с двойными кавычками у вас есть \E без предшествующего \U, \L или \Q.

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

(W regexp) Вы указали что-то вроде этого:

qr/a{3}?/
qr/b{1,1}+/

Модификаторы "?" и "+" не имеют никакого эффекта, поскольку они изменяют, нужно ли соответствовать большему или меньшему количеству элементов при наличии выбора, а при указании на соответствие точно заданному количеству выбора не остаётся.

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

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

Например,

my $x = sort @y;

Это не очень полезно, и Perl в настоящее время оптимизирует это.

Бесполезное использование %s в контексте 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; без каких-либо аргументов. Это не очень полезно.

Бесполезное использование %s без значений

(W syntax) Вы использовали функцию push() или unshift() без аргументов, кроме массива, например, push(@x) или unshift(@foo). Обычно это не оказывает никакого влияния на массив, поэтому совершенно бесполезно. В принципе, push(@tied_array) может оказать некоторое влияние, если массив связан с классом, реализующим метод PUSH. В таком случае вы можете записать его как push(@tied_array,()) для предотвращения этого предупреждения.

"use" недопустим в выражении

(F) Ключевое слово "use" распознаётся и выполняется во время компиляции и не возвращает полезного значения. См. perlmod.

Использование @_ в %s с подпрограммой со спецификацией — экспериментальная возможность

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

Использование необъявленного << для обозначения <<"" запрещено

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

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

(D устарело) Вы использовали указанный символ в качестве начального разделителя строки вне области видимости use feature 'extra_paired_delimiters'. Этот символ является зеркальным отображением другого символа Unicode; в рамках этой функции оба считаются парой для разграничения строк. Планируется сделать эту функцию стандартной, в результате чего это использование станет недопустимым; отсюда и это предупреждение.

На данный момент вы можете проигнорировать это предупреждение или отключить его, но этот код больше не будет компилироваться в будущих версиях Perl. Либо вы можете включить use feature 'extra_paired_delimiters' и использовать символ, который является зеркальным отображением этого символа, для закрытия разделителя строки.

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

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

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

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

Использование -l с файловым дескриптором%s

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

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

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

Если вы действительно имели это в виду, явным образом преобразуйте свою ссылку в число, как показано ниже: $array[0+$ref]. Это предупреждение не выдается для перегруженных объектов, однако, поскольку вы можете перегрузить операторы преобразования в число и в строку, и вы, предположительно, знаете, что делаете.

Использование строк с кодовыми точками более 0xFF в качестве аргументов к оператору %s недопустимо

(F) Вы попытались использовать один из битовых операторов для строк (& или | или ^ или ~) для строки, содержащей кодовую точку более 0xFF. Битовые операторы для строк обрабатывают свои операнды как строки байтов, а значения свыше 0xFF бессмысленны в этом контексте.

Некоторые случаи стали фатальными в Perl 5.28; другие в Perl 5.32.

Использование строк с кодовыми точками более 0xFF в качестве аргументов к vec запрещено

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

Это стало фатальным в Perl 5.32.

Использование заражённых аргументов в %s устарело

(W taint, устарело) Вы передали 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» — это законное имя Unicode (технически «именная последовательность»), но на самом деле это два символа. Вышеприведенное выражение будет соответствовать только именам Unicode, содержащим KATAKANA, которые представляют собой одиночные символы.

Использование /u вместо /%s в регулярном выражении; отмечено <-- HERE в m/%s/

(W regexp) Вы использовали границу Юникода (\b{...} или \B{...}) в части регулярного выражения, где действуют модификаторы набора символов /a или /aa. Эти два модификатора указывают на интерпретацию ASCII, что не имеет смысла для определения Юникода. Сгенерированное регулярное выражение будет скомпилировано так, что граница будет использовать весь Юникод. Другие части регулярного выражения не затронуты.

Использование !~ с %s не имеет смысла

(F) Использование оператора !~ с s///r, tr///r или y///r в настоящее время зарезервировано для будущего использования, так как точное поведение не определено. (Просто возврат булевого противоположного значения изменённой строки обычно не очень полезен.)

Супплементный символ UTF-16 U+%X

(S супплемент) У вас был супплементный символ UTF-16 в контексте, где они не считаются приемлемыми. Эти коды, от U+D800 до U+DFFF (включительно), используются Юникодом только для UTF-16. Однако Perl внутренне допускает все целые беззнаковые коды (до лимита размера, доступного на вашей платформе), включая супплементы. Но это может вызвать проблемы при вводе или выводе, что, вероятно, и стало причиной этого сообщения. Если вы точно знаете, что делаете, вы можете отключить это предупреждение, используя no warnings 'surrogate';.

Значение %s может быть "0"; проверьте с помощью defined()

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

Значение CLI-символа "%s" слишком длинное

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

Переменная "%s" недоступна

(W closure) Во время компиляции вложенная именованная подпрограмма или eval пытается захватить внешний лексический, который в данный момент недоступен. Это может произойти по двум причинам. Во-первых, внешний лексический может быть объявлен во внешней анонимной подпрограмме, которая ещё не была создана. (Помните, что именованные подпрограммы создаются во время компиляции, а анонимные подпрограммы — во время выполнения.) Например,

sub { my $a; sub f { $a } }

В момент создания f она не может захватить текущее значение $a, так как анонимная подпрограмма ещё не создана. Напротив, следующее не вызовет предупреждения, так как анонимная подпрограмма уже создана и активна:

sub { my $a; eval 'sub f { $a }' }->();

Вторая ситуация возникает, когда eval обращается к переменной, которая вышла из области видимости, например,

sub f {
    my $a;
    sub { eval '$a' }
}
f()->();

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

Переменная "%s" не импортирована%s

(S misc) При включенном "use strict" вы ссылались на глобальную переменную, которую, по-видимому, думали импортировать из другого модуля, потому что что-то другое с таким же именем (обычно подпрограмма) экспортируется из этого модуля. Обычно это означает, что вы неправильно поставили специальный символ перед вашей переменной. Также возможно, что вы использовали переменную "our", область видимости которой закончилась.

Реализация lookbehind переменной длины в регулярном выражении m/%s/ не реализована

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

В Perl 5.30 и более ранних версиях lookbehind разрешается только для подвыражений, длина которых фиксирована и известна во время компиляции. Для положительного lookbehind можно использовать конструкцию регулярного выражения \K, чтобы получить эквивалентную функциональность. См. (?<=pattern) and \K in 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 может быть любой комбинацией верхнего и нижнего регистров.

Вы можете избежать этого, используя квадратные скобки в утверждении lookbehind, например

(?<![sS]t)
(?<![fF]f[iI])

Это обманывает Perl, чтобы он не сопоставлял лигатуры.

Другой вариант для Perls, начиная с 5.16, если вам нужны только соответствия ASCII, — добавить модификатор /aa к регулярному выражению. Это исключит все эти неявные соответствия, тем самым устранив это сообщение. Вы также можете сказать

use if $] ge 5.016, re => '/aa';

для применения /aa ко всем регулярным выражениям, скомпилированным в её области видимости. См. re.

Положительный lookbehind переменной длины с захватом является экспериментальным в регулярном выражении m/%s/

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

no warnings 'experimental::vlb';
Отрицательный lookbehind переменной длины с захватом является экспериментальным в регулярном выражении m/%s/

(W) Отрицательный lookbehind переменной длины с захватом не определён чётко. Это предупреждение информирует вас о том, что вы используете конструкцию, которая может измениться в будущей версии Perl. См. документацию об отрицательном lookbehind в perlre для получения подробностей. Вы можете предотвратить это предупреждение следующим образом:

no warnings 'experimental::vlb';
Переменная "%s" %s маскирует предыдущее объявление в том же %s

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

Синтаксис переменной

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

Переменная "%s" не будет оставаться совместно используемой

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

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

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

Векторный аргумент не поддерживается в альфа-версиях

(S printf) Формат %vd (s)printf не поддерживает версии с альфа-частями.

Шаблон глагола '%s' требует обязательного аргумента в регулярном выражении; отмечено <-- HERE в m/%s/

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

Шаблон глагола '%s' не может иметь аргумент в регулярном выражении; отмечено <-- HERE в m/%s/

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

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

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

Номер версии должен быть константой

(P) Попытка перевести оператор use Module n.n LIST в эквивалентный блок BEGIN обнаружила внутреннее несоответствие с номером версии.

Строка версии '%s' содержит недействительные данные; игнорируется: '%s'

(W misc) Строка версии содержит недействительные символы в конце, которые игнорируются.

Предупреждение: что-то не так

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

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

(S) Неявный вызов close() при 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 неоднозначно) Вы написали унарный оператор, за которым следует что-то, похожее на бинарный оператор, который также можно было интерпретировать как терм или унарный оператор. Например, если вы знаете, что функция 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 рассматривает этот символ как указанный код Unicode. Сочетание локалей не UTF-8 и Unicode опасно. Почти наверняка некоторые символы будут иметь два разных представления. Например, в локали ISO 8859-7 (греческий) код 0xC3 представляет заглавную Гамму. Но также и 0x393. Это сделает сравнения строк ненадежными.

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

Внутри []-длина '%c' не разрешена

(F) Счёт в шаблоне (un)pack может быть заменён [TEMPLATE] только если TEMPLATE всегда соответствует тому же количеству упакованных байтов, которое может быть определено из самого шаблона. Это невозможно, если он содержит какие-либо коды @, /, U, u, w или *-длина. Измените шаблон.

При попытке разрешить вызов метода %s->%s() не удаётся найти пакет "%s", хотя он упоминается в @%s::ISA (возможно, вы забыли загрузить "%s"?)

(W syntax) Возможно, @ISA содержит неправильно написанное или не загруженное имя пакета, что может привести к выбору perl неожиданного метода родительского класса для разрешения вызова метода. Если это преднамеренно, вы можете сделать что-то вроде

@Missing::Package::ISA = ();

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

%s() с отрицательным аргументом

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

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

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

%s "\x%X" не отображается в Unicode

(S utf8) При чтении в различных кодировках Perl пытается преобразовать всё в символы Unicode. Байты, которые вы читаете, не являются допустимыми в этой кодировке. Например

utf8 "\xE4" does not map to Unicode

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

Вам нужно привести в кавычки "%s"

(W syntax) Вы присвоили имя голого слова обработчику сигналов. К сожалению, у вас уже есть подпрограмма с таким именем, что означает, что Perl 5 попытается вызвать подпрограмму при выполнении присваивания, что, вероятно, не то, что вы хотите. (Если это именно то, что вы хотите, поставьте & перед именем.)

Ваши случайные числа не так случайны

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

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

(F) Имена Unicode-символов (\N{...}) могут возвращать последовательность нулевой длины. Такой символ был использован в расширенном символе, т.е., (?[...]), или в use re 'strict', что запрещено. Проверьте, что использован правильный символ, и правильный обработчик charnames включён. <-- HERE показывает, где в регулярном выражении была обнаружена проблема.

СМОТРИТЕ ТАКЖЕ

warnings, diagnostics.

© 1993–2021 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.36.0/perldiag

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API