perldiag
СОДЕРЖАНИЕ
ИМЯ
perldiag - различные диагностические сообщения Perl
ОПИСАНИЕ
Эти сообщения классифицируются следующим образом (в порядке возрастания отчаяния):
(W) A warning (optional).
(D) A deprecation (enabled by default).
(S) A severe warning (enabled by default).
(F) A fatal error (trappable).
(P) An internal error you should never see (trappable).
(X) A very fatal error (nontrappable).
(A) An alien error message (not generated by Perl). Большинство сообщений из первых трёх классификаций (W, D и S) можно контролировать с помощью warnings псевдонима.
Если сообщение можно контролировать с помощью warnings псевдонима, его категория предупреждения включена в классификационную букву в описании ниже. Например, (W closed) означает предупреждение в категории closed.
Дополнительные предупреждения включаются с помощью warnings псевдонима или переключателей -w и -W. Предупреждения можно перехватить, установив $SIG{__WARN__} в ссылку на подпрограмму, которая будет вызываться при каждом предупреждении вместо его печати. См. perlvar.
Серьёзные предупреждения всегда включены, если их явно не отключить с помощью warnings псевдонима или переключателя -X.
Перехватываемые ошибки можно перехватить с помощью оператора eval. См. "eval" в perlfunc. Почти во всех случаях предупреждения можно выборочно отключать или повышать до фатальных ошибок с помощью warnings псевдонима. См. warnings.
Сообщения упорядочены по алфавиту, не обращая внимания на регистр. Некоторые из этих сообщений являются общими. Места, которые различаются, обозначаются %s или другим форматом printf. Эти элементы игнорируются в алфавитном порядке, так же как и все символы, кроме букв. Чтобы найти ваше сообщение, просто проигнорируйте все, что не является буквой.
- accept() на закрытом сокете %s
-
(W закрыт) Вы попытались выполнить accept на закрытом сокете. Не забыли ли вы проверить значение возврата вызова socket()? См. "accept" в perlfunc.
- Алиасинг через ссылку является экспериментальным
-
(S экспериментальный::refaliasing) Это предупреждение выводится, если вы используете конструктор ссылки в левой части присваивания для алиасирования одной переменной к другой. Просто подавите предупреждение, если хотите использовать эту функцию, но знайте, что тем самым вы рискуете использовать экспериментальную функцию, которая может измениться или быть удалена в будущей версии Perl:
no warnings "experimental::refaliasing"; use feature "refaliasing"; \$x = \$y; - Выделение памяти слишком велико: %x
-
(X) Вы не можете выделить больше 64КБ на машине MS-DOS.
- '%c' разрешён только после типов %s в %s
-
(F) Модификаторы '!', '<' и '>' разрешены в pack() или unpack() только после определённых типов. См. "pack" в perlfunc.
- alpha->numify() приводит к потере данных
-
(W числовой) Версия alpha не может быть преобразована в числовой тип без потери информации.
- Неоднозначный вызов решён как CORE::%s(), укажите как таковой или используйте &
-
(W неоднозначный) Подпрограмма, которую вы объявили, имеет то же имя, что и ключевое слово Perl, и вы использовали это имя без квалификации для вызова одной из них. Perl решил вызвать встроенную функцию, так как подпрограмма не импортирована.
Чтобы принудительно интерпретировать как вызов подпрограммы, поставьте амперсанд перед именем подпрограммы или укажите имя с пакетом. В качестве альтернативы, вы можете импортировать подпрограмму (или предположить, что она импортирована с помощью
use subsпragma).Чтобы молчаливо интерпретировать как оператор Perl, используйте префикс
CORE::для оператора (например,CORE::log($x)) или объявите подпрограмму как метод объекта (см. "Атрибуты подпрограммы" в perlsub или attributes). - Неоднозначный диапазон в операторе транслитерации
-
(F) Вы написали что-то вроде
tr/a-z-0//, что вообще ничего не значит. Чтобы включить символ-в транслитерацию, поместите его либо в начало, либо в конец. (В прошлом,tr/a-z-0//было синонимомtr/a-y//, что, вероятно, не то, что вы ожидали.) - Неоднозначное использование %s решено как %s
-
(S неоднозначный) Вы сказали что-то, что может быть интерпретировано не так, как вы думали. Обычно это легко устранить, добавив пропущенную кавычку, оператор, пару скобок или объявление.
- Неоднозначное использование -%s решено как -&%s()
-
(S неоднозначный) Вы написали что-то вроде
-foo, что может быть строкой"-foo", или вызовом функцииfoo, с отрицанием. Если вы имели в виду строку, просто напишите"-foo". Если вы имели в виду вызов функции, напишите-foo(). - Неоднозначное использование %c решено как оператор %c
-
(S неоднозначный)
%,&, и*являются одновременно инфиксными операторами (остаток, побитовое и, и умножение) и начальными специальными символами (обозначающими хэши, подпрограммы и типглобы), и вы что-то сказали, что может быть интерпретировано как любое из них. Мы предположили, что вы имели в виду инфиксный оператор, но, пожалуйста, постарайтесь сделать это более ясным - в приведенном примере вы можете написать*foo * foo(), если вы действительно хотели умножить глобу на результат вызова функции. - Неоднозначное использование %c{%s} решено как %c%s
-
(W неоднозначный) Вы написали что-то вроде
@{foo}, что может быть запросом переменной@foo, или вызовом функции с именем foo и её разыменованием как ссылке на массив. Если вы хотели переменную, вы можете просто написать@foo. Если вы хотели вызвать функцию, напишите@{foo()}... или просто не имейте переменной и функции с одинаковым именем, и сэкономьте себе много проблем. - Неоднозначное использование %c{%s[...]} решено как %c%s[...]
- Неоднозначное использование %c{%s{...}} решено как %c%s{...}
-
(W неоднозначный) Вы написали что-то вроде
${foo[2]}(где foo представляет имя ключевого слова Perl), что может быть поиском элемента с номером 2 в массиве с именем@foo, в таком случае, пожалуйста, напишите$foo[2], или вы, возможно, имели в виду передачу безымянного массива в функцию с именем foo, а затем скалярное разыменование значения, которое она возвращает. Если вы имели в виду это, напишите${foo([2])}.В регулярных выражениях синтаксис
${foo[2]}иногда необходим, чтобы избежать неоднозначности между индексами массива и классами символов./$length[2345]/, например, будет интерпретирован как$lengthза которым следует класс символов[2345]. Если вам нужен индекс массива, вы можете избежать предупреждения, изменив/${length[2345]}/на неприглядное/${\$length[2345]}/, переименовав свой массив на что-то, что не совпадает с встроенным ключевым словом, или просто отключив предупреждения с помощьюno warnings 'ambiguous';. - '|' и '<' не могут быть одновременно указаны в командной строке
-
(F) Ошибка, характерная для VMS. Perl выполняет свою перенаправлять ввода-вывода в командной строке и обнаружил, что STDIN является конвейером, и что вы также пытались перенаправить STDIN с помощью '<'. Только один поток STDIN для клиента, пожалуйста.
- '|' и '>' не могут быть одновременно указаны в командной строке
-
(F) Ошибка, характерная для VMS. Perl выполняет свою перенаправлять ввода-вывода в командной строке и считает, что вы пытаетесь перенаправить вывод как в файл, так и в конвейер другой команде. Вам нужно выбрать одно или другое, хотя ничего не мешает вам передать в программу или Perl-скрипт, который «разделяет» вывод на два потока, например
open(OUT,">$ARGV[0]") or die "Can't write to $ARGV[0]: $!"; while (<STDIN>) { print; print OUT; } close OUT; - Применение %s к %s будет влиять на скаляр(%s)
-
(W misc) Операторы соответствия шаблону (
//), подстановки (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) {} - Параметр «slurpy» не может иметь значение по умолчанию
-
(F) Только скалярные параметры подписи подпрограммы могут иметь значение по умолчанию; например:
sub foo ($a = 1) {} # legal sub foo (@a = (1)) {} # invalid sub foo (%a = (a => b)) {} # invalid - Ошибка проверки: %s
-
(X) Внутренняя ошибка в пакете malloc, поставляемом с Perl.
- Проверка %s не выполнена: файл "%s", строка %d
-
(X) Произошла общая ошибка проверки. Необходимо проверить файл.
- Присвоенное значение не является ссылкой
-
(F) Вы попытались присвоить что-то, что не является ссылкой, ссылке lvalue (например,
\$x = $y). Если вы хотели сделать $x алиасом для $y, используйте\$x = \$y. - Присвоенное значение не является %s ссылкой
-
(F) Вы попытались присвоить ссылку конструктору ссылки, но ссылки были не одного типа. Вы не можете сделать алиасом скаляр к массиву или массив к хэшу; типы должны совпадать.
\$x = \@y; # error \@x = \%y; # error $y = []; \$x = $y; # error; did you mean \$y? - Присвоение ненулевого значения $[] больше не возможно
-
(F) Когда функция «array_base» отключена (например, в
use v5.16;) специальная переменная$[, которая устарела, теперь имеет фиксированное значение 0. - Присваивание и списку, и скаляру
-
(F) Если вы присваиваете условный оператор, второй и третий аргументы должны быть либо оба скалярами, либо оба списками. В противном случае 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 внутреннее) Perl поддерживает внутреннюю таблицу ссылок на строки с подсчётом ссылок для оптимизации хранения и доступа к ключам хешей и другим строкам. Это указывает на то, что кто-то попытался уменьшить счётчик ссылок на строку, которую больше нельзя найти в таблице.
- Попытка преждевременного освобождения временного значения: SV 0x%x
-
(S отладка) Ссылающиеся на временные значения должны освобождаться процедурой free_tmps(). Это указывает на то, что что-то другое освобождает SV, прежде чем процедура free_tmps() получит шанс, что означает, что процедура free_tmps() будет освобождать нессылающийся скаляр, когда она попытается освободить его.
- Попытка освободить нессылающиеся указатели glob
-
(S внутреннее) Счётчики ссылок были нарушены для псевдонимов символов.
- Попытка освободить нессылающийся скаляр: SV 0x%x
-
(S внутреннее) Perl пытался уменьшить счётчик ссылок скаляра, чтобы увидеть, достигнет ли он 0, и обнаружил, что он уже достиг 0 ранее, и должен был быть освобождён, и, вероятно, был освобождён. Это может указывать на то, что SvREFCNT_dec() был вызван слишком много раз, или что SvREFCNT_inc() был вызван слишком мало раз, или что SV был помечен как временный, когда не должен был, или что память повреждена.
- Попытка упаковать указатель на временное значение
-
(W pack) Вы пытались передать временное значение (например, результат функции или вычисленное выражение) в шаблон "p" pack(). Это означает, что результат содержит указатель на местоположение, которое может стать недоступным в любой момент, даже до конца текущего оператора. Используйте литералы или глобальные значения в качестве аргументов шаблону "p" pack(), чтобы избежать этого предупреждения.
- Попытка перезагрузки %s прервана.
-
(F) Вы пытались загрузить файл с
useилиrequire, который уже не смог скомпилироваться. Perl не будет пытаться скомпилировать этот файл снова, если вы не удалите его запись из %INC. См. "require" в perlfunc и "%INC" в perlvar. - Попытка установить длину освобождённого массива
-
(W misc) Вы пытались установить длину массива, который был освобождён. Вы можете сделать это, сохранив ссылку на скаляр, представляющий последний индекс массива, и позже присвоив значение через эту ссылку. Например
$r = do {my @a; \$#a}; $$r = 503 - Попытка использования ссылки как lvalue в substr
-
(W substr) Вы передали ссылку в качестве первого аргумента к substr() в качестве lvalue, что довольно странно. Возможно, вы забыли предварительно разыменовать её. См. "substr" в perlfunc.
- Атрибут прототипа (%s) отбрасывает более ранний атрибут прототипа в том же подпрограмме
-
(W misc) Подпрограмма была объявлена как sub foo : prototype(A) : prototype(B) {}, например. Поскольку каждая подпрограмма может иметь только один прототип, более ранние объявления игнорируются, а последнее применяется.
- av_reify вызван для привязанного массива
-
(S отладка) Это указывает на то, что что-то пошло не так, и Perl сильно запутался, что
@_или@DB::argsпривязано. - Неправильная длина аргумента для %s, ожидалось %d, а получено %u
-
(F) Вы передали буфер неправильного размера одному из msgctl(), semctl() или shmctl(). В C-терминологии правильные размеры соответственно sizeof(struct msqid_ds *), sizeof(struct semid_ds *) и sizeof(struct shmid_ds *).
- Неправильный шаблон подстановки, обработанный eval
-
(F) Вы использовали переключатель
/eдля оценки замены в подстановке, но perl обнаружил синтаксическую ошибку в коде для оценки, скорее всего, неожиданную правую фигурную скобку '}'. - Неправительный дескриптор файла: %s
-
(F) Символ был передан чему-то, требующему дескриптор файла, но у символа нет связанного с ним дескриптора файла. Возможно, вы не выполнили open(), или сделали это в другом пакете.
- Неправильное free() проигнорировано
-
(S malloc) Внутренняя процедура вызвала free() на чём-то, что вообще не было выделено с помощью malloc(). Необязательно, но можно отключить, установив переменную среды
PERL_BADFREEв 0.Это сообщение можно часто увидеть с DB_File на системах с «жёсткой» динамической компоновкой, таких как
AIXиOS/2. Это ошибкаBerkeley DB, которая остаётся незамеченной, еслиDBиспользует «прощающий» системный malloc(). - Неправильный хеш
-
(P) Одна из внутренних процедур хеша получила в качестве аргумента нулевой указатель HV.
- Неправильно размещённые скобки ()
-
(A) Вы случайно запустили свою скрипт через csh вместо Perl. Проверьте строку #!, или вручную передайте свою скрипт в Perl.
- Неправильное имя после %s
-
(F) Вы начали называть символ, используя префикс пакета, но не закончили символ. В частности, вы не можете интерполировать вне кавычек, поэтому
$var = 'myvar'; $sym = mypack::$var;не то же самое, что
$var = 'myvar'; $sym = "mypack::$var"; - Неправильный плагин, влияющий на ключевое слово '%s'
-
(F) Расширение, использующее механизм ключевых слов плагинов, нарушило API плагинов.
- Неправильное realloc() проигнорировано
-
(S malloc) Внутренняя процедура вызвала realloc() на чём-то, что вообще не было выделено с помощью malloc(). Необязательно, но можно отключить, установив переменную среды
PERL_BADFREEв 1. - Неправильный символ для массива
-
(P) Внутренний запрос попросил добавить элемент массива в элемент, который не был элементом таблицы символов.
- Неправильный символ для дескриптора каталога
-
(P) Внутренний запрос попросил добавить запись дескриптора каталога в элемент, который не был элементом таблицы символов.
- Неправильный символ для дескриптора файла
-
(P) Внутренний запрос попросил добавить запись дескриптора файла в элемент, который не был элементом таблицы символов.
- Неправильный символ для хэша
-
(P) Внутренний запрос попросил добавить запись хэша в элемент, который не был элементом таблицы символов.
- Неправильный символ для скаляра
-
(P) Внутренний запрос попросил добавить запись скаляра в элемент, который не был элементом таблицы символов.
- Найден непривязанный символ в условном выражении
-
(W bareword) Компилятор обнаружил непривязанный символ там, где ожидал условного выражения, что часто указывает на то, что || или && были распарсены как часть последнего аргумента предыдущей конструкции, например:
open FOO || die;Это также может указывать на неправильно написанную константу, которая была интерпретирована как непривязанный символ:
use constant TYPO => 1; if (TYOP) { print "foo" }Предикат
strictполезен для предотвращения таких ошибок. - Непривязанный символ в require содержит "%s"
- Непривязанный символ в require сопоставлен с запрещенным именем файла "%s"
- Непривязанный символ в require сопоставлен с пустым именем файла
-
(F) При использовании формы require с непривязанным символом было указано имя файла, которое не могло быть сгенерировано допустимым непривязанным символом, разрешенным парсером. Вы не должны получать эту ошибку в коде Perl, но код XS может её выдать, если он передаёт недопустимое имя модуля в
Perl_load_module. - Непривязанный символ в require не должен начинаться с двойного двоеточия: "%s"
-
(F) В
require Bare::Word, слово без знаков препинания не должно начинаться с двойного двоеточия. Запишитеrequire ::Foo::Barкакrequire Foo::Barвместо этого. - Слово без знаков препинания "%s" запрещено при использовании "strict subs"
-
(F) При использовании "strict subs", слово без знаков препинания допускается только в качестве идентификатора подпрограммы в фигурных скобках или слева от символа "=>". Возможно, вам нужно предварительно объявить подпрограмму?
- Слово без знаков препинания "%s" относится к несуществующему пакету
-
(W bareword) Вы использовали квалифицированное слово без знаков препинания в форме
Foo::, но компилятор не обнаружил других использований этого пространства имён до этого момента. Возможно, вам нужно предварительно объявить пакет? - BEGIN не удалось – компиляция прервана
-
(F) При выполнении подпрограммы BEGIN было поднято неперехваченное исключение. Компиляция останавливается немедленно, и интерпретатор завершается.
- BEGIN небезопасен после ошибок – компиляция прервана
-
(F) Perl обнаружил подпрограмму
BEGIN {}(или директивуuse, которая подразумеваетBEGIN {}) после одной или нескольких ошибок компиляции. Поскольку предполагаемая среда дляBEGIN {}не могла быть гарантирована (из-за ошибок), и поскольку последующий код, вероятно, зависит от её корректной работы, Perl просто отказался. - \%d лучше записать как $%d
-
(W syntax) За пределами шаблонов обратные ссылки существуют как переменные. Использование обратных косых черт поддерживается справа от подстановки, но стилистически лучше использовать форму переменной, потому что другие программисты Perl будут ожидать её, и она работает лучше, если есть более 9 обратных ссылок.
- Двоичное число > 0b11111111111111111111111111111111 не переносимо
-
(W portable) Указанное двоичное число больше, чем 2**32-1 (4294967295), и поэтому не переносимо между системами. См. perlport для получения дополнительной информации о проблемах переносимости.
- bind() на закрытом сокете %s
-
(W closed) Вы попытались выполнить bind на закрытом сокете. Вы забыли проверить значение возврата вызова socket()? См. "bind" в perlfunc.
- binmode() на закрытом файловом дескрипторе %s
-
(W unopened) Вы попытались выполнить binmode() на файловом дескрипторе, который никогда не был открыт. Проверьте свой поток управления и количество аргументов.
- Размер битового вектора > 32 не переносим
-
(W portable) Использование размеров битового вектора, больших чем 32, не переносимо.
- Странная копия %s
-
(P) Perl обнаружил попытку скопировать внутреннее значение, которое нельзя скопировать.
- Странный SvTYPE [%d]
-
(P) При запуске новой нити или возврате значений из нити Perl обнаружил неверный тип данных.
- Обе или ни одна конечная точка диапазона должны быть Unicode в регулярном выражении; отмечено <-- HERE в m/%s/
-
(W regexp) (только в
use re 'strict'или внутри(?[...]))В скобочном классе символов в шаблоне регулярного выражения у вас был диапазон, одна конечная точка которого указана с использованием
\N{}, а другая — с помощью непереносимого механизма. Perl обрабатывает диапазон как диапазон Unicode, то есть все символы в нём рассматриваются как символы Unicode, которые могут быть разными кодовыми точками на некоторых платформах, на которых работает Perl. Например,[\N{U+06}-\x08]обрабатывается так, как будто вы вместо этого сказали[\N{U+06}-\N{U+08}], то есть он соответствует символам, кодовые точки которых в Unicode равны 6, 7 и 8. Но это\x08может указывать на то, что вы имели в виду что-то другое, поэтому появляется предупреждение. - Переполнение буфера в prime_env_iter: %s
-
(W internal) Предупреждение, характерное для VMS. При подготовке Perl к итерации по %ENV он столкнулся с логическим именем или определением символа, которое было слишком длинным, поэтому оно было усечено до показанной строки.
- Вызов обратного вызова exit
-
(F) Подпрограмма, вызываемая из внешнего пакета с помощью call_sv(), завершилась вызовом exit.
- %s() вызвано слишком рано для проверки прототипа
-
(W prototype) Вы вызвали функцию, у которой есть прототип, прежде чем анализатор увидел определение или объявление для неё, и Perl не смог проверить, соответствует ли вызов прототипу. Вам нужно либо добавить раннее объявление прототипа для соответствующей подпрограммы, либо поместить определение подпрограммы перед вызовом для правильной проверки прототипа. В качестве альтернативы, если вы уверены, что вызываете функцию правильно, вы можете поставить амперсанд перед именем, чтобы избежать предупреждения. См. perlsub.
- Невозможно chr %f
-
(F) Вы передали неверное число (например, бесконечность или не число) в
chr. - Невозможно завершить редактирование %s на месте: %s
-
(F) Похоже, ваш скрипт Perl изменил директорию во время выполнения редактирования файла на месте, указанного относительным путём, и ваша система не включает необходимые относительные функции POSIX для обработки этого.
- Невозможно сжать %f в pack
-
(F) Вы пытались сжать бесконечность или не число как целое без знака с помощью BER, что не имеет смысла.
- Невозможно сжать целое число в pack
-
(F) Аргумент pack("w",...) был слишком велик для сжатия. Формат сжатого целого числа BER может использоваться только с положительными целыми числами, и вы пытались сжать очень большое число (> 1e308). См. "pack" в perlfunc.
- Невозможно сжать отрицательные числа в pack
-
(F) Аргумент pack("w",...) был отрицательным. Формат сжатого целого числа BER может использоваться только с положительными целыми числами. См. "pack" в perlfunc.
- Невозможно преобразовать ссылку на %s в типглоб
-
(F) Вы напрямую манипулировали таблицей символов Perl, сохранили в ней ссылку, а затем попытались получить доступ к этому символу с помощью обычного синтаксиса Perl. Доступ вызывает автовивификацию этого типглоба, но нет законного преобразования этого типа ссылки в типглоб.
- Невозможно скопировать в %s
-
(P) Perl обнаружил попытку скопировать значение в внутренний тип, которому нельзя напрямую присвоить значение.
- Кодировка "%s" не найдена
-
(S io) Вы попытались применить несуществующую кодировку к файловому дескриптору, либо с помощью 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'
-
(F) Вы пытались преобразовать бесконечность или не число в целое число, что не имеет смысла.
- Невозможно вывести %f с помощью '%c'
-
(F) Вы пытались вывести бесконечность или не число как символ (%c), что не имеет смысла. Возможно, вы имели в виду '%s', или просто преобразование в строку?
- Невозможно привязать @DB::args
-
(F)
callerпопытался привязать@DB::args, но обнаружил его привязанным. Привязка@DB::argsне поддерживается. (До добавления этой ошибки она приводила к сбою.) - Невозможно привязать нереализуемый массив
-
(P) Вы каким-то образом сумели вызвать
tieдля массива, который не хранит счётчик ссылок на свои аргументы и не может быть заставлен это делать. Такие массивы даже не должны быть доступны для кода Perl, а используются только внутри. - Ещё нельзя переупорядочить аргументы sv_vcatpvfn() из va_list
-
(F) Некоторые XS-код попытались использовать
sv_vcatpvfn()или родственную функцию со строкой формата, которая указывает явные индексы для некоторых элементов, и используя C-стильный список аргументов переменной (ava_list). Это в настоящее время не поддерживается. Авторам XS, которые хотят это сделать, нужно вместо этого создать C-массивSV*скаляров, содержащих аргументы. - Можно сжимать только целые числа без знака в pack
-
(F) Аргумент pack("w",...) не был целым числом. Формат сжатого целого числа BER может использоваться только с положительными целыми числами, и вы пытались сжать что-то другое. См. "pack" в perlfunc.
- Нельзя благословить нессылочное значение
-
(F) Благословлять можно только ссылки. Вот как Perl "принуждает" инкапсуляцию объектов. См. perlobj.
- Нельзя использовать "break" в цикле topicalizer
-
(F) Вы вызвали
break, но вы находитесь в блокеforeachвместо блокаgiven. Вероятно, вы хотели использоватьnextилиlast. - Нельзя использовать "break" за пределами данного блока
-
(F) Вы вызвали
break, но вы не находитесь внутри блокаgiven. - Невозможно вызвать метод "%s" для неопределённого значения
-
(F) Вы использовали синтаксис вызова метода, но ячейка, заполненная ссылкой на объект или именем пакета, содержит неопределённое значение. Нечто подобное воспроизведёт ошибку:
$BADREF = undef; process $BADREF 1,2,3; $BADREF->process(1,2,3); - Невозможно вызвать метод "%s" для неблагословенной ссылки
-
(F) Вызов метода должен знать, в каком пакете он должен выполняться. Обычно он узнаёт это из ссылки на объект, которую вы предоставляете, но в данном случае вы не предоставили ссылку на объект. Ссылка не является ссылкой на объект до тех пор, пока она не будет благословлена. См. perlobj.
- Невозможно вызвать метод "%s" без пакета или ссылки на объект
-
(F) Вы использовали синтаксис вызова метода, но слот, заполняемый ссылкой на объект или именем пакета, содержит выражение, возвращающее определённое значение, которое не является ни ссылкой на объект, ни именем пакета. Ошибка может быть воспроизведена следующим примером:
$BADREF = 42; process $BADREF 1,2,3; $BADREF->process(1,2,3); - Невозможно вызвать mro_isa_changed_in() для анонимной таблицы символов
-
(P) Perl запутался, является ли хэш обычным хэшем или хэшем таблицы символов при попытке обновления кэша @ISA.
- Невозможно вызвать mro_method_changed_in() для анонимной таблицы символов
-
(F) Модуль XS попытался вызвать
mro_method_changed_inдля хэша, который не был прикреплён к таблице символов. - Невозможно перейти в каталог %s
-
(F) Вы вызвали
perl -x/foo/bar, но /foo/bar не является каталогом, в который можно перейти, возможно, потому что он не существует. - Невозможно проверить файловую систему скрипта "%s" на nosuid
-
(P) По какой-то причине невозможно проверить файловую систему скрипта на nosuid.
- Невозможно привести %s к типу %s в %s
-
(F) Определённые типы SVs, в частности, реальные записи таблицы символов (typeglobs), не могут быть принудительно изменены. Таким образом, нельзя сделать следующее:
*foo += 1;Можно сделать
$foo = *foo; $foo += 1;но тогда $foo больше не содержит glob.
- Невозможно использовать "continue" вне блока when
-
(F) Вы вызвали
continue, но вы находитесь не внутри блокаwhenилиdefault. (Обратите внимание, что эта ошибка выдаётся при выходе из блокаdefault, поэтому вы не получите ошибку, если используете явноеcontinue.) - Невозможно создать почтовый ящик канала
-
(P) Ошибка, характерная для VMS. Процесс страдает от исчерпания квот или других проблем с подключением.
- Невозможно объявить %s в "%s"
-
(F) Только скалярные, массивы и хэши могут быть объявлены как переменные "my", "our" или "state". Они должны иметь обычные идентификаторы в качестве имён.
- Невозможно использовать "default" вне топкализера
-
(F) Вы использовали блок
default, который находится не внутри циклаforeachили блокаgiven. (Обратите внимание, что эта ошибка выдаётся при выходе из блокаdefault, поэтому вы не получите ошибку, если используете явноеcontinue.) - Невозможно определить класс оператора %s, предполагая BASEOP
-
(S) Это предупреждение указывает на проблему во внутреннем механизме Perl. Perl пытался найти класс (например, LISTOP) определённого оператора и не смог этого сделать. Вероятно, это связано с ошибкой во внутреннем механизме Perl или ошибкой в коде XS, который манипулирует деревьями операторов Perl.
- Невозможно выполнить редактирование на месте: %s не является обычным файлом
-
(S inplace) Вы попытались использовать переключатель -i со специальным файлом, например, с файлом в /dev, FIFO или недоступным каталогом. Файл был проигнорирован.
- Невозможно выполнить редактирование на месте для %s: %s
-
(S inplace) Создание нового файла завершилось ошибкой по указанной причине.
- Невозможно выполнить редактирование на месте без резервной копии
-
(F) Вы работаете на системе, такой как MS-DOS, которая путается, если вы пытаетесь читать из удалённого (но всё ещё открытого) файла. Вы должны указать
-i.bak, или что-то подобное. - Невозможно выполнить редактирование на месте: %s не будет уникальным
-
(S inplace) Ваша файловая система не поддерживает имена файлов длиной более 14 символов, и Perl не смог создать уникальное имя файла во время редактирования на месте с переключателем -i. Файл был проигнорирован.
- Невозможно выполнить %s("%s") в локали, не являющейся UTF-8; преобразовано к "%s".
-
(W locale) Вы 1) работаете в "
use locale"; 2) текущая локаль не является UTF-8; 3) вы пытались выполнить указанное преобразование на указанном символе Юникода; и 4) результат этой операции смешивает правила Юникода и правил локали, что, вероятно, приведет к конфликту. Смешивание различных типов правил запрещено, поэтому операция не была выполнена; вместо этого результатом является указанное значение, которое является лучшим доступным значением, использующим только правила Юникода. В большинстве случаев это исходный символ без изменений.В целом, не рекомендуется смешивать локали, не являющиеся UTF-8, и Юникод, и эта проблема является одной из причин. Это предупреждение появляется, когда правила Юникода обычно приводят к тому, что результат этой операции содержит символ, который находится в диапазоне, указанном локалью, 0..255, и, следовательно, подчиняется правилам локали, а не Юникода.
Если вы используете локаль только для её характеристик, связанных с форматированием чисел и времени (и не
LC_CTYPE), рассмотрите использование ограниченной формы псевдонима локали (см. "Псевдоним "use locale" в perllocale") как "use locale ':not_characters'".Обратите внимание, что неудачные операции преобразования, выполненные в результате сопоставления с регулярным выражением без учёта регистра, будут отображаться в этом предупреждении как операция
fc, так как именно это происходит за кулисами в движке регулярных выражений. - Невозможно выполнить waitpid с флагами
-
(F) В этой системе нет ни waitpid(), ни wait4(), поэтому эмулируется только waitpid() без флагов.
- Невозможно эмулировать -%s в строке #!
-
(F) Строка #! указывает на переключатель, который не имеет смысла на данном этапе. Например, использование -x в строке #! будет странным.
- Невозможно выполнить %s %s-эндиан %ss на этой платформе
-
(F) Порядок байтов вашей платформы не является ни big-endian, ни little-endian, или у неё очень странный размер указателя. Упаковка и распаковка чисел с плавающей точкой big- или little-endian и указателей может быть невозможна. См. "pack" в perlfunc.
- Невозможно выполнить exec "%s": %s
-
(W exec) Вызов system(), exec() или открытого канала с передачей в pipe не смог выполнить указанную программу по указанной причине. Типичные причины включают: неверные разрешения файла, файл не найден в
$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.);Если вы получаете эту ошибку от здесь-документа, возможно, вы включили невидимые пробелы до или после закрывающей метки, или может отсутствовать перевод строки после неё. Хороший редактор кода поможет вам найти эти символы (или их отсутствие). См. perlop для получения полной информации о здесь-документах.
- Невозможно найти определение свойства Юникода "%s"
- Невозможно найти определение свойства Юникода "%s" в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Указанное вами свойство, через
\pили\P, неизвестно Perl. Возможно, вы ошиблись в названии? См. "Свойства, доступные через \p{} и \P{}" в perluniprops для полного списка доступных официальных свойств. Если это пользовательское свойство, оно должно быть определено к моменту сопоставления регулярного выражения.Если вы не имели в виду свойство Юникода, экранируйте
\p, либо\\p(только\p) либо\Q\p(остальную часть строки, или до\E). - Невозможно выполнить fork: %s
-
(F) Во время попытки выполнить fork при открытии канала произошла фатальная ошибка.
- Невозможно выполнить fork, повторная попытка через 5 секунд
-
(W pipe) Fork в канале открыт с ошибкой EAGAIN и будет повторён через пять секунд.
- Невозможно получить filespec - устаревший буфер stat?
-
(S) Предупреждение, специфичное для VMS. Оно возникает из-за различий в проверке доступа в VMS и в модели Unix, которую предполагает Perl. В VMS проверки доступа выполняются по имени файла, а не по битам в буфере stat, так что учитываются разрешения доступа (ACL) и другие средства защиты. К сожалению, Perl предполагает, что буфер stat содержит всю необходимую информацию и передает его, а не имя файла, в процедуру проверки доступа. Она попытается извлечь имя файла, используя имя устройства и 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? - Невозможно перейти в блок «given» с помощью «goto»
-
(F) Был выполнен оператор «goto», чтобы перейти в середину блока
given. Вы не можете попасть туда из этой точки. См. «goto» в perlfunc. - Невозможно перейти в середину цикла foreach с помощью «goto»
-
(F) Был выполнен оператор «goto», чтобы перейти в середину цикла foreach. Вы не можете попасть туда из этой точки. См. «goto» в perlfunc.
- Невозможно выполнить «goto» вне псевдоблока
-
(F) Был выполнен оператор «goto», чтобы выйти из блока, который может выглядеть как блок, но на самом деле им не является. Это обычно происходит, если вы попытались выйти из блока sort() или подпрограммы, что недопустимо. См. «goto» в perlfunc.
- Невозможно перейти в подпрограмму из eval-%s с помощью «goto»
-
(F) Вызов «goto подпрограмма» нельзя использовать для выхода из eval "строка" или блока.
- Невозможно перейти в подпрограмму из подпрограммы сортировки (или подобного обратного вызова) с помощью «goto»
-
(F) Вызов «goto подпрограмма» нельзя использовать для выхода из подпрограммы сравнения для sort() или из подобного обратного вызова (например, функция reduce() в List::Util).
- Невозможно перейти в подпрограмму вне подпрограммы с помощью «goto»
-
(F) Глубоко волшебный вызов «goto подпрограмма» может заменить только один вызов подпрограммы другим. Он не может создать его из ничего. В общем случае вы должны вызывать его только из подпрограммы AUTOLOAD. См. «goto» в perlfunc.
- Невозможно игнорировать сигнал CHLD, принудительно установлено значение по умолчанию
-
(W сигнал) Perl обнаружил, что он запускается с отключённым сигналом SIGCHLD (иногда известным как SIGCLD). Поскольку отключение этого сигнала помешает правильно определить код завершения дочерних процессов, Perl сбросил сигнал на его значение по умолчанию. Эта ситуация обычно указывает на то, что родительская программа, в которой может запускаться Perl (например, cron), проявляет чрезмерную невнимательность.
- Невозможно убить процесс с нечисловым идентификатором
-
(F) Идентификаторы процессов должны быть целыми числами (со знаком). Попытка вызвать kill() с неопределённым, пустым строковым или иным нечисловым идентификатором является ошибкой.
- Невозможно использовать «last» вне блока цикла
-
(F) Был выполнен оператор «last», чтобы выйти из текущего блока, но текущий блок отсутствует. Обратите внимание, что блок «if» или «else» не считается «циклическим» блоком, как и блок, переданный функциям sort(), map() или grep(). Обычно можно дублировать фигурные скобки, чтобы получить тот же эффект, поскольку внутренние фигурные скобки будут считаться блоком, повторяющимся один раз.
- Невозможно линейно отобразить анонимную таблицу символов
-
(F) Perl попытался рассчитать порядок разрешения методов (MRO) пакета, но потерпел неудачу, так как пакетный хранилище (stash) не имеет имени.
- Невозможно загрузить '%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) Функция (или метод) была вызвана в пакете, который допускает автозагрузку, но функции для автозагрузки нет. Наиболее вероятные причины — опечатка в имени функции/метода или невозможность загрузить файл, например, сделав
make install. - Невозможно найти загружаемый объект модуля %s в @INC
-
(F) Модуль, который вы загрузили, пытается загрузить внешнюю библиотеку, например, foo.so или bar.dll, но модуль DynaLoader не смог найти эту библиотеку. См. DynaLoader.
- Невозможно найти метод объекта "%s" через пакет "%s"
-
(F) Вы правильно вызвали метод, и он правильно указал пакет, функционирующий как класс, но этот пакет не определяет этот конкретный метод, а также ни один из его базовых классов. См. perlobj.
- Невозможно найти метод объекта "%s" через пакет "%s" (возможно, вы забыли загрузить "%s"?)
-
(F) Вы вызвали метод класса, которого не существовало, и метод не был найден в UNIVERSAL. Это часто означает, что метод требует пакета, который не был загружен.
- Невозможно найти пакет %s для @%s::ISA
-
(W синтаксис) Массив @ISA содержал имя другого пакета, который, похоже, не существует.
- Невозможно найти PerlIO%s
-
(F) Вы попытались использовать в open() PerlIO-слой, которого не существует, например, open(FH, ">:nosuchlayer", "somefile").
- Невозможно выполнить присваивание списка к %ENV на данной системе
-
(F) Присваивание списка к %ENV не поддерживается на некоторых системах, в частности на VMS.
- Невозможно сделать загруженные символы глобальными на данной платформе во время загрузки %s
-
(S) Модуль передал флаг 0x01 в DynaLoader::dl_load_file() для запроса, чтобы символы из указанного файла стали доступны глобально в процессе, но эта функциональность недоступна на данной платформе. Хотя модуль, вероятно, всё ещё будет работать, это может помешать интерпретатору Perl загружать другие расширения на основе XS, которые должны напрямую связываться с функциями, определёнными в C- или XS-коде в указанном файле.
- Невозможно изменить %s в %s
-
(F) Вам запрещено присваивать значение или каким-либо образом изменять указанный элемент, например, с помощью автоинкремента.
- Невозможно изменить несуществующую подстроку
-
(P) Внутренняя процедура, выполняющая присваивание подстроке, получила NULL.
- Невозможно изменить не-lvalue-вызов подпрограммы &%s
- Невозможно изменить не-lvalue-вызов подпрограммы &%s в %s
-
(F) Подпрограммы, предназначенные для использования в контексте lvalue, должны быть объявлены как таковые. См. «Lvalue-подпрограммы» в perlsub.
- Невозможно изменить ссылку на %s в %s при присваивании
-
(F) Только ограниченное количество конструкций могут использоваться в качестве аргумента конструктору ссылки слева от знака присваивания, а то, что вы использовали, не относится к ним. См. «Присваивание ссылок» в perlref.
- Невозможно изменить ссылку на локализованный скобочный массив при присваивании списка
-
(F) Присваивание к
\local(@array)или\(local @array)не поддерживается, так как неясно, что это должно сделать. Если вы имели в виду сделать @array ссылкой на другой массив, используйте\@array = \@other_array. Если вы хотите сделать элементы @array алиасами скаляров, на которые ссылаются справа, используйте\(@array) = @scalar_refs. - Невозможно изменить ссылку на скобочный массив хэшей при присваивании списка
-
(F) Присвоение значению
\(%hash)не поддерживается. Если вы имели в виду, что %hash должен ссылаться на другой хэш, используйте\%hash = \%other_hash. Если вы хотите, чтобы элементы %hash стали псевдонимами скаляров, указанных справа, используйте срез хэша:\@hash{@keys} = @those_scalar_refs. - Невозможно msgrcv к только для чтения var
-
(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) Указанный скрипт не может быть открыт по указанной причине.
Если вы отлаживаете скрипт, использующий #!, и обычно полагаетесь на поиск shell в $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 на то, что вызов должен быть в контексте списка.
- Невозможно получить информацию о скрипте "%s"
-
(P) По какой-то причине вы не можете выполнить fstat() для скрипта, даже если он уже открыт. Странно.
- Невозможно вычислить логарифм %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 ссылки, когда включена "строгая ссылка"
-
(F) "Строгие ссылки" допускают только жесткие ссылки. Символические ссылки запрещены. См. perlref.
- Невозможно использовать %! из-за отсутствия Errno.pm
-
(F) При первом использовании хэша
%!, perl автоматически загружает модуль Errno.pm. Модуль Errno должен связать хэш %! для предоставления символических имен для$!значений errno. - Нельзя использовать как '<' так и '>' после типа '%c' в %s
-
(F) Тип не может иметь как большой, так и малый порядок байтов одновременно, поэтому такая комбинация модификаторов недопустима. См. "pack" в perlfunc.
- Нельзя использовать 'defined(@array)' (Возможно, вам следует просто опустить defined()?)
-
(F) defined() не подходит для массивов, потому что проверяет на неопределённое значение скаляра. Если вы хотите проверить, пуст ли массив, просто используйте
if (@array) { # not empty }, например. - Нельзя использовать 'defined(%hash)' (Возможно, вам следует просто опустить defined()?)
-
(F)
defined()обычно неверно для хэшей.Хотя
defined %hashложно для простого ещё неиспользуемого хэша, оно становится истинным в нескольких неочевидных ситуациях, включая итераторы, слабые ссылки, имена хранилищ, даже оставаясь истинным послеundef %hash. Эти вещи делаютdefined %hashпрактически бесполезными на практике, поэтому теперь генерируется ошибка fatal.Если вам нужна проверка на непустоту, просто используйте её в контексте булева значения (см. "Скалярные значения" в perldata):
if (%hash) { # not empty }Если вы пытались
defined %Foo::Bar::QUUXпроверить, существует ли такая переменная пакета, то это никогда не было надёжным способом и не является хорошим способом узнать о функциях пакета, загружен ли он и т. д. - Нельзя использовать %s в качестве переменной цикла
-
(P) Парсер запутался при попытке анализа цикла
foreach. - Нельзя использовать глобальную %s в "%s"
-
(F) Вы попытались объявить магическую переменную как лексическую переменную. Это запрещено, потому что магия может быть связана только с одним местом (именно с глобальной переменной), и было бы очень запутанно иметь переменные в вашей программе, которые выглядели бы как магические, но ими не являлись.
- Нельзя использовать '%c' в группе с другим порядком байтов в %s
-
(F) Вы пытались принудительно изменить порядок байтов для типа, который уже находится внутри группы с модификатором порядка байтов. Например, вы не можете принудительно установить little-endian для типа, находящегося внутри big-endian группы.
- Нельзя использовать "my %s" в сравнении сортировки
-
(F) Глобальные переменные $a и $b зарезервированы для сравнения сортировки. Вы упомянули $a или $b в той же строке, что и оператор <=> или cmp, и переменная ранее была объявлена как лексическая переменная. Либо укажите переменную сортировки с именем пакета, либо переименуйте лексическую переменную.
- Нельзя использовать %s ссылку как %s ссылку
-
(F) Вы перепутали типы ссылок. Вам нужно разыменовать ссылку нужного типа. Для проверки типа ссылки можно использовать функцию ref().
- Нельзя использовать строку ("%s") как %s ссылку, когда включена опция "strict refs"
- Нельзя использовать строку ("%s"...) как %s ссылку, когда включена опция "strict refs"
-
(F) Вы сказали Perl разыменовать строку, что Perl блокирует, чтобы предотвратить случайное выполнение. См. "Символьные ссылки" в 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. - Определения псевдонимов charnames не должны содержать хвостовых пробелов; отмечено <-- HERE в %s
-
(F) Вы определили имя символа, которое заканчивалось пробелом. Удалите хвостовой пробел(ы). Обычно эти имена определяются в аргументе импорта
:aliasдляuse charnames, но они могут быть определены установленным переводчиком в$^H{charnames}. См. "CUSTOM ALIASES" в charnames. - chdir() для неоткрытого дескриптора файла %s
-
(W неоткрыто) Вы использовали chdir() для дескриптора файла, который никогда не был открыт.
- "\c%c" лучше записать как "%s"
-
(W синтаксис) Конструкция
\cXпредназначена для задания непечатаемых символов. Вы использовали её для печатаемого символа, который лучше записать просто как сам символ, возможно, с предшествующим обратным слэшем для символов, не являющихся словами. Сделав так, вы не получите переносимость между платформами ASCII и EBCDIC. - Клонирование контекста подстановки не реализовано
-
(F) Создание нового потока внутри оператора
s///не поддерживается. - closedir() с неверным дескриптором каталога %s
-
(W ввод/вывод) Дескриптор каталога, который вы пытались закрыть, либо уже закрыт, либо им не является. Проверьте логику.
- close() для неоткрытого дескриптора файла %s
-
(W неоткрыто) Вы пытались закрыть дескриптор файла, который никогда не был открыт.
- Вызов прототипа замыкания
-
(F) Если у замыкания есть атрибуты, подпрограмма, переданная обработчику атрибутов, является прототипом, который клонируется при создании нового замыкания. Эту подпрограмму нельзя вызвать.
- \C больше не поддерживается в регулярных выражениях; помечено <-- ЗДЕСЬ в m/%s/
-
(F) Класс символов \C использовался для сопоставления одного байта внутри многобайтового символа utf-8, но был удалён в версии 5.24, так как нарушал инкапсуляцию и имел очень много багов в реализации. Если вам действительно нужно обработать отдельные байты, вероятно, вы захотите преобразовать свою строку в одну, где каждый базовый байт хранится как символ, используя utf8::encode().
- Код отсутствует после '/'
-
(F) У вас была (под)шаблон, заканчивающаяся на '/'. После косой черты должен быть другой код шаблона. См. "pack" в perlfunc.
- Код символа 0x%X не является Unicode и не переносимый
-
(S non_unicode) У вас был код символа, который никогда не был в каком-либо стандарте, поэтому, скорее всего, языки, отличные от Perl, его не поймут. В какой-то момент в некоторых стандартах было разрешено использование кодов символов до 0x7FFF_FFFF, но не выше, а этот код символа выше.
Принятие этих кодов символов является расширением Perl, и вы должны ожидать, что только Perl может их обработать; сам Perl на платформах EBCDIC до версии 5.24 не обрабатывает их.
Коды символов выше 0xFFFF_FFFF требуют слов большего размера, чем 32 бита.
Perl также не гарантирует, что представление этих кодов символов не изменится в какой-то момент в будущем, например, когда станут доступны машины с словами большего размера, чем 64 бита. В это время файлы, написанные более старой версией Perl, потребуют преобразования, чтобы быть читаемыми более новой версией Perl.
- Код символа 0x%X не является Unicode, может быть не переносимым
-
(S non_unicode) У вас был код символа, превышающий максимальное значение Unicode U+10FFFF.
Perl позволяет строкам содержать супермножество кодов символов Unicode, но они могут не приниматься другими языками/системами. Кроме того, даже если эти языки/системы принимают эти большие коды символов, они могут выбрать для них другое представление, отличное от похожего на UTF-8 представления, используемого Perl, что означает, что файлы не будут взаимозаменяемы между ними и Perl.
На платформах EBCDIC коды символов выше 0x3FFF_FFFF имеют другое представление в Perl версии 5.24, чем раньше, поэтому любой файл, содержащий их и написанный до этой версии, потребует преобразования, чтобы быть читаемым более поздней версией Perl.
- %s: Команда не найдена
-
(A) Вы случайно запустили свой скрипт через csh или другую оболочку вместо Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl. Строка #! в начале вашего файла может выглядеть как
#!/usr/bin/perl - %s: команда не найдена
-
(A) Вы случайно запустили свой скрипт через bash или другую оболочку вместо Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl. Строка #! в начале вашего файла может выглядеть как
#!/usr/bin/perl - %s: команда не найдена: %s
-
(A) Вы случайно запустили свой скрипт через zsh или другую оболочку вместо Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl. Строка #! в начале вашего файла может выглядеть как
#!/usr/bin/perl - Компиляция завершилась неудачей в require
-
(F) Perl не смог скомпилировать файл, указанный в
requireинструкции. Perl использует это общее сообщение, когда ни одна из обнаруженных ошибок не была достаточно серьёзной, чтобы немедленно остановить компиляцию. - Превышен лимит рекурсии сложных подвыражений регулярного выражения (%d)
-
(W regexp) Двигатель регулярных выражений использует рекурсию в сложных ситуациях, когда требуется обратный откат. Глубина рекурсии ограничена 32766, или, возможно, меньше на архитектурах, где стек не может неограниченно расти. («Простые» и «средние» ситуации обрабатываются без рекурсии и не ограничены лимитом). Попробуйте сократить строку, которую необходимо проверить; использовать циклы в коде Perl (например, с
while) вместо использования циклов в двигателе регулярных выражений; или перепишите регулярное выражение так, чтобы оно было проще или меньше использовало обратный откат. (См. perlfaq2 для информации по Освоению регулярных выражений.) - connect() на закрытом сокете %s
-
(W closed) Вы попытались выполнить connect на закрытом сокете. Вы забыли проверить возвращаемое значение вызова socket()? См. "connect" в perlfunc.
- Константа(%s): Вызов &{$^H{%s}} не вернул определённое значение
-
(F) Подпрограмма, зарегистрированная для обработки перегрузки констант (см. overload) или обработчик имен символов (см. "CUSTOM TRANSLATORS" в charnames), вернула неопределённое значение.
- Константа(%s): $^H{%s} не определена
-
(F) Парсер обнаружил несоответствия при попытке определить перегруженную константу. Возможно, вы забыли загрузить соответствующий прагму overload?
- Константа не является %s ссылкой
-
(F) К константному значению (возможно, объявленому с помощью
use constantпрагмы) применяется операция разыменования, но она приводит к неправильному типу ссылки. Сообщение указывает ожидаемый тип ссылки. Обычно это указывает на синтаксическую ошибку в разыменовании константного значения. См. "Константные функции" в perlsub и constant. - Константы, полученные из лексических переменных, потенциально изменяемых в других местах, устарели. Это не будет разрешено в Perl 5.32
-
(D deprecated) Вы написали что-то вроде
my $var; $sub = sub () { $var };но на $var ссылаются в других местах, и он может быть изменён после того, как
subвыражение было вычислено. Либо он явно изменяется в других местах ($var = 3) либо он передаётся подпрограмме или оператору, например,printfилиmap, которые могут или не могут изменить переменную.Традиционно Perl захватывает значение переменной в этот момент и превращает подпрограмму в константу, пригодную для инлайнинга. В тех случаях, когда переменная может быть изменена в других местах, это нарушает поведение замыканий, в которых подпрограмма захватывает саму переменную, а не её значение, поэтому будущие изменения переменной отражаются в возвращаемом значении подпрограммы.
Это использование устарело и больше не будет разрешено в Perl 5.32, что позволит изменить поведение в будущем.
Если вы имели в виду, что подпрограмма должна быть пригодна для инлайнинга, убедитесь, что к переменной не обращаются в других местах, возможно, скопировав её:
my $var2 = $var; $sub = sub () { $var2 };Если вы хотите, чтобы эта подпрограмма была замыканием, отражающим будущие изменения переменной, к которой она относится, добавьте явное
return,:my $var; $sub = sub () { return $var }; - Переопределённая константная подпрограмма %s
-
(W redefine)(S) Вы переопределили подпрограмму, которая ранее была пригодна для инлайнинга. См. "Константные функции" в perlsub для комментариев и обходных путей.
- Неопределённая константная подпрограмма %s
-
(W misc) Вы неопределили подпрограмму, которая ранее была пригодна для инлайнинга. См. "Константные функции" в perlsub для комментариев и обходных путей.
- Константа(%s) неизвестна
-
(F) Парсер обнаружил несоответствия либо при попытке определить перегруженную константу, либо при попытке найти имя символа, указанного в
\N{...}экранировании. Возможно, вы забыли загрузить соответствующий прагму overload? - :const — экспериментальная функция
-
(S experimental::const_attr) Атрибут "const" — экспериментальный. Если вы хотите использовать функцию, отключите предупреждение с помощью
no warnings 'experimental::const_attr', но помните, что при этом вы рискуете тем, что ваш код может сломаться в будущей версии Perl. - :const запрещено для именованных подпрограмм
-
(F) Атрибут "const" заставляет анонимную подпрограмму выполняться и её значение захватывается в момент клонирования. Именованные подпрограммы не клонируются таким образом, поэтому атрибут не имеет смысла для них.
- Метод копирования не вернул ссылку
-
(F) Метод, перегружающий «=», имеет ошибку. См. "Конструктор копирования" в 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, либо, если вы используете какой-то, ваш собственный движок регулярных выражений. Если это не последний вариант, сообщите о проблеме с помощью утилиты perlbug.
- повреждённые указатели регулярных выражений
-
(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)....) не допускает ветвления в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) Вы использовали что-то вроде
(?(DEFINE)...|..), что является незаконным. Наиболее вероятной причиной этой ошибки является то, что вы пропустили скобку внутри части.....<-- ЗДЕСЬ показывает, где в регулярном выражении была обнаружена проблема.
- %s не определяет ни пакет, ни VERSION — проверка версии не удалась
-
(F) Вы сказали что-то вроде "use Module 42", но в файле модуля нет ни объявлений пакета, ни
$VERSION. - Аргумент delete не является элементом или срезом HASH или ARRAY
-
(F) Аргумент для
deleteдолжен быть элементом массива или хэша, например:$foo{$bar} $ref->{"susie"}[12]или срезом массива или хэша, например:
@foo[$bar, $baz, $xyzzy] @{$ref->[12]}{"susie", "queue"}или срезом ключа/значения хэша или индекса/значения массива, например:
%foo[$bar, $baz, $xyzzy] %{$ref->[12]}{"susie", "queue"} - Разделитель для документа здесь слишком длинный
-
(F) В конструкции документа здесь, например
<<FOO, меткаFOOслишком длинная для обработки Perl. Вам нужно сильно постараться, чтобы написать код, который вызывает эту ошибку. - Устаревшее использование my() в ложном условии. Это станет фатальной ошибкой в Perl 5.30
-
(D устаревшее) Вы использовали объявление, подобное
my $x if 0. В Perl существует давняя ошибка, которая приводит к тому, что лексическая переменная не очищается при выходе из области видимости, если её объявление включает в себя ложное условие. Некоторые люди использовали эту ошибку, чтобы добиться некой статической переменной. Поскольку мы намерены исправить эту ошибку, мы не хотим, чтобы люди полагались на это поведение. Вы можете достичь аналогичного статического эффекта, объявив переменную в отдельном блоке вне функции, напримерsub f { my $x if 0; return $x++ }становится
{ my $x; sub f { return $x++ } }Начиная с perl 5.10.0, вы также можете использовать
stateпеременные, чтобы имели лексические переменные, которые инициализируются только один раз (см. feature):sub f { state $x; return $x++ }Это использование
my()в ложном условии устарело с Perl 5.10 и станет фатальной ошибкой в Perl 5.30. - DESTROY создал новую ссылку на объект 'dead object '%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) Вы сказали что-то вроде "use Module 42", но модуль не определил
$VERSION. - '/' не принимает счёт повторений
-
(F) Вы не можете поместить счёт повторений любого типа сразу после кода '/'. См. "pack" в perlfunc.
- do "%s" не удалось, '.' больше не в @INC; вы имели в виду do "./%s"?
-
(D устаревшее) Раньше
do "somefile";искал указанный файл в текущей директории. С версии perl v5.26.0, . был удалён из@INCпо умолчанию, поэтому это больше не так. Чтобы искать в текущей директории (и только в текущей директории), вы можете написатьdo "./somefile";. - Не знаю, как получить имя файла
-
(P)
PerlIO_getname, внутренняя функция ввода-вывода Perl, специфичная для VMS, как-то была вызвана на другой платформе. Этого не должно происходить. - Не знаю, как обработать магию типа \%o
-
(P) Внутренняя обработка магических переменных была проклята.
- do_study: нет памяти
-
(P) Это должно было быть поймано safemalloc().
- (Вам нужно предварительно объявить %s?)
-
(S синтаксис) Это обоснованное предположение, сделанное совместно с сообщением "%s найдено там, где ожидался оператор". Это часто означает, что подпрограмма или имя модуля ссылается на то, что ещё не объявлено. Это может быть из-за проблем с порядком в вашем файле или из-за отсутствия оператора "sub", "package", "require" или "use". Если вы ссылаетесь на что-то, что ещё не определено, вам не обязательно определять подпрограмму или пакет до текущей позиции. Вы можете использовать пустое "sub foo;" или "package FOO;" для ввода "вперёд" объявления.
- dump() лучше переписать как CORE::dump(). dump() больше не будет доступен в Perl 5.30
-
(D устаревшее, misc) Вы использовали устаревшую
dump()встроенную функцию, не полностью квалифицировав её какCORE::dump(). Возможно, это ошибка ввода.Использование неквалифицированного
dump()было устаревшим в Perl 5.8.0, и это не будет доступно в Perl 5.30.См. "dump" в perlfunc.
- dump не поддерживается
-
(F) Ваш компьютер не поддерживает dump/undump.
- Дублирующее free() проигнорировано
-
(S malloc) Внутренняя процедура free() была вызвана на чём-то, что уже было освобождено.
- Повторный модификатор '%c' после '%c' в %s
-
(W unpack) Вы применили один и тот же модификатор более одного раза после типа в шаблоне pack. См. "pack" в perlfunc.
- elseif должен быть elsif
-
(S синтаксис) В Perl нет ключевого слова "elseif", потому что Лэрри считает его некрасивым. Ваш код будет интерпретирован как попытка вызвать метод с именем "elseif" для класса, возвращённого последующим блоком. Вероятно, это не то, что вы хотите.
- Пустой \%c в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
- Пустой \%c{} в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F)
\pи\Pиспользуются для введения именованного свойства Unicode, как описано в perlunicode и perlre. Вы использовали\pили\Pв регулярном выражении без указания имени свойства. - ${^ENCODING} больше не поддерживается
-
(F) Специальная переменная
${^ENCODING}, ранее использовавшаяся для реализацииencodingпсевдонима, больше не поддерживается с Perl 5.26.0.Установка её на значение отличное от
undefявляется фатальной ошибкой с версии Perl 5.28. - попытка установить эффективные %s не удалась
-
(F) При использовании
use filetestпсевдонима, изменение реальных и эффективных идентификаторов пользователя или группы не удалось. - %ENV проксируется на %s
-
(F) Вы работаете в режиме taint, и переменная
%ENVбыла проксирована на другой хэш, поэтому она больше не отражает состояние среды выполнения программы. Это потенциально небезопасно. - Ошибка преобразования спецификации файла %s
-
(F) Ошибка, специфичная для VMS. Поскольку Perl может иметь дело со спецификациями файлов как в формате VMS, так и в формате Unix, он преобразует их в единый формат, когда должен непосредственно работать с ними. Либо вы передали Perl неверную спецификацию файла, либо вы нашли случай, который не поддерживается процедурами преобразования. Черт.
- Группа Eval в небезопасном регулярном выражении
-
(F) Perl обнаружил заражённые данные при попытке скомпилировать регулярное выражение, содержащее
(?{ ... })утверждение нулевой длины, что небезопасно. См. "(?{ code })" в perlre и perlsec. - Группа Eval запрещена во время выполнения, используйте re 'eval' в регулярном выражении m/%s/
-
(F) Perl пытался скомпилировать регулярное выражение, содержащее утверждение нулевой ширины
(?{ ... })во время выполнения, как это делается, когда шаблон содержит интерполированные значения. Поскольку это представляет собой риск для безопасности, это запрещено. Если вы настаиваете, вы можете сделать это, используя прагмуre 'eval'или явно создав шаблон из интерполированной строки во время выполнения и используя его в eval(). См. "(?{ code })" в perlre. - Группа Eval недопустима, используйте re 'eval' в регулярном выражении m/%s/
-
(F) Регулярное выражение содержало утверждение нулевой ширины
(?{ ... }), но такая конструкция разрешена только при включенной прагмеuse re 'eval'. См. "(?{ code })" в perlre. - EVAL без изменения pos превысил лимит в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы использовали шаблон, который вложенно слишком много вызовов EVAL без потребления какого-либо текста. Перестройте шаблон так, чтобы потреблялся текст.
Маркер <-- HERE показывает место в регулярном выражении, где была обнаружена проблема.
- Оператор <> чрезмерно длинный
-
(F) Содержимое оператора <> не должно превышать максимального размера идентификатора Perl. Если вы просто пытаетесь сгенерировать список длинных имен файлов, попробуйте использовать оператор glob() или поместите имена файлов в переменную и используйте glob для неё.
- exec? Я не *такой* операционной системы
-
(F) Функция
execне реализована на некоторых системах, например, Symbian OS. См. perlport. - %sВыполнение %s прервано из-за ошибок компиляции.
-
(F) Конечное сообщение об ошибке при неудачной компиляции Perl.
- Аргумент exists не является элементом HASH или ARRAY или подпрограммой
-
(F) Аргумент для
existsдолжен быть элементом хеша или массива или подпрограммой с амперсандом, например:$foo{$bar} $ref->{"susie"}[12] &do_something - Аргумент exists не является именем подпрограммы
-
(F) Аргумент для
existsдляexists &subдолжен быть именем подпрограммы, а не вызовом подпрограммы.exists &sub()сгенерирует эту ошибку. - Выход из eval через %s
-
(W выход) Вы выходите из eval нестандартным способом, например, с помощью goto или оператора управления циклом.
- Выход из формата через %s
-
(W выход) Вы выходите из формата нестандартным способом, например, с помощью goto или оператора управления циклом.
- Выход из псевдоблока через %s
-
(W выход) Вы выходите из специальной конструкции блока (например, блока сортировки или подпрограммы) нестандартным способом, например, с помощью goto или оператора управления циклом. См. "sort" в perlfunc.
- Выход из подпрограммы через %s
-
(W выход) Вы выходите из подпрограммы нестандартным способом, например, с помощью goto или оператора управления циклом.
- Выход из подстановки через %s
-
(W выход) Вы выходите из подстановки нестандартным способом, например, с помощью return, goto или оператора управления циклом.
- Ожидается закрывающая скобка в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы написали что-то вроде
(?13для обозначения группы захвата вида
(?PARNO), но опустили")". - Ожидается закрывающая скобка для вложенного расширенного класса символов в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) При разборе вложенного расширенного класса символов, такого как:
(?[ ... (?flags:(?[ ... ])) ... ]) ^мы ожидали увидеть закрывающую скобку ')' (отмеченную ^), но не увидели.
- Ожидается закрывающая скобка для обертки вложенного расширенного класса символов в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) При разборе вложенного расширенного класса символов, такого как:
(?[ ... (?flags:(?[ ... ])) ... ]) ^мы ожидали увидеть закрывающую скобку ')' (отмеченную ^), но не увидели.
- Ожидается '(?flags:(?[...' в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Конструкция расширенного класса символов
(?[...])регулярного выражения допускает только классы символов (включая escapes классов символов, такие как\d), операторы и скобки. Исключением является(?flags:...), содержащий по крайней мере один флаг и ровно одну конструкцию(?[...]). Это позволяет интерполировать регулярное выражение, содержащее только(?[...]). Если вы видите это сообщение об ошибке, то, вероятно, у вас есть какая-то другая конструкция(?...)внутри вашего класса символов. См. "Расширенные квадратные скобки" в perlrecharclass. - Экспериментальное алиасирование через ссылку не включено
-
(F) Для алиасирования через ссылки необходимо сначала включить функцию:
no warnings "experimental::refaliasing"; use feature "refaliasing"; \$x = \$y; - Экспериментальная функция %s для скаляра сейчас запрещена
-
(F) Экспериментальная функция, добавленная в Perl 5.14, позволяла
each,keys,push,pop,shift,splice,unshift, иvaluesвызываться со скалярным аргументом. Этот эксперимент считается неудачным и был удален. Функцияpostderefможет лучше подойти для ваших нужд. - Экспериментальные подписи подпрограмм не включены
-
(F) Чтобы использовать подписи подпрограмм, необходимо их сначала включить:
no warnings "experimental::signatures"; use feature "signatures"; sub foo ($left, $right) { ... } - Явное благословение для '' (предполагая пакет main)
-
(W прочее) Вы благословляете ссылку на строку нулевой длины. Это приводит к благословению ссылки в пакет 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. Произошло что-то непредвиденное в службе VMS или процедуре RTL; более подробную информацию должно предоставить значение кода выхода Perl. Имя файла в "в %s" и номер строки в "строка %d" указывают на то, какой раздел исходного кода Perl испытывает проблемы.
- fcntl не реализован
-
(F) Ваша машина, видимо, не реализует fcntl(). Что это, PDP-11 или что-то подобное?
- FETCHSIZE вернул отрицательное значение
-
(F) Связанный массив утверждал, что имеет отрицательное количество элементов, что невозможно.
- Поле слишком широкое в формате 'u' в pack
-
(W pack) Каждая строка в закодированной строке uuencode начинается с индикатора длины, который не может закодировать значения больше 63. Поэтому нет смысла запрашивать длину строки больше, чем это. Perl будет вести себя так, как будто вы указали
u63в качестве формата. - File::Glob::glob() исчезнет в perl 5.30. Используйте File::Glob::bsd_glob() вместо этого.
-
(D устаревшее)
File::Globимеет функцию под названиемglob, которая просто вызываетbsd_glob. Однако её прототип отличается от прототипаCORE::glob, и поэтомуFile::Glob::globне следует использовать.File::Glob::glob()устарела в perl 5.8.0. Сообщение об устаревании выдавалось начиная с perl 5.26.0, и функция исчезнет в perl 5.30.0.Код, использующий
File::Glob::glob(), должен вызыватьFile::Glob::bsd_glob()вместо этого. - Дескриптор файла %s открыт только для чтения
-
(W ввод-вывод) Вы попытались записать в дескриптор файла, открытый только для чтения. Если вы хотели, чтобы это был дескриптор файла для чтения и записи, вам нужно было открыть его с помощью "+<" или "+>" или "+>>" вместо "<" или без дополнительных параметров. Если вы хотели только записать в файл, используйте ">" или ">>". См. "open" в perlfunc.
- Дескриптор файла %s открыт только для записи
-
(W ввод-вывод) Вы пытались прочитать из дескриптора файла, открытого только для записи. Если вы хотели, чтобы это был дескриптор файла для чтения и записи, вам нужно было открыть его с помощью "+<" или "+>" или "+>>" вместо ">". Если вы хотели только прочитать из файла, используйте "<". См. "open" в perlfunc. Ещё одна возможность заключается в том, что вы пытались открыть дескриптор файла 0 (также известный как STDIN) для записи (возможно, вы закрыли STDIN ранее?).
- Дескриптор файла %s повторно открыт как %s только для чтения
-
(W ввод-вывод) Вы открыли для чтения дескриптор файла, который получил тот же идентификатор файла, что и STDOUT или STDERR. Это произошло, потому что вы закрыли STDOUT или STDERR ранее.
- Файловый дескриптор STDIN повторно открыт как %s только для вывода
-
(W io) Вы открыли для записи файловый дескриптор, который получил тот же идентификатор файла, что и STDIN. Это произошло, потому что вы ранее закрыли STDIN.
- Конечный $ должен быть \$ или $имя
-
(F) Теперь вам необходимо определить, является ли конечный $ в строке буквальным знаком доллара или должен был вводить имя переменной, которой нет. Поэтому вам нужно добавить обратный слэш или имя.
- flock() для закрытого файлового дескриптора %s
-
(W closed) Файловый дескриптор, для которого вы пытаетесь выполнить flock(), был закрыт некоторое время назад. Проверьте структуру вашего управления потоком. flock() работает с файловыми дескрипторами. Вы пытаетесь вызвать flock() для объекта типа dirhandle с таким же именем?
- Формат не завершен
-
(F) Формат должен завершаться строкой с одиночной точкой. Perl достиг конца вашего файла, не найдя такой строки.
- Формат %s переопределен
-
(W redefine) Вы переопределили формат. Чтобы подавить это предупреждение, укажите
{ no warnings 'redefine'; eval "format NAME =..."; } - Найден символ = в условном операторе, должен быть ==
-
(W syntax) Вы написали
if ($foo = 123)вместо
if ($foo == 123)(или что-то подобное).
- %s найден там, где ожидался оператор
-
(S syntax) Perl-лексер знает, ожидать ему термин или оператор. Если он видит то, что знает как термин, когда ожидал оператор, он выдаёт это предупреждение. Обычно это означает, что опущен оператор или разделитель, например, точка с запятой.
- gdbm store вернул %d, errno %d, ключ "%s"
-
(S) Предупреждение из расширения GDBM_File о неудачном выполнении операции store.
- gethostent не реализован
-
(F) Ваша библиотека C, по-видимому, не реализует gethostent(), вероятно, потому что, если бы она это делала, она бы чувствовала моральную обязанность вернуть каждый домен в интернете.
- get%sname() для закрытого сокета %s
-
(W closed) Вы попытались получить имя сокета или сокета-партнёра для закрытого сокета. Вы забыли проверить возвращаемое значение вызова socket()?
- getpwnam вернул недопустимый UIC %#o для пользователя "%s"
-
(S) Предупреждение, специфичное для VMS. Вызов
sys$getuaiлежащий в основе оператораgetpwnamвернул недопустимый UIC. - getsockopt() для закрытого сокета %s
-
(W closed) Вы попытались получить опцию сокета для закрытого сокета. Вы забыли проверить возвращаемое значение вызова socket()? См. "getsockopt" в perlfunc.
- given – экспериментальная функция
-
(S experimental::smartmatch)
givenзависит от smartmatch, которая является экспериментальной, поэтому её поведение может измениться или даже быть удалено в будущих релизах perl. См. объяснение в "Экспериментальные подробности по given и when" в perlsyn. - Глобальный символ "%s" требует явного имени пакета (вы забыли объявить "my %s"?)
-
(F) Вы использовали "use strict" или "use strict vars", что означает, что все переменные должны быть либо лексически ограничены (используя "my" или "state"), объявлены заранее с помощью "our", или явно указано, в каком пакете находится глобальная переменная (используя "::").
- glob не удалась (%s)
-
(S glob) Что-то пошло не так с внешней программой(ами), используемой для
globи<*.c>. Обычно это означает, что вы предоставили шаблонglob, который заставил внешнюю программу завершиться с ненулевым кодом. Если сообщение указывает, что ненормальное завершение привело к сбою ядра, это также может означать, что ваша csh (оболочка C) неисправна. В таком случае вам следует изменить все переменные, относящиеся к csh, в config.sh: если у вас tcsh, сделайте переменные так, как будто это csh (например,full_csh='/usr/bin/tcsh'); в противном случае сделайте их все пустыми (за исключением того, чтоd_cshдолжно быть'undef') так, чтобы Perl считал, что csh отсутствует. В любом случае после редактирования config.sh выполните./Configure -Sи перестройте Perl. - Glob не завершён
-
(F) Лексер увидел левую угловую скобку в месте, где ожидал термин, поэтому он ищет соответствующую правую угловую скобку и не находит её. Скорее всего, вы опустили необходимые скобки в начале строки и на самом деле имели в виду символ "меньше чем".
- gmtime(%f) не удалось
-
(W overflow) Вы вызвали
gmtimeс числом, с которым она не могла справиться: слишком большим, слишком маленьким или NaN. Возвращаемое значение равноundef. - gmtime(%f) слишком большое
-
(W overflow) Вы вызвали
gmtimeс числом, которое было больше, чем она может надёжно обработать, иgmtime, вероятно, вернула неправильную дату. Это предупреждение также срабатывает для NaN (специальное значение "не число"). - gmtime(%f) слишком мало
-
(W overflow) Вы вызвали
gmtimeс числом, которое было меньше, чем она может надёжно обработать, иgmtime, вероятно, вернула неправильную дату. - Возникла ошибка DosAllocMem
-
(P) Ошибка, характерная для OS/2. Вероятно, вы используете устаревшую версию Perl, и это вообще не должно происходить.
- goto должен иметь метку
-
(F) В отличие от "next" или "last", вам не разрешено использовать goto к неопределённому месту назначения. См. "goto" в perlfunc.
- Goto неопределённой подпрограммы%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 overflow) Шестнадцатеричное число с плавающей точкой имеет больший порядок, чем поддерживает число с плавающей точкой.
- Шестнадцатеричное число с плавающей точкой: подпорядковое переполнение
-
(W overflow) Шестнадцатеричное число с плавающей точкой имеет меньший порядок, чем поддерживает число с плавающей точкой. С использованием IEEE 754 чисел с плавающей точкой, это также может означать, что используются субнормали (ранее известные как денёрмали), что может или может не быть ошибкой.
- Шестнадцатеричное число с плавающей точкой: внутренняя ошибка (%s)
-
(F) Что-то ужасно пошло не так в обработке шестнадцатеричных чисел с плавающей точкой.
- Шестнадцатеричное число с плавающей точкой: переполнение мантиссы
-
(W overflow) Шестнадцатеричная константа с плавающей точкой имела больше битов в мантиссе (часть между 0x и порядком, также известная как дробь или значащее значение), чем поддерживает число с плавающей точкой.
- Шестнадцатеричное число с плавающей точкой: потеря точности
-
(W overflow) Шестнадцатеричное число с плавающей точкой имело внутренне больше цифр, чем могло быть выведено. Это может быть вызвано недопустимыми форматами long double или отсутствием 64-битных целых чисел (необходимых для получения цифр при некоторых конфигурациях).
- Шестнадцатеричное число с плавающей точкой: недопустимый формат long double
-
(F) Вы настроили Perl на использование long double, но внутренний формат long double неизвестен; поэтому вывод шестнадцатеричного числа с плавающей точкой невозможен.
- Шестнадцатеричное число > 0xffffffff не переносимо
-
(W portable) Указанное вами шестнадцатеричное число больше, чем 2**32-1 (4294967295), и поэтому не переносимо между системами. См. perlport для получения дополнительной информации о проблемах переносимости.
- Идентификатор слишком длинный
-
(F) Perl ограничивает идентификаторы (имена переменных, функций и т. д.) примерно 250 символами для простых имён и несколько больше для составных имён (например,
$A::B). Вы превысили ограничения Perl. В будущих версиях Perl, вероятно, будут устранены эти произвольные ограничения. - Игнорирование нулевой длины \N{} в классе символов в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(W regexp) Имена Unicode символов (
\N{...}) могут возвращать последовательность нулевой длины. При использовании такого escape-последовательности в классе символов её поведение не определено. Проверьте, что используется правильный escape-символ и правильный обработчик charname. - Недопустимая двоичная цифра '%c'
-
(F) Вы использовали цифру, отличную от 0 или 1, в двоичном числе.
- Недопустимая двоичная цифра %s проигнорирована
-
(W digit) Вы, возможно, использовали цифру, отличную от 0 или 1, в двоичном числе. Интерпретация двоичного числа остановилась перед нарушающей цифрой.
- Недопустимый символ после '_' в прототипе для %s : %s
-
(W illegalproto) В объявлении прототипа был найден недопустимый символ. После '_' в прототипе должен следовать ';', указывающий, что остальные параметры являются необязательными, или один из '@' или '%', так как эти два принимают 0 или более конечных параметров.
- Недопустимый символ \%o (возврат каретки)
-
(F) Perl обычно обрабатывает возвраты каретки в тексте программы как любой другой пробел, что означает, что вы никогда не должны видеть эту ошибку, если Perl был собран с использованием стандартных параметров. По какой-то причине, ваша версия Perl, похоже, была собрана без этой поддержки. Обратитесь к администратору Perl.
- Незаконный символ после символа-сигила в сигнатуре подпрограммы
-
(F) В параметре сигнатуры подпрограммы содержался неожиданный символ после символа-сигила
$,@или%. Обычно после сигила должен следовать имя переменной или=и т. д. Возможно, вы пытаетесь использовать прототип в области действияuse feature 'signatures'? Например:sub foo ($$) {} # legal - a prototype use feature 'signatures; sub foo ($$) {} # illegal - was expecting a signature sub foo ($a, $b) :prototype($$) {} # legal - Незаконный символ в прототипе для %s : %s
-
(W illegalproto) В объявлении прототипа был найден незаконный символ. Допустимыми символами в прототипах являются $, @, %, *, ;, [, ], &, \, и +. Возможно, вы пытались написать сигнатуру подпрограммы, но сначала не включили эту функцию (
use feature 'signatures'), поэтому ваша сигнатура была интерпретирована как плохой прототип. - Незаконное объявление анонимной подпрограммы
-
(F) При использовании ключевого слова
subдля построения анонимной подпрограммы вы всегда должны указать блок кода. См. perlsub. - Незаконное объявление подпрограммы %s
-
(F) Подпрограмма не была объявлена правильно. См. perlsub.
- Незаконное деление на ноль
-
(F) Вы попытались разделить число на 0. Либо в вашей логике была ошибка, либо вам нужно добавить условный оператор для предотвращения бессмысленного ввода.
- Незаконная шестнадцатеричная цифра %s проигнорирована
-
(W digit) Вы, возможно, попытались использовать символ, отличный от 0-9 или A-F, a-f в шестнадцатеричном числе. Интерпретация шестнадцатеричного числа была прекращена перед незаконным символом.
- Незаконный остаток от деления на ноль
-
(F) Вы попытались получить остаток от деления числа на 0. Большинство чисел плохо реагируют на это.
- Неверное количество бит в vec
-
(F) Количество бит в vec() (третий аргумент) должно быть степенью двойки от 1 до 32 (или 64, если ваша платформа поддерживает это).
- Незаконная восьмеричная цифра '%c'
-
(F) Вы использовали 8 или 9 в восьмеричном числе.
- Незаконная восьмеричная цифра %s проигнорирована
-
(W digit) Вы, возможно, попытались использовать 8 или 9 в восьмеричном числе. Интерпретация восьмеричного числа была прекращена перед 8 или 9.
- Незаконный оператор после параметра в сигнатуре подпрограммы
-
(F) За параметром в сигнатуре подпрограммы следовал символ, отличный от
=ввода значения по умолчанию,,или).use feature 'signatures'; sub foo ($=1) {} # legal sub foo ($a = 1) {} # legal sub foo ($a += 1) {} # illegal sub foo ($a == 1) {} # illegal - Незаконный шаблон в регулярном выражении; помечен <-- HERE в m/%s/
-
(F) Вы написали что-то вроде
(?+foo)"+"допустимо только после цифр, указывающих на захват группы. См.(?PARNO). - Незаконный скрипт с правами доступа root
-
(F) Скрипт, запущенный с правами root, оказался незаконным.
- Незаконный переключатель в PERL5OPT: -%c
-
(X) Переменная окружения PERL5OPT может использоваться только для задания следующих переключателей: -[CDIMUdmtw].
- Неверное имя пользовательского свойства
-
(F) Вы указали имя свойства в стиле Юникод в шаблоне регулярного выражения (используя
\p{}или\P{}), которое Perl знает, что не является официальным свойством Юникод, и, вероятно, должно было быть именем пользовательского свойства, но им не может быть, так как они должны начинаться либо сInилиIs. Проверьте правильность написания. См. также "Невозможно найти определение свойства Юникод "%s"". - Некорректное значение переменной среды CRTL "%s"
-
(W internal) Предупреждение, специфичное для VMS. Perl пытался прочитать внутренний массив среды CRTL и столкнулся с элементом без разделителя
=, используемого для разделения ключей и значений. Элемент проигнорирован. - Некорректное сообщение в prime_env_iter: |%s|
-
(W internal) Предупреждение, специфичное для VMS. Perl пытался прочитать определение логического имени или символа командной строки при подготовке к итерации по %ENV и не обнаружил ожидаемого разделителя между ключом и значением, поэтому строка была проигнорирована.
- (при очистке) %s
-
(W misc) Этот префикс обычно указывает, что метод DESTROY() вызвал указанную исключительную ситуацию. Поскольку деструкторы обычно вызываются системой в произвольные моменты выполнения и часто множество раз, предупреждение выводится только один раз для любого числа неудач, которые в противном случае привели бы к повторному выводу того же сообщения.
Неудачу пользовательских обратных вызовов, отправленных с флагом
G_KEEPERR, также может привести к этому предупреждению. См. "G_KEEPERR" в perlcall. - Неполное выражение внутри '(?[ ])' в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) Внутри
(?[ ])была синтаксическая ошибка. Это может произойти, если выражение внутри конструкции было полностью пустым или если для количества операторов слишком много или слишком мало операндов. Perl недостаточно умен, чтобы дать более точное указание на то, что не так. - Несогласованная иерархия при слиянии класса '%s' с C3: слияние не выполнено для родительского класса '%s'
-
(F) Порядок разрешения методов (MRO) данного класса несовместим с C3, и вы включили порядок MRO C3 для этого класса. См. документацию по C3 в mro для получения дополнительной информации.
- Отступ на строке %d здесь-документа не совпадает с разделителем
-
(F) У вас есть отформатированный здесь-документ, где у одной или нескольких строк есть начальные пробелы, не соответствующие закрывающему разделителю.
Например, строка 2 ниже неправильная, потому что она не имеет по крайней мере 2 пробелов, но строки 1 и 3 в порядке, потому что они имеют по крайней мере 2:
if ($something) { print <<~EOF; Line 1 Line 2 not Line 3 EOF }Обратите внимание, что табуляции и пробелы сравниваются строго, т. е. 1 табуляция не будет соответствовать 8 пробелам.
- Бесконечная рекурсия в регулярном выражении
-
(F) Вы использовали шаблон, который ссылается на себя, не потребляя никакого входного текста. Вам следует проверить шаблон, чтобы убедиться, что рекурсивные шаблоны либо потребляют текст, либо терпят неудачу.
- Бесконечная рекурсия через пустой шаблон
-
(F) Вы попытались использовать пустой шаблон внутри блока кода регулярного выражения, например
/(?{ s!!! })/, что привело к повторному выполнению того же шаблона, что является бесконечным циклом, который прерывается путем выброса исключения. - Инициализация переменных состояния в списке в настоящее время запрещена
-
(F)
stateпозволяет инициализировать только одну переменную, указанную без скобок. Такstate $a = 42иstate @a = qw(a b c)разрешены, но неstate ($a) = 42или(state $a) = 42. Чтобы инициализировать более одной переменной состояния, инициализируйте их по одной. - %%s[%s] в скалярном контексте лучше записать как $%s[%s]
-
(W syntax) В скалярном контексте вы использовали индекс/срез значения массива (указано знаком %) для выбора одного элемента массива. Обычно лучше запросить скалярное значение (указано знаком $). Разница в том, что
$foo[&bar]всегда ведет себя как скаляр, как в возвращаемом значении, так и при оценке своего аргумента, а%foo[&bar]предоставляет контекст списка для своего индекса, что может делать странные вещи, если вы ожидаете только один индекс. При вызове в контексте списка он также возвращает индекс (что возвращает&bar) в дополнение к значению. - %%s{%s} в скалярном контексте лучше записать как $%s{%s}
-
(W syntax) В скалярном контексте вы использовали ключ/срез значения хэш-таблицы (указано знаком %) для выбора одного элемента хэш-таблицы. Обычно лучше запросить скалярное значение (указано знаком $). Разница в том, что
$foo{&bar}всегда ведет себя как скаляр, как в возвращаемом значении, так и при оценке своего аргумента, а@foo{&bar}и предоставляет контекст списка для своего индекса, что может делать странные вещи, если вы ожидаете только один индекс. При вызове в контексте списка он также возвращает ключ в дополнение к значению. - Небезопасная зависимость в %s
-
(F) Вы попытались сделать что-то, что механизм защиты не одобрил. Механизм защиты включен при выполнении скрипта с правами root или при явном включении с помощью флага -T. Механизм защиты помечает все данные, полученные напрямую или косвенно от пользователя, которому не доверяют. Если такие данные используются в "опасной" операции, выдается эта ошибка. См. perlsec для получения дополнительной информации.
- Небезопасная директория в %s
-
(F) Вы не можете использовать system(), exec() или открытие с использованием pipes в скрипте с правами root, если
$ENV{PATH}содержит директорию, доступную для записи всеми пользователями. Кроме того, PATH не должен содержать относительные директории. См. perlsec. - Небезопасное использование $ENV{%s} при выполнении %s
-
(F) Вы не можете использовать system(), exec() или открытие с использованием pipes в скрипте с правами root, если какие-либо из
$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 overflow) Шестнадцатеричное, восьмеричное или двоичное число, которое вы указали в качестве литерала или аргумента к hex() или oct(), слишком велико для вашей архитектуры и было преобразовано в число с плавающей точкой. В 32-битной архитектуре наибольшим шестнадцатеричным, восьмеричным или двоичным числом, которое можно представить без переполнения, является соответственно 0xFFFFFFFF, 037777777777 или 0b11111111111111111111111111111111. Обратите внимание, что Perl автоматически преобразует все числа во внутреннее представление с плавающей точкой — с возможной потерей точности в последующих операциях.
- Целочисленное переполнение в srand
-
(S overflow) Число, которое вы передали в srand, слишком велико для представления целых чисел в вашей архитектуре. Число было заменено наибольшим поддерживаемым целым числом (0xFFFFFFFF в 32-битных архитектурах). Это означает, что вы можете получить меньше случайности, чем ожидаете, потому что различные случайные начальные значения, превышающие максимум, вернут одну и ту же последовательность случайных чисел.
- Целочисленное переполнение в версии
- Целочисленное переполнение в версии %d
-
(W overflow) Некоторая часть инициализации версии слишком велика для размера целых чисел вашей архитектуры. Это не предупреждение, поскольку нет рациональной причины, по которой версия должна пытаться использовать элемент больше, чем обычно 2**32. Обычно это вызвано попыткой использовать какое-то странное математическое действие в качестве версии, например 100/9.
- Внутренняя ошибка в парсере регулярных выражений; отмечено <-- HERE в m/%s/
-
(P) Что-то пошло очень плохо в парсере регулярных выражений. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема.
- Внутреннее несоответствие при отслеживании vfork
-
(S) Предупреждение, характерное для VMS. Perl отслеживает количество вызовов
forkиexec, чтобы определить, повлияет ли текущий вызовexecна текущий скрипт или дочерний процесс (см. "exec LIST" в perlvms). По какой-то причине этот счётчик был повреждён, поэтому Perl делает предположение и рассматривает этотexecкак запрос о завершении скрипта Perl и выполнении указанной команды. - внутренний %<num>p может конфликтовать с будущими расширениями printf
-
(S internal) Внутренняя процедура Perl, обрабатывающая
printfиsprintfформатирование, подчиняется немного другой набору правил при вызове из кода C или XS. В частности, форматы, состоящие из цифр, за которыми следует "p" (например, "%7p"), зарезервированы для будущего использования. Если вы видите это сообщение, значит, модуль XS попытался вызвать эту процедуру с таким зарезервированным форматом. - Внутренняя ошибка в парсере регулярных выражений; отмечено <-- HERE в m/%s/
-
(P) Что-то пошло очень плохо в парсере регулярных выражений. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема.
- %s (...) интерпретируется как функция
-
(W syntax) Вы нарушили правило, согласно которому любой оператор списка, за которым следуют скобки, преобразуется в функцию, при этом все аргументы оператора списка находятся внутри скобок. См. "Термины и операторы списков (влево)" в perlop.
- В '(?...)', '(' и '?' должны быть смежными в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Последовательность из двух символов
"(?"в этом контексте в шаблоне регулярного выражения должна быть неделимым токеном, без чего-либо между"("и"?", но вы их разделили пробелами. - В '(*...)', '(' и '*' должны быть смежными в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Последовательность из двух символов
"(*"в этом контексте в шаблоне регулярного выражения должна быть неделимым токеном, без чего-либо между"("и"*", но вы их разделили. Исправьте шаблон и повторите попытку. - Недопустимый атрибут %s: %s
-
(F) Указанный атрибут для подпрограммы или переменной не был распознан Perl или поставщиком обработчика. См. attributes.
- Недопустимые атрибуты %s: %s
-
(F) Указанные атрибуты для подпрограммы или переменной не были распознаны Perl или поставщиком обработчика. См. attributes.
- Недопустимый символ в определении псевдонима charnames; отмечено <-- HERE в '%s
-
(F) Вы пытались создать пользовательский псевдоним для имени символа с опцией
:aliasкuse charnamesи указанный символ в указанном имени не является допустимым. См. "Пользовательские псевдонимы" в charnames. - Недопустимый символ \0 в %s для %s: %s\0%s
-
(W syscalls) Встроенные символы \0 в именах путей или других аргументах системных вызовов выдают предупреждение начиная с версии 5.20. Части после \0 ранее игнорировались системными вызовами.
- Недопустимый символ в \N{...}; отмечено <-- HERE в \N{%s}
-
(F) Только определённые символы допустимы для имён символов. Указанный символ не является допустимым. См. "Пользовательские псевдонимы" в charnames.
- Недопустимое преобразование в %s: "%s"
-
(W printf) Perl не понимает заданное преобразование формата. См. "sprintf" в perlfunc.
- Недопустимый escape в указанной кодировке в регулярном выражении; отмечено <-- HERE в m/%s/
-
(W regexp)(F) Числовой escape (например,
\xHH) значения < 256 не соответствовал одиночному символу после преобразования из кодировки, указанной в прагме кодировки. Escape был заменён на ЗАМЕЩАЮЩИЙ СИМВОЛ (U+FFFD) вместо этого, за исключением(?[ ]), где это является фатальной ошибкой. <-- HERE показывает место в регулярном выражении, где был обнаружен escape. - Недопустимое шестнадцатеричное число в \N{U+...}
- Недопустимое шестнадцатеричное число в \N{U+} в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Символьное значение, представленное
..., не является допустимым шестнадцатеричным числом. Либо оно пустое, либо вы пытались использовать символ, отличный от 0-9 или A-F, a-f в шестнадцатеричном числе. - Недопустимое имя модуля %s с опцией -%c: содержит один двоеточие
-
(F) Аргумент модуля для командной строки perl -m и -M не может содержать одиночное двоеточие в имени модуля, а только в аргументах после «=». Другими словами, -MFoo::Bar=:baz допустимо, но -MFoo:Bar=baz нет.
- Недопустимое имя mro: '%s'
-
(F) Вы попытались
mro::set_mro("classname", "foo")илиuse mro 'foo', гдеfooне является допустимым порядком разрешения методов (MRO). В настоящее время поддерживаются толькоdfsиc3, если вы не загрузили модуль, который является плагином MRO. См. mro и perlmroapi. - Недопустительное отрицательное число (%s) в chr
-
(W utf8) Вы передали отрицательное число в
chr. Отрицательные числа не являются допустимыми номерами символов, поэтому возвращается символ замены Юникода (U+FFFD). - Недопустимое число '%s' для опции -C.
-
(F) Вы предоставили число для опции -C, которое либо содержит лишние ведущие нули, либо превышает представление беззнакового целого числа Perl.
- Недопустимая опция -D%c, используйте -D'' для просмотра вариантов
-
(S debugging) Perl был вызван с недопустимыми флагами отладчика. Вызовите perl с опцией -D без флагов, чтобы увидеть список допустимых значений. Также см. "-Dletters" в perlrun.
- Недопустимый квантификатор в {,} в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Шаблон похож на квантификатор {min,max}, но min или max не удалось разобрать как допустимое число — либо он имеет ведущие нули, либо представляет слишком большое число для обработки. <-- HERE показывает, где в регулярном выражении была обнаружена проблема. См. perlre.
- Недопустимый диапазон [] "%s" в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Указанный диапазон в классе символов имел минимальный символ, больший, чем максимальный символ. Одна из возможностей заключается в том, что вы забыли
{}из вашего конечного\x{}-\xбез фигурных скобок может достигать толькоff. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre. - Недопустимый диапазон "%s" в операторе транслитерации
-
(F) Диапазон, указанный в операторе tr/// или y///, имел минимальный символ, больший, чем максимальный. См. perlop.
- Недопустимый разделительный символ %s в списке атрибутов
-
(F) Между элементами списка атрибутов обнаружен символ, отличный от двоеточия или пробела. Возможно, список параметров предыдущего атрибута был завершен преждевременно. См. attributes.
- Недопустимый разделительный символ %s в спецификации уровня PerlIO %s
-
(Уровень W) При добавлении уровней в систему Perl I/O между элементами списка уровней обнаружен символ, отличный от двоеточия или пробела. Возможно, список параметров предыдущего атрибута был завершен преждевременно.
- Неверный формат строгой версии (%s)
-
(F) Номер версии не соответствует критериям "строгой" версии. "Строгий" номер версии — это положительное десятичное число (целое или с дробной частью) без показательной записи или же десятичная строка типа v-строки с ведущей буквой 'v' и по крайней мере тремя компонентами. Текст в скобках указывает, какие критерии не были соблюдены. Для получения дополнительной информации об допустимых форматах версий см. модуль version.
- Неверный тип '%s' в %s
-
(F) Указанный символ не является допустимым типом для pack или unpack. См. "pack" в perlfunc.
(W) Указанный символ не является допустимым типом для pack или unpack, но ранее игнорировался молча.
- Неверный формат версии (%s)
-
(F) Номер версии не соответствует критериям "мягкой" версии. "Мягкий" номер версии — это положительное десятичное число (целое или с дробной частью) без показательной записи или же десятичная строка типа v-строки. Если v-строка имеет менее трёх компонентов, она должна иметь ведущую букву 'v'. В противном случае ведущая 'v' необязательна. Как десятичные, так и v-строки могут иметь компонент "альфа", разделённый нижним подчеркиванием после дробной или десятичной части. Текст в скобках указывает, какие критерии не были соблюдены. Подробнее о допустимых форматах версий см. модуль version.
- Недопустимый объект версии
-
(F) Внутренняя структура объекта версии была неверной. Возможно, внутренности были изменены напрямую или произвольная ссылка была благословлена в класс "version".
- В '(*VERB...)' скобка '(' и звёздочка '*' должны быть смежными в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Последовательность символов
"(*"в данном контексте в шаблоне регулярного выражения должна быть неделимым токеном, без чего-либо между"("и"*", но вы их разделили. - ioctl не реализован
-
(F) Похоже, ваша машина не реализует ioctl(), что довольно странно для машины, поддерживающей C.
- ioctl() на неоткрытом %s
-
(W unopened) Вы использовали ioctl() с дескриптором файла, который никогда не был открыт. Проверьте поток управления и количество аргументов.
-
(F) Ваш Perl не был сконфигурирован для использования PerlIO, и поэтому вы не можете использовать уровни ввода-вывода. Для использования PerlIO Perl должен быть сконфигурирован с 'useperlio'.
- IO::Socket::atmark не реализован на этой архитектуре
-
(F) Ваша машина не реализует функциональность sockatmark(), ни как системный вызов, ни как вызов ioctl (SIOCATMARK).
- '%s' — неизвестный тип привязки в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы использовали
\b{...}или\B{...}и...неизвестен Perl. Действительные значения приведены в "\b{}, \b, \B{}, \B" в perlrebackslash. - %s() устарело для обработчиков :utf8. В Perl 5.30 это будет фатальной ошибкой
-
(D устарело) Операторы sysread(), recv(), syswrite() и send() устарели для обработчиков с уровнем
:utf8, явно или неявно, например, с уровнем:encoding(UTF-16LE).В настоящее время sysread() и recv() используют только флаг
:utf8для потока, игнорируя фактические уровни. Поскольку sysread() и recv() не выполняют валидацию UTF-8, они могут создавать скаляры с некорректной кодировкой.Аналогично, syswrite() и send() используют только флаг
:utf8, в противном случае игнорируя любые уровни. Если флаг установлен, оба оператора записывают значение в кодировке UTF-8, даже если уровень имеет другую кодировку, например, как в примере выше.В идеале, все эти операторы полностью игнорировали бы состояние
:utf8, работая только с байтами, но это привело бы к молчаливому нарушению существующего кода.В Perl 5.30 больше нельзя будет использовать sysread(), recv(), syswrite() или send() для чтения или записи байтов из/в обработчики :utf8.
- "%s" более чётко записывается как "%s" в регулярном выражении; отмечено <-- HERE в m/%s/
-
(W regexp) (только при
use re 'strict'или внутри(?[...]))Вы указали символ, который имеет более простой способ записи и который также переносим на платформы, работающие с различными наборами символов.
- $* больше не поддерживается. Его использование будет фатальной ошибкой в Perl 5.30
-
(D устарело, синтаксис) Специальная переменная
$*, устаревшая в более старых версиях Perl, была удалена с версии 5.10.0 и больше не поддерживается. В предыдущих версиях Perl использование$*включало или отключало многострочный поиск в строке.Вместо
$*следует использовать модификаторы регулярных выражений/m(и, возможно,/s). Вы можете включить/mдля лексического области (даже для всего файла) сuse re '/m'. (В старых версиях: когда$*имело значение истины, все регулярные выражения вели себя так, как будто они были написаны с использованием/m.)Использование этой переменной будет фатальной ошибкой в Perl 5.30.
- $# больше не поддерживается. Его использование будет фатальной ошибкой в Perl 5.30
-
(D устарело, синтаксис) Специальная переменная
$#, устаревшая в более старых версиях Perl, была удалена с версии 5.10.0 и больше не поддерживается. Вы должны использовать функции printf/sprintf вместо неё.Использование этой переменной будет фатальной ошибкой в Perl 5.30.
- '%s' не является ссылкой на код
-
(W overload) Второй (четвёртый, шестой и т.д.) аргумент overload::constant должен быть ссылкой на код. Либо анонимная подпрограмма, либо ссылка на подпрограмму.
- '%s' — не перегружаемый тип
-
(W overload) Вы попытались перегрузить константу, тип которой не известен пакету overload.
- Флаг -i указан без файлов в командной строке, чтение из STDIN
-
(S inplace) В командной строке был указан флаг
-i, указывающий, что сценарий предназначен для редактирования файлов на месте, но файлы не были указаны. Обычно это ошибка, так как редактирование STDIN на месте не имеет смысла и может вводить в заблуждение, поскольку Perl может казаться зависающим, когда он на самом деле пытается прочитать данные из STDIN. Вы должны либо передать имя файла для редактирования, либо удалить-iиз командной строки. Подробнее см. perlrun. - Мусор в конце регулярного выражения в регулярном выражении m/%s/
-
(P) Парсер регулярных выражений сбит.
- Метка не найдена для "last %s"
-
(F) Вы указали метку цикла для выхода, но вы не находитесь в цикле с таким именем, даже учитывая вызовы. См. "last" в perlfunc.
- Метка не найдена для "next %s"
-
(F) Вы указали метку цикла для продолжения, но вы не находитесь в цикле с таким именем, даже учитывая вызовы. См. "last" в perlfunc.
- Метка не найдена для "redo %s"
-
(F) Вы указали метку цикла для перезапуска, но вы не находитесь в цикле с таким именем, даже учитывая вызовы. См. "last" в perlfunc.
- Отключение эффективного %s не удалось
-
(F) При использовании псевдонима
use filetest, изменение реальных и эффективных идентификаторов пользователя или группы не удалось. - длина/код после конца строки в unpack
-
(F) При распаковке буфер строки был исчерпан, когда сочетание длины/кода unpack потребовало больше данных. В результате длина имеет неопределённое значение. См. "pack" в perlfunc.
- length() используется для %s (Вы имели в виду "scalar(%s")?)
-
(W синтаксис) Вы использовали length() для массива или хэша, когда, вероятно, вам нужно было количество элементов.
Размер массива можно получить, выполнив:
scalar(@array);Количество элементов в хэше можно получить, выполнив:
scalar(keys %hash); - Код лексического анализа пытался вставить не-Latin-1 символ в Latin-1 ввод
-
(F) Расширение пытается вставить текст в текущий разбор (используя lex_stuff_pvn или аналогично), но попыталось вставить символ, который не может быть частью текущего ввода. Это неотъемлемый недостаток механизма вставки, и одна из причин, по которой его следует избегать. Если необходимо вставить, рекомендуется вставлять только чистый ASCII.
- Внутренняя ошибка кода лексического анализа (%s)
-
(F) Код лексического анализа, предоставленный расширением, нарушил API лексического анализатора обнаруживаемым способом.
- listen() на закрытом сокете %s
-
(W закрыто) Вы пытались сделать listen на закрытом сокете. Вы забыли проверить возвращаемое значение вашего вызова socket()? См. "listen" в perlfunc.
- Список форм piped open не реализован
-
(F) На некоторых платформах, особенно на Windows, форма
openс тремя или более аргументами не поддерживает конвейеры, такие какopen($pipe, '|-', @args). Используйте формуopen($pipe, '|prog arg1 arg2...')с двумя аргументами вместо этого. - Литеральный вертикальный пробел в [] недопустим, кроме как под /x в регулярном выражении; отмечен <-- HERE в m/%s/
-
(F) (только под
use re 'strict'или внутри(?[...]))Вероятно, вы забыли модификатор
/xили допущена опечатка в шаблоне. Например, вы действительно хотели сопоставить символ табуляции? Если да, все ASCII-управляющие символы вертикального пробела могут быть представлены последовательностями экранирования, которые не будут выглядеть столь резкими, как ваш шаблон при отображении.\r carriage return \f form feed \n line feed \cK vertical tab - %s: загружаемая библиотека и бинарники Perl несовместимы (получен ключ рукопожатия %p, необходим %p)
-
(P) В процесс загружалась динамическая библиотека
.soили.dll, скомпилированная с другой версией Perl, чем версия, к которой компилировалась эта библиотека. Переустановка модуля XS, скорее всего, исправит эту ошибку. - Локаль '%s' содержит (по крайней мере) следующие символы, которые имеют неожиданные значения: %s. Программа Perl будет использовать ожидаемые значения.
-
(W locale) Вы используете локаль UTF-8. Локали UTF-8 должны иметь определенное поведение, которое большинство из них соблюдают. Это сообщение появляется, когда Perl обнаруживает отклонения от ожиданий, и сообщает вам, что ожидаемое поведение переопределяет эти различия. В некоторых случаях различия вызваны некорректным определением локали, но наиболее распространёнными причинами этого предупреждения являются неоднозначность и противоречия в соответствии со стандартом, и локаль выбрала подход, отличный от Perl.
Одна из них заключается в том, что, вопреки утверждениям, Unicode не полностью игнорирует локаль. В турецком и некоторых родственных языках существуют два типа
"I"символов. Один с точкой в верхнем и нижнем регистре, а другой без точки в обоих случаях. Unicode позволяет локали использовать либо турецкие правила, либо правила, используемые во всех других случаях, где существует только один тип"I", который без точки в верхнем регистре и с точкой в нижнем. Ядро Perl (ещё) не обрабатывает турецкий случай, и это сообщение предупреждает вас об этом. Вместо этого, модуль Unicode::Casing позволяет в основном реализовать турецкие правила форматирования.Другой распространённой причиной являются символы
$ + < = > ^ ` | ~Эти символы вызывают проблемы. Стандарт C указывает, что их следует рассматривать как пунктуацию в C-локали (и стандарт POSIX ссылается на стандарт C), и Unicode обычно рассматривается как надмножество C-локали. Однако Unicode добавил дополнительную категорию «Символ» и классифицирует эти конкретные символы как символы. В большинстве локалей UTF-8 они рассматриваются как знаки пунктуации, так что ispunct(2) возвращает ненулевое значение для них. Но в некоторых локалях оно возвращает 0. Perl использует первый подход, вообще не используя
ispunct()(см. примечание [5] в perlrecharclass), и это сообщение выводится, чтобы сообщить вам, что вы получаете подход Perl, а не локали. - Локаль '%s' может работать некорректно.%s
-
(W locale) Вы используете именованную локаль, которая не UTF-8, и Perl определил, что она не полностью совместима с тем, что он может обрабатывать. Вторая
%sуказывает причину.Наиболее частая причина заключается в том, что в локали присутствуют символы, представленные более чем одним байтом. Perl может обрабатывать только такие локали, как UTF-8. Вероятнее всего, указанная локаль — это локаль не UTF-8 для восточноазиатского языка, такого как китайский или японский. Если локаль является надмножеством ASCII, то её ASCII-часть может работать в Perl.
Некоторые устаревшие локали, которые не являются надмножествами 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) Хотя некоторые функции позволяют указать дескриптор файла или "косвенный объект" перед списком аргументов, эта функция не из них.
- Отсутствует команда в piped open
-
(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(), выходящее за пределы строки.
Ещё один способ — присвоить значение циклу
foreachVAR, когда VAR связан с константой в цикле LIST:$x = 1; foreach my $n ($x, 2) { $n *= 2; # modifies the $x, but fails on attempt to } # modify the 2 - Попытка изменения недопустимого значения массива, %s
-
(F) Вы пытались создать значение массива, а индекс, вероятно, был отрицательным, даже считая от конца массива назад.
- Попытка изменения недопустимого значения хэша, %s
-
(P) Вы пытались создать значение хэша, и это невозможно по какой-то причине.
- Имя модуля должно быть константой
-
(F) В качестве первого аргумента к «use» разрешено только имя модуля без знаков.
- Имя модуля необходимо с опцией -%c
-
(F) Опции
-Mили-mуказывают, что Perl должен загрузить модуль, но вы опустили имя модуля. Обратитесь к perlrun за подробной информацией об опциях-Mи-m. - Более одного аргумента для открытия '%s'
-
(F) Функции
openбыло предложено открыть несколько файлов. Это может произойти, если вы пытаетесь открыть канал к команде, принимающей список аргументов, но забыли указать режим открытия с помощью канала. См. "open" в perlfunc для получения подробной информации. - mprotect для строки COW %p %u не удалось с %d
-
(S) Вы скомпилировали Perl с опцией -DPERL_DEBUG_READONLY_COW (см. "Copy on Write" в perlguts), но общую буферную строку не удалось сделать неизменяемой.
- mprotect для %p %u не удалось с %d
-
(S) Вы скомпилировали Perl с опцией -DPERL_DEBUG_READONLY_OPS (см. perlhacktips), но дерево операций не удалось сделать неизменяемым.
- mprotect RW для строки COW %p %u не удалось с %d
-
(S) Вы скомпилировали Perl с опцией -DPERL_DEBUG_READONLY_COW (см. "Copy on Write" в perlguts), но не удалось сделать общую буферную строку для чтения-записи изменяемой.
- mprotect RW для %p %u не удалось с %d
-
(S) Вы скомпилировали Perl с опцией -DPERL_DEBUG_READONLY_OPS (см. perlhacktips), но не удалось сделать дерево операций для чтения-записи изменяемым перед освобождением операций.
- msg%s не реализован
-
(F) Система IPC сообщений System V не поддерживается вашей системой.
- Многомерный синтаксис %s не поддерживается
-
(W синтаксис) Многомерные массивы не записываются как
$foo[1,2,3]. Они записываются как$foo[1][2][3], как в C. - Не допускается несколько параметров с множественным вводом
-
(F) В сигнатурах подпрограмм параметр с множественным вводом (
@или%) должен быть последним параметром, и их должно быть не более одного; например:sub foo ($a, @b) {} # legal sub foo ($a, @b, %) {} # invalid - '/' должен следовать за числовым типом в unpack
-
(F) У вас был шаблон unpack, содержащий '/', но он не следовал за спецификацией unpack, порождающей числовое значение. См. "pack" в perlfunc.
- %s не должен быть именованной последовательностью в операторе транслитерации
-
(F) Транслитерация (
tr///иy///) транслитирует отдельные символы. Но именованная последовательность по определению — это больше, чем отдельный символ, и поэтому выполнение этой операции над ней не имеет смысла. - "my sub" ещё не реализован
-
(F) Лексически скопированные подпрограммы ещё не реализованы. Не пытайтесь это пока.
- Подпрограмма "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, подпрограмма 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 в контексте левого операнда
-
(F) Когда
vecвызывается в контексте левого операнда, второй аргумент должен быть больше или равен нулю. - Отрицательное значение счётчика повторений ничего не делает
-
(W числовое) Вы попытались выполнить оператор повторения
xменьше 0 раз, что не имеет смысла. - Вложенные квантификаторы в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы не можете квантифицировать квантификатор без использования вмещающих скобок. Так что такие конструкции, как ** или +* или ?*, недопустимы. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема.
Обратите внимание, что квантификаторы минимального сопоставления,
*?,+?, и??кажутся вложенными квантификаторами, но не являются. См. perlre. - %s никогда не был представлен
-
(S внутренний) Символ, о котором идёт речь, был объявлен, но каким-то образом вышел из области видимости, прежде чем мог быть использован.
- next::method/next::can/maybe::next::method не может найти окружающий метод
-
(F)
next::methodдолжен вызываться в контексте реального метода в реальном пакете, и он не смог найти такой контекст. См. mro.
- \N в классе символов должна быть именованным символом: \N{...} в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Новое (от Perl 5.12) значение
\Nкак[^\n]недействительно в классе символов в квадратных скобках по той же причине, что.в классе символов теряет свою специальность: оно соответствует почти всему, а это, вероятно, не то, что вы хотите. - \N{} в инвертированном классе символов или в качестве конечной точки диапазона ограничена одним символом в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Имена Unicode символов (
\N{...}) могут возвращать многосимвольный последовательность. Несмотря на то, что класс символов должен соответствовать только одному символу входных данных, perl будет соответствовать всей последовательности правильно, за исключением случаев, когда класс инвертирован ([^...]), или escape является начальной или конечной точкой диапазона. Математически логичное поведение того, что совпадает при инвертировании, сильно отличается от ожидаемого людьми, поэтому мы решили запретить это. Также неясно, что должно быть сгенерировано, когда\N{...}используется в качестве одной из конечных точек диапазона, например, в[\x{41}-\N{ARABIC SEQUENCE YEH WITH HAMZA ABOVE WITH AE}]Здесь неясно, что подразумевается, так как
\N{...}escape — это последовательность кодовых точек, поэтому это считается ошибкой. - \N{NAME} должен быть разрешен анализатором в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) При компиляции шаблона регулярного выражения было встречено неразрешенный именованный символ или последовательность. Это может произойти несколькими способами, которые обходят анализатор, например, при использовании одинарных кавычек или дополнительной обратной косой черты в двойных кавычках:
$re = '\N{SPACE}'; # Wrong! $re = "\\N{SPACE}"; # Wrong! /$re/;Вместо этого используйте двойные кавычки с одной обратной косой чертой:
$re = "\N{SPACE}"; # ok /$re/;Анализатор также можно обойти, создав шаблон из меньших компонентов:
$re = '\N'; /${re}{SPACE}/; # Wrong!Не следует разделять конструкцию пополам, как в этом случае, и здесь это не работает. Вместо этого используйте приведенное выше решение.
Наконец, сообщение также может появиться при модификаторе регулярных выражений
/xпри разделении\Nпробелами от{, в этом случае удалите пробелы./\N {SPACE}/x; # Wrong! /\N{SPACE}/x; # ok - Недопустимо использование %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для вызова в начале каждого обычного вызова подпрограммы. - Не указан каталог для -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) Вы попытались выполнить оператор повторения
xInf(или-Inf) илиNaNраз, что не имеет смысла. - Недопустимый шестнадцатеричный символ в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) В регулярном выражении был нешестнадцатеричный символ там, где ожидался шестнадцатеричный, например
(?[ [ \xDG ] ]) (?[ [ \x{DEKA} ] ]) - Недопустимый восьмеричный символ в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) В регулярном выражении был невосьмеричный символ там, где ожидался восьмеричный, например
(?[ [ \o{1278} ] ]) - Недопустимый восьмеричный символ '%c'. Разрешено как "%s"
-
(W digit) При разборе восьмеричной числовой константы был неожиданно встречен символ, который не является восьмеричным. Результирующее значение указано.
- "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 сигнал) Вы указали имя сигнала в качестве подстроки к %SIG, которое не было распознано. Введите
kill -lв вашей оболочке, чтобы увидеть допустимые имена сигналов в вашей системе. - Не ссылка на 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 синтаксис) Указанный формат содержит больше полей изображения, чем следующая строка предоставила. См. perlform.
- %s: не найден
-
(A) Вы случайно запустили свой скрипт через оболочку Bourne вместо Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl.
- (?[...]) недопустимо в локали в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F)
(?[...])не может использоваться в рамкахuse localeили с модификатором регулярного выражения/l, поскольку это потребовало бы отсрочки вычисления того, что оно должно оценивать, до времени выполнения, а оно необходимо только на этапе компиляции регулярного выражения. - нет информации об UTC-смещении; предполагается, что местное время равно UTC
-
(S) Предупреждение, характерное для VMS. Perl не смог найти смещение местного часового пояса, поэтому предполагает, что местное системное время эквивалентно UTC. Если это не так, определите логическое имя SYS$TIMEZONE_DIFFERENTIAL, чтобы перевести в число секунд, которое нужно добавить к UTC, чтобы получить местное время.
- NULL OP В RUN
-
(S отладка) Некоторая внутренняя процедура вызвала run() с указателем на null-код.
- Пустое изображение в строке формы
-
(F) Первый аргумент для formline должен быть действительным спецификацией формата изображения. Он оказался пустым, что, вероятно, означает, что вы передали ему неинициализированное значение. См. perlform.
- Null realloc
-
(P) Была предпринята попытка realloc NULL.
- NULL аргумент регулярного выражения
-
(P) Внутренние процедуры сопоставления шаблонов серьезно напортачили.
- NULL параметр регулярного выражения
-
(P) Внутренние процедуры сопоставления шаблонов в замешательстве.
- Число слишком длинное
-
(F) Perl ограничивает представление десятичных чисел в программах примерно 250 символами. Вы превысили эту длину. В будущих версиях Perl, вероятно, будет устранено это произвольное ограничение. Тем временем, попробуйте использовать научную запись (например, "1e6" вместо "1_000_000").
- Число без цифр
-
(F) Perl искал число, но ничего, похожего на число, не нашёл. Это происходит, например, с
\o{}, без числа между фигурными скобками. - Восьмеричное число > 037777777777 не переносимо
-
(W переносимость) Указанное вами восьмеричное число больше, чем 2**32-1 (4294967295), и поэтому не переносимо между системами. См. perlport для получения дополнительной информации о проблемах переносимости.
- Неправильный аргумент имя/значение для подпрограммы '%s'
-
(F) Подпрограмма, использующая параметр хеша со "сборкой", получила нечётное количество аргументов для заполнения хеша. Аргументы должны быть парными, с одинаковым числом ключей и значений. Виновник, вероятно, вызывающий подпрограмму.
Сообщение пытается указать имя вызываемой подпрограммы. Если подпрограмма была алиасована, будет показано исходное имя подпрограммы, независимо от того, какое имя использовал вызывающий.
- Нечётное количество аргументов для overload::constant
-
(W перегрузка) Вызов overload::constant содержал нечётное количество аргументов. Аргументы должны быть парными.
- Нечётное число элементов в анонимном хеше
-
(W разное) Вы указали нечётное число элементов для инициализации хеша, что странно, так как хеши состоят из пар ключ/значение.
- Нечётное число элементов в присваивании хеша
-
(W разное) Вы указали нечётное число элементов для инициализации хеша, что странно, так как хеши состоят из пар ключ/значение.
- Смещение за пределами строки
-
(F)(W уровень) Вы пытались выполнить операцию чтения/записи/отправки/приёма/позиционирования с смещением, указывающим за пределы буфера. Это сложно представить. Единственные исключения из этого – нулевое заполнение, которое произойдёт при переходе за конец строки при
sysread()файла или при позиционировании за пределами конца скаляра, открытого для ввода/вывода (в предвидении будущих чтений и для имитации поведения с реальными файлами). - Старый разделитель пакетов использован в строке
-
(W синтаксис) Вы использовали старый разделитель пакетов, "'", в имени переменной внутри двойной кавычки; например,
"In $name's house". Это эквивалентно"In $name::s house". Если вы имели в виду первое, поставьте обратную косую черту перед апострофом ("In $name\'s house"). - %s() на неопределённом %s
-
(W неопределённый) Была попытка операции ввода/вывода с файловым дескриптором, который никогда не был инициализирован. Вам нужно сделать вызов open(), sysopen() или socket() или вызвать конструктор из пакета FileHandle.
- -%s на неопределённом файловом дескрипторе %s
-
(W неопределённый) Вы попытались вызвать оператор проверки файла с файловым дескриптором, который не открыт. Проверьте свой поток управления. См. также "-X" в perlfunc.
- oops: oopsAV
-
(S внутреннее) Внутреннее предупреждение о том, что грамматика испорчена.
- oops: oopsHV
-
(S внутреннее) Внутреннее предупреждение о том, что грамматика испорчена.
- Операнд без предшествующего оператора в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы написали что-то вроде
(?[ \p{Digit} \p{Thai} ])Есть два операнда, но нет оператора, указывающего, как вы хотите их объединить.
- Операция "%s": метод не найден, %s
-
(F) Была предпринята попытка выполнить перегруженную операцию, для которой не было определено обработчика. Хотя некоторые обработчики могут быть сгенерированы автоматически в терминах других обработчиков, нет стандартного обработчика для любой операции, если ключ перегрузки
fallbackне указан как истинный. См. overload. - Операция "%s" возвращает свой аргумент для не-Unicode кодовой точки 0x%X
-
(S не_unicode) Вы выполнили операцию, требующую правил Unicode, на кодовой точке, которая не входит в Unicode, поэтому то, что она должна сделать, не определено. Perl выбрал для неё ничего не делать и предупредить вас.
Если показанная операция - "ToFold", это означает, что выполнено нечувствительное к регистру сопоставление в регулярном выражении с кодовой точкой.
Если вы знаете, что делаете, можете отключить это предупреждение, используя
no warnings 'non_unicode';. - Операция "%s" возвращает свой аргумент для UTF-16 суррогата U+%X
-
(S суррогат) Вы выполнили операцию, требующую правил Unicode, на суррогате Unicode. Unicode не одобряет использование суррогатов для чего-либо, кроме хранения строк в UTF-16, но правила для суррогатов (нехотя) определены, и для этой операции они ничего не делают. Поскольку использование суррогатов может быть опасным, Perl предупреждает.
Если показанная операция - "ToFold", это означает, что выполнено нечувствительное к регистру сопоставление в регулярном выражении с кодовой точкой.
Если вы знаете, что делаете, можете отключить это предупреждение, используя
no warnings 'surrogate';. - Оператор или точка с запятой отсутствуют перед %s
-
(S неоднозначность) Вы использовали переменную или вызов подпрограммы, где анализатор ожидал оператора. Парсер предположил, что вы на самом деле хотели использовать оператор, но это, скорее всего, неверно. Например, если вы напишете "*foo *foo", это будет интерпретировано так, как будто вы написали "*foo * 'foo'".
- Недостаёт выражения по умолчанию для необязательного параметра
-
(F) В сигнатуре подпрограммы вы написали что-то вроде «$a =», создав именованный необязательный параметр без значения по умолчанию. Безымянный необязательный параметр может не иметь значения по умолчанию, но именованный должен иметь конкретное значение по умолчанию. Вероятно, вам нужно «$a = undef».
- Переопределение переменной "our" %s
-
(W shadow) Похоже, вы уже объявляли эту же глобальную переменную ранее в текущей лексической области.
- Ошибка: недостаточно памяти!
-
(X) Функция malloc() вернула 0, что указывает на недостаток доступной памяти (или виртуальной памяти) для удовлетворения запроса. Perl не имеет другого выбора, кроме как немедленно завершиться.
По крайней мере, в Unix вы можете обойти эту проблему, увеличив лимиты размера данных процесса: в csh/tcsh используйте
limitиlimit datasize n(гдеn— число килобайт) для проверки текущих лимитов и их изменения, а в ksh/bash/zsh используйтеulimit -aиulimit -d n, соответственно. - Ошибка: недостаточно памяти во время расширения %s
-
(X) Была предпринята попытка расширить массив, список или строку за пределы максимального возможного выделения памяти.
- Ошибка: недостаточно памяти во время «большого» запроса на %s
-
(F) Функция malloc() вернула 0, указывая на недостаток доступной памяти (или виртуальной памяти) для удовлетворения запроса. Однако запрос был признан достаточно большим (значение по умолчанию на этапе компиляции — 64Кб), поэтому есть возможность отследить эту ошибку.
- Ошибка: недостаточно памяти во время запроса на %s
-
(X)(F) Функция malloc() вернула 0, указывая на недостаток доступной памяти (или виртуальной памяти) для удовлетворения запроса.
Запрос был признан небольшим, поэтому возможность перехвата ошибки зависит от способа компиляции Perl. По умолчанию она не перехватывается. Однако, если Perl был скомпилирован с этой функцией, он может использовать содержимое
$^Mкак резервный пул после выхода с сообщением об ошибке. В этом случае ошибка может быть перехвачена один раз, и сообщение об ошибке будет содержать строку и файл, где произошел неудачный запрос. - Ошибка: недостаточно памяти для чрезвычайно большого запроса
-
(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.
- Неверный аргумент overload '%s'
-
(W overload) Предикату overload был передан аргумент, который он не распознал. Возможно, вы ошиблись в написании оператора?
- Перегруженная операция разыменования не вернула ссылку
-
(F) Объект с перегруженным оператором разыменования был разыменован, но перегруженная операция не вернула ссылку. См. overload.
- Перегруженная операция qr не вернула REGEXP
-
(F) Объект с перегруженным оператором
qrбыл использован в соответствии с регулярным выражением, но перегруженная операция не вернула скомпилированное регулярное выражение. См. overload. - Атрибут пакета %s может конфликтовать с будущим ключевым словом: %s
-
(W reserved) Было использовано имя атрибута в нижнем регистре, имеющее обработчик в данном пакете. В будущем это имя может иметь другое значение для самого Perl, даже если сейчас нет. Возможно, следует использовать имя атрибута с использованием смешанного регистра. См. attributes.
- Переполнение счетчика повторений в pack/unpack
-
(F) Вы не можете указать счетчик повторений настолько большой, что он переполняет ваши целые числа со знаком. См. "pack" в perlfunc.
- Переполнение страницы
-
(W io) Один вызов write() произвел больше строк, чем помещается на одной странице. См. perlform.
- Критическая ошибка: %s
-
(P) Внутренняя ошибка.
- Критическая ошибка: попытка вызвать %s в %s
-
(P) Один из операторов проверки файла вошел в ветвь кода, которая вызывает функцию, связанную с ACL, но эта функция недоступна на этой платформе. Предыдущие проверки означают, что на этой платформе вход в эту ветвь невозможен.
- Критическая ошибка: дочерний псевдопроцесс никогда не планировался
-
(P) Дочерний псевдопроцесс в реализации ithreads на Windows не был запланирован в течение отведенного периода времени и поэтому не смог должным образом инициализироваться.
- Критическая ошибка: ck_grep, тип=%u
-
(P) Не удалась внутренняя проверка согласованности при компиляции grep.
- Критическая ошибка: поврежденный индекс сохранённого стека %ld
-
(P) Была запрошена обработка сохранённого стека, чтобы восстановить больше локальных значений, чем их содержится в сохранённом стеке.
- Критическая ошибка: del_backref
-
(P) Не удалась внутренняя проверка согласованности при попытке сбросить слабую ссылку.
- Критическая ошибка: do_subst
-
(P) Внутренняя процедура pp_subst() была вызвана с недопустимыми операционными данными.
- Критическая ошибка: do_trans_%s
-
(P) Внутренние процедуры do_trans были вызваны с недопустимыми операционными данными.
- Критическая ошибка: fold_constants JMPENV_PUSH вернула %d
-
(P) Во время попытки свернуть константы было поймано исключение, отличное от исключения
eval. - Критическая ошибка: frexp: %f
-
(P) Библиотечная функция frexp() завершилась с ошибкой, что сделало невозможным printf("%f").
- Критическая ошибка: goto, тип=%u, ix=%ld
-
(P) Мы вытолкнули стек контекстов в контекст с указанной меткой, и затем обнаружили, что это не контекст, в котором мы знаем, как сделать goto.
- Критическая ошибка: gp_free не смог освободить указатель на glob
-
(P) Внутренняя процедура, используемая для очистки записей типаглоба, пыталась это сделать повторно, но каждый раз что-то создавало записи в glob. Скорее всего, glob содержит объект со ссылкой обратно на glob и деструктором, который добавляет новый объект в glob.
- Критическая ошибка: INTERPCASEMOD, %s
-
(P) Лексер попал в плохое состояние в модификаторе case.
- Критическая ошибка: INTERPCONCAT, %s
-
(P) Лексер попал в плохое состояние при разборе строки с скобками.
- Критическая ошибка: kid popen errno read
-
(F) Ответ повисшего дочернего процесса содержал непонятное сообщение об errno.
- Критическая ошибка: last, тип=%u
-
(P) Мы вытолкнули стек контекстов в контекст блока, и затем обнаружили, что это не контекст блока.
- Критическая ошибка: leave_scope clearsv
-
(P) Изменяемая лексическая переменная каким-то образом стала только для чтения внутри области.
- Критическая ошибка: leave_scope несоответствие %u
-
(P) Вероятно, стек сохранений синхронизировался неправильно. По крайней мере, на вершине стека был некорректный перечисление.
- Критическая ошибка: magic_killbackrefs
-
(P) Не удалась внутренняя проверка согласованности при попытке сбросить все слабые ссылки на объект.
- Критическая ошибка: malloc, %s
-
(P) Нечто запросило отрицательное число байтов для malloc.
- Критическая ошибка: переполнение памяти
-
(P) Нечто попыталось выделить либо больше памяти, чем возможно, или отрицательное количество.
- Критическая ошибка: pad_alloc, %p!=%p
-
(P) Компилятор запутался, какой буфер выделить и освободить временные и лексические переменные.
- Критическая ошибка: pad_free curpad, %p!=%p
-
(P) Компилятор запутался, какой буфер выделить и освободить временные и лексические переменные.
- Критическая ошибка: pad_free po
-
(P) Внутренне обнаружен нулевой смещение буфера. Была попытка освободить целевой ресурс, который вообще не был выделен.
- Критическая ошибка: 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) Некоторая внутренняя процедура запросила goto (или что-то подобное), но не предоставила место назначения.
- Критическая ошибка: return, тип=%u
-
(P) Мы вытолкнули стек контекстов в контекст подпрограммы или eval, и затем обнаружили, что это не контекст подпрограммы или eval.
- Критическая ошибка: scan_num, %s
-
(P) scan_num() был вызван на том, что не является числом.
- panic: Последовательность (?{...}): в регулярном выражении m/%s/ не найден блок кода
-
(P) При компиляции шаблона с вложенными блоками кода (?{}) или (??{}), Perl не смог найти блок кода, который должен был быть уже найден и скомпилирован Perl до того, как управление перешло к компилятору регулярных выражений.
- panic: strxfrm() получает абсурдные значения - a => %u, ab => %u
-
(P) Проверка целостности интерпретатора для функции C strxfrm() не удалась. В текущем локализованном наборе правил возвращаемое преобразование строки "ab" короче, чем для строки "a", что бессмысленно.
- panic: sv_chop %s
-
(P) В процедуру sv_chop() была передана позиция, которая не находится внутри буфера строки скаляра.
- panic: sv_insert, midend=%p, bigend=%p
-
(P) В процедуре sv_insert() было запрошено удаление большего количества строк, чем их было.
- panic: top_env
-
(P) Компилятор попытался выполнить операцию перехода (goto) или что-то подобное.
- panic: нереализованная операция %s (#%d) вызвана
-
(P) Компилятор сломался и попытался использовать операцию, которая не разрешена во время выполнения.
- panic: неизвестный OA_*: %x
-
(P) Внутренняя процедура, обрабатывающая аргументы вызовов подпрограмм
&CORE::foo(), не смогла определить ожидаемый тип аргументов. - panic: utf16_to_utf8: нечётная длина байта
-
(P) Что-то попыталось вызвать utf16_to_utf8 с нечётной (вместо чётной) длиной байта.
- panic: utf16_to_utf8_reversed: нечётная длина байта
-
(P) Что-то попыталось вызвать utf16_to_utf8_reversed с нечётной (вместо чётной) длиной байта.
- panic: yylex, %s
-
(P) Лексер попал в плохое состояние во время обработки модификатора случая.
- Пропущенные скобки вокруг списка "%s"
-
(W parenthesis) Вы сказали что-то вроде
my $foo, $bar = @_;когда имели в виду
my ($foo, $bar) = @_;Помните, что "my", "our", "local" и "state" связаны сильнее, чем запятая.
- Внутренняя ошибка кода разбора (%s)
-
(F) Код разбора, предоставленный расширением, нарушил API парсера обнаруживаемым образом.
- Вложенность подпрограмм шаблона без изменения позиции превысила ограничение в регулярном выражении
-
(F) Вы использовали шаблон, который использует слишком много вложенных вызовов подшаблонов без потребления текста. Перестройте шаблон, чтобы текст потреблялся перед превышением ограничения вложенности.
-
-pнаправление: %s -
(F) Во время неявной выдачи, вызванной переключателем командной строки
-p, произошла ошибка. (Эта выдача направляется на стандартный вывод, если вы не перенаправили её с помощью select().) - Версия API Perl %s из %s не соответствует %s
-
(F) Модуль XS, о котором идёт речь, был скомпилирован с использованием другой несовместимой версии Perl, чем та, которая загрузила модуль XS.
- Правила сгиба Perl не обновлены для 0x%X; пожалуйста, используйте утилиту perlbug для отчета; в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(S regexp) Вы использовали регулярное выражение с нечувствительным к регистру соответствием, и в Perl есть ошибка, в которой встроенные правила сгиба регулярных выражений неточны. Это может привести к неверным результатам. Пожалуйста, сообщите об этой ошибке, используя утилиту perlbug.
- Экспериментальный уровень PerlIO ':win32'
-
(S experimental::win32_perlio) Уровень PerlIO
:win32экспериментальный. Если вы хотите рискнуть использовать этот уровень, просто отключите это предупреждение:no warnings "experimental::win32_perlio"; - Perl_my_%s() недоступен
-
(F) Ваша платформа имеет очень необычный порядок байтов и размер целых чисел, поэтому не удалось настроить некоторые или все функции преобразования порядка байтов фиксированной ширины. Это проблема только при использовании модификаторов '<' или '>' в шаблонах (un)pack. См. "pack" в perlfunc.
- Perl %s необходим (вы имели в виду %s?)--это только %s, остановлено
-
(F) Код, который вы пытаетесь запустить, запросил более новую версию Perl, чем у вас установлена. Возможно,
use 5.10был написан вместоuse 5.010илиuse v5.10. Без лидирующегоv, число интерпретируется как десятичное, при этом каждые три цифры после десятичной точки представляют часть номера версии. Например, 5.10 эквивалентно v5.100. - Perl %s необходим--это только %s, остановлено
-
(F) Модуль, о котором идет речь, использует функции версии Perl, более новой, чем текущая. Сколько времени прошло с момента последнего обновления?
См. "require" в perlfunc.
- PERL_SH_DIR слишком длинный
-
(F) Ошибка, характерная для OS/2. PERL_SH_DIR - это каталог для поиска
shоболочки. См. "PERL_SH_DIR" в perlos2. - PERL_SIGNALS неверный: "%s"
-
(X) См. "PERL_SIGNALS" в perlrun для допустимых значений.
- Perl с %s слишком современны--это %s, остановлено
-
(F) Код, который вы пытаетесь запустить, утверждает, что он не запустится на вашей версии Perl, потому что она слишком новая. Возможно, код нужно обновить, или он просто неправильный, и проверку версии следует удалить.
- perl: предупреждение: Не-шестнадцатеричный символ в '$ENV{PERL_HASH_SEED}', семя установлено частично
-
(S) PERL_HASH_SEED должен соответствовать /^\s*(?:0x)?[0-9a-fA-F]+\s*\z/ но содержал не-шестнадцатеричный символ. Это может означать, что вы используете не то семя хеширования, которое вы думаете.
- perl: предупреждение: Настройка локали не удалась.
-
(S) Полное сообщение об ошибке будет выглядеть примерно так:
perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LC_ALL = "En_US", LANG = (unset) are supported and installed on your system. perl: warning: Falling back to the standard locale ("C").Точно, какие настройки локали не удались, варьируется. В приведенном выше примере настройки были такими, что LC_ALL был "En_US", а LANG не имел значения. Эта ошибка означает, что Perl обнаружил, что вы и/или поставщик вашей операционной системы и/или системный администратор настроили так называемую систему локализации, но Perl не смог использовать эти настройки. К счастью, это не очень серьёзно: существует "по умолчанию локали" под названием "C", которую Perl может и будет использовать, и сценарий будет запущен. Однако, прежде чем вы действительно исправите проблему, вы будете получать то же сообщение об ошибке каждый раз при запуске Perl. Как реально исправить проблему, можно найти в разделе perllocale, подзаголовок LOCALE PROBLEMS.
- perl: предупреждение: странная настройка в '$ENV{PERL_PERTURB_KEYS}': '%s'
-
(S) Perl был запущен с переменной окружения PERL_PERTURB_KEYS определённой, но содержащей неожиданное значение. Допустимые значения этого параметра следующие.
Numeric | String | Result --------+---------------+----------------------------------------- 0 | NO | Disables key traversal randomization 1 | RANDOM | Enables full key traversal randomization 2 | DETERMINISTIC | Enables repeatable key traversal | | randomizationПринимаются как числовые, так и строковые значения, но обратите внимание, что строковые значения чувствительны к регистру. Значение по умолчанию для этого параметра - "RANDOM" или 1.
- pid %x не является дочерним
-
(W exec) Предупреждение, характерное для VMS. Waitpid() было попрошено подождать процесса, который не является дочерним процессом текущего процесса. Хотя это нормально с точки зрения VMS, это, вероятно, не то, что вы имели в виду.
- 'P' должен иметь явный размер в unpack
-
(F) Шаблон unpack 'P' должен иметь явный размер, а не '*'.
- Неизвестный класс POSIX [:%s:] в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) Класс в синтаксисе класса символов [: :] неизвестен. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема. Обратите внимание, что классы символов POSIX не имеют префикса
is, как это есть в соответствующих интерфейсах C: другими словами, это[[:print:]], а неisprint. См. perlre. - POSIX getpgrp не может принять аргумент
-
(F) Ваша система имеет POSIX getpgrp(), который не принимает аргумент, в отличие от версии BSD, которая принимает pid.
- Синтаксис POSIX [%c-%c] должен находиться внутри классов символов%s в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(W regexp) Perl считает, что вы имели в виду класс символов POSIX, но не использовали достаточно скобок. Эти конструкции классов POSIX [: :], [= =] и [. .] идут внутри классов символов, например:
qr/[012[:alpha:]345]/. То, к чему скомпилировался шаблон регулярного выражения, вероятно, не соответствует вашим намерениям. Например,qr/[:alpha:]/компилируется в класс символов, содержащий четыре символа":","a","l","h", и"p". Для указания класса POSIX он должен был быть записанqr/[[:alpha:]]/.Обратите внимание, что [= =] и [. .] в настоящее время не реализованы; они просто служат указателями для будущих расширений и приведут к ошибке.
Если спецификация класса не была полностью корректной, сообщение указывает об этом.
- Синтаксис POSIX [. .] зарезервирован для будущих расширений в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) Внутри классов символов регулярных выражений ([]) синтаксис, начинающийся с "[." и заканчивающийся ".]", зарезервирован для будущих расширений. Если вам нужно представить эти последовательности символов внутри класса символов регулярного выражения, просто поставьте обратный слэш перед квадратными скобками: "\[." и ".\]". <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.
- Синтаксис POSIX [= =] зарезервирован для будущих расширений в регулярном выражении; отмечено <-- ЗДЕСЬ в 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 Ошибка сервера".
- printf() на закрытом файловом дескрипторе %s
-
(W closed) Файловый дескриптор, в который вы записываете, был закрыт до этого момента. Проверьте поток управления.
- print() на закрытом файловом дескрипторе %s
-
(W closed) Файловый дескриптор, для которого вы выполняете печать, был закрыт до этого момента. Проверьте поток управления.
- Процесс завершен SIG%s
-
(W) Это стандартное сообщение, выданное приложениями OS/2, в то время как приложения *nix завершаются молча. Это считается особенностью порта OS/2. Вы можете легко отключить это, используя соответствующие обработчики сигналов, см. "Сигналы" в perlipc. См. также "Процесс завершен SIGTERM/SIGINT" в perlos2.
- Прототип после '%c' для %s : %s
-
(W illegalproto) Символ следует за % или @ в прототипе. Это бесполезно, так как % и @ поглощают остальную часть аргументов подпрограммы.
- Несоответствие прототипов: %s vs %s
-
(S prototype) Подпрограмма, которая была объявлена или определена, была ранее объявлена или определена с другим прототипом функции.
- Прототип не завершен
-
(F) Вы опустили закрывающую скобку в определении прототипа функции.
- Прототип '%s' перезаписан атрибутом 'prototype(%s)' в %s
-
(W prototype) Прототип был объявлен как в скобках после имени подпрограммы, так и через атрибут прототипа. Прототип в скобках бесполезен, так как он будет заменён прототипом из атрибута до его использования.
- Квантификатор следует за пустым выражением в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы начали регулярное выражение с квантификатора. Заключите в обратную косую черту, если вы имели в виду это буквально. <-- HERE показывает, где в регулярном выражении была обнаружена проблема. См. perlre.
- Квантификатор в {,} больше чем %d в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) В настоящее время существует ограничение на размер минимальных и максимальных значений конструкции {min,max}. <-- HERE показывает, где в регулярном выражении была обнаружена проблема. См. perlre.
- Квантификатор {n,m} с n > m не может соответствовать в регулярном выражении
- Квантификатор {n,m} с n > m не может соответствовать в регулярном выражении; отмечено <-- HERE в m/%s/
-
(W regexp) Минимальное значение должно быть меньше или равно максимальному. Если вы действительно хотите, чтобы ваше регулярное выражение соответствовало чему-то 0 раз, просто укажите {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) Файловый дескриптор, из которого вы читаете, был закрыт до этого момента. Проверьте поток управления.
- read() на закрытом файловом дескрипторе %s
-
(W closed) Вы пытались прочитать из закрытого файлового дескриптора.
- read() на неооткрытом файловом дескрипторе %s
-
(W неооткрыт) Вы попытались считать из файлового дескриптора, который никогда не был открыт.
- Перевыделение памяти слишком велико: %x
-
(F) На машине MS-DOS вы не можете выделить более 64 КБ.
- realloc() освобождённой памяти проигнорировано
-
(S malloc) Внутренняя функция realloc() была вызвана на уже освобождённой памяти.
- Перекомпилируйте Perl с -DDEBUGGING для использования переключателя -D
-
(S отладка) Вы не можете использовать опцию -D, если код для получения желаемого вывода не скомпилирован в Perl, что влечёт некоторую накладную стоимость, поэтому она в данный момент исключена из вашей копии.
- Рекурсивный вызов Perl_load_module в PerlIO_find_layer
-
(P) В настоящее время запрещено загружать модули при создании файлового дескриптора внутри обработчика %INC. Это может произойти с
open my $fh, '<', \$scalar, который неявно загружает PerlIO::scalar. Попробуйте сначала явно загрузить PerlIO::scalar. - Обнаружено рекурсивное наследование в пакете '%s'
-
(F) При вычислении порядка разрешения методов (MRO) пакета Perl обнаружил бесконечную петлю в иерархии
@ISA. Это грубое проверка, которая прекращает работу после 100 уровней глубины@ISA. - Избыточный аргумент в %s
-
(W избыточный) Вы вызвали функцию с более аргументами, чем предполагалось на основании других аргументов. В настоящее время отображается только тогда, когда для формата типа printf требуется меньше аргументов, чем передано, но в будущем может быть использовано для, например, "pack" в perlfunc.
- refcnt_dec: fd %d%s
- refcnt: fd %d%s
- refcnt_inc: fd %d%s
-
(P) В реализации ввода-вывода Perl произошла ошибка внутренней непротиворечивости. Если вы видите это сообщение, что-то очень не так.
- Ссылка найдена там, где ожидался список чётной длины
-
(W разные) Вы передали одну ссылку, где 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 разные) Вы пытались ослабить ссылку, которая уже слабая. Это не оказывает никакого влияния.
- Ссылка не слабая
-
(W разные) Вы пытались ослабить ссылку, которая не является слабой. Это не оказывает никакого влияния.
- Ссылка на недопустимую группу 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}, в выражении нет как минимум семи наборов закрытых группирующих скобок.<-- ЗДЕСЬ показывает местонахождение проблемы в регулярном выражении.
- Повреждение памяти regexp
-
(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 разные) Вы использовали список замен, который длиннее списка поиска. Поэтому дополнительные элементы в списке замен бессмысленны.
- '(*%s' требует завершающей ':' в регулярном выражении; помечено <-- ЗДЕСЬ в m/%s/
-
(F) Вы использовали конструкцию, которая требует двоеточие и аргумент шаблона. Укажите их или проверьте, что вы используете правильную конструкцию.
- '%s' разрешено в '\o{%s}%d'
-
(W разные, regexp) Вы написали что-то вроде
\08, или\179в строке с двойными кавычками. Все кроме последней цифры рассматривается как одиночный символ, заданный в восьмеричной форме. Последняя цифра — это следующий символ в строке. Чтобы сказать Perl, что это именно то, что вы хотите, вы можете использовать синтаксис\o{ }, или использовать ровно три цифры для указания восьмеричного кода символа. - Оператор %s= перевернут
-
(W синтаксис) Вы написали оператор присваивания наоборот. Знак = всегда должен быть последним, чтобы избежать неоднозначности с последующими унарными операторами.
- rewinddir() попытка на невалидном дескрипторе каталога %s
-
(W ввод-вывод) Дескриптор каталога, на котором вы пытались выполнить 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 unopened) Вы попытались использовать функцию seek() или sysseek() с файловым дескриптором, который либо никогда не был открыт, либо был закрыт.
- select не реализован
-
(F) Эта машина не реализует системный вызов select().
- Взаимные связи массивов и хешей не поддерживаются
-
(F) Взаимные связи массивов и хешей не поддерживаются в текущей реализации.
- Пропущенная точка с запятой
-
(W semicolon) Возможная ошибка синтаксиса рядом была вызвана отсутствием точки с запятой или, возможно, какого-то другого отсутствующего оператора, такого как запятая.
- полупаника: попытка дублировать освобожденную строку
-
(S internal) Внутренняя функция newSVsv() была вызвана для дублирования скаляра, который ранее был помечен как освобожденный.
- sem%s не реализован
-
(F) На вашей системе нет межпроцессного обмена семафорами System V.
- send() на закрытом сокете %s
-
(W closed) Сокет, которому вы отправляете данные, был закрыт до этого момента. Проверьте свой поток управления.
- Последовательность "\c{" недопустима
-
(F) Эти три символа не могут появляться в последовательности в контексте двойных кавычек. Это сообщение выводится только на платформах, отличных от ASCII (на ASCII платформах выводится другое сообщение об ошибке). Если вы намеревались указать управляющий символ с этой последовательностью, вам нужно использовать другой способ его задания.
- Последовательность (? незавершенный в регулярном выражении; отмечена <-- ЗДЕСЬ в m/%s/
-
(F) Регулярное выражение закончилось незавершенным расширением (?. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.
- Последовательность (?%c...) не реализована в регулярном выражении; отмечена <-- ЗДЕСЬ в m/%s/
-
(F) Предлагаемое расширение регулярного выражения имеет зарезервированный символ, но еще не реализовано. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.
- Последовательность (?%s...) не распознана в регулярном выражении; отмечена <-- ЗДЕСЬ в m/%s/
-
(F) Вы использовали расширение регулярного выражения, которое не имеет смысла. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема. Это может произойти при использовании конструкции
(?^...), чтобы указать Perl использовать стандартные модификаторы регулярных выражений, и вы избыточно задали стандартный модификатор. Для других причин см. perlre. - Последовательность (?#... не завершена в регулярном выражении m/%s/
-
(F) Комментарий в регулярном выражении должен быть завершен закрывающей скобкой. Вложенные скобки недопустимы. См. perlre.
- Последовательность (?&... не завершена в регулярном выражении; отмечена <-- ЗДЕСЬ в m/%s/
-
(F) Имя ссылки вида
(?&...)отсутствовала конечная закрывающая скобка после имени. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема. - Последовательность (?%c... не завершена в регулярном выражении; отмечена <-- ЗДЕСЬ в m/%s/
-
(F) Имя группы вида
(?'...')или(?<...>)отсутствовала конечная закрывающая кавычка или угловая скобка. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема. - Последовательность (?(%c... не завершена в регулярном выражении; отмечена <-- ЗДЕСЬ в m/%s/
-
(F) Имя ссылки вида
(?('...')...)или(?(<...>)...)отсутствовала конечная закрывающая кавычка или угловая скобка после имени. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема. - Последовательность (?... не завершена в регулярном выражении; отмечена <-- ЗДЕСЬ в m/%s/
-
(F) Не было соответствующей закрывающей скобки для «(». <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема.
- Последовательность \%s... не завершена в регулярном выражении; отмечена <-- ЗДЕСЬ в m/%s/
-
(F) Регулярное выражение ожидает обязательного аргумента после 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 может его найти, по сути, более или менее. Более подробную информацию можно найти по следующей ссылке:
http://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 closed) Вы попытались установить опцию сокета на закрытом сокете. Не забыли ли вы проверить возвращаемое значение вызова socket()? См. "setsockopt" в perlfunc.
- Запрещено присваивание $/ ссылке на %s
-
(F) Вы присвоили ссылку на скаляр переменной
$/, где ссылка не является положительным целым числом. В старых версиях Perl это казалось работать так же, как присвоение значенияundef, но на самом деле работало по-другому, было менее эффективным, и в случае плохой удачи могло привести к разделению файла строковым представлением ссылки.В Perl 5.20.0 это было изменено, чтобы оно точно соответствовало присвоению
$/значения undef, за исключением того, что будет выведено это предупреждение.Рекомендуется изменить код на явное присвоение
$/значенияundef, если вы хотите загрузить весь файл. Начиная с Perl 5.28, присвоение$/ссылки на целое число, которое не является положительным, является фатальной ошибкой. - Присваивание $/ ссылке на %s запрещено
-
(F) Вы попытались присвоить ссылку на нецелое значение переменной
$/. В старых версиях Perl это поведение было подобно присвоению ссылки на положительное целое число, где целое число — это адрес ссылки. Начиная с Perl 5.20.0 это фатальная ошибка, чтобы будущие версии Perl могли использовать ссылки на нецелые значения для более интересных целей. - shm%s не реализовано
-
(F) На вашем компьютере нет механизма межпроцессного взаимодействия System V shared memory.
- !=~ должно быть !~
-
(W синтаксис) Оператор несовпадения — это !~, а не !=~. !=~ будет интерпретирован как операторы != (не равно численно) и ~ (дополнение по модулю 1): вероятно, это не то, что вы имели в виду.
- /%s/ должно быть написано как "%s"
-
(W синтаксис) Вы использовали шаблон, где Perl ожидал найти строку, как в первом аргументе
join. Perl будет обрабатывать результат совпадения шаблона с $_ как строку, что, вероятно, не то, что вы имели в виду. - shutdown() для закрытого сокета %s
-
(W закрыто) Вы пытались выполнить shutdown для закрытого сокета. Кажется, немного излишне.
- Обработчик сигнала SIG%s "%s" не определен
-
(W сигнал) Обработчик сигнала, указанный в %SIG, на самом деле не существует. Возможно, вы поместили его в неправильный пакет?
- Утечка Slab из cv %p
-
(S) Если вы видите это сообщение, значит, что-то серьезно не так с внутренней обработкой деревьев операций. Дерево операций должно было быть освобождено после ошибки компиляции, но не было найдено, поэтому вместо этого была утечка.
- sleep(%u) слишком велико
-
(W переполнение) Вы вызвали
sleepс числом, которое превышает его возможности обработки, иsleepвероятно проспало меньше времени, чем ожидалось. - Параметр slurpy не последний
-
(F) В сигнатуре подпрограммы вы поместили что-то после параметра slurpy (массива или хэша). Параметр slurpy принимает все доступные аргументы, поэтому дополнительных аргументов для заполнения последующих параметров не остается.
- Умное сопоставление неопределённого объекта нарушает инкапсуляцию
-
(F) Не следует использовать оператор
~~для объекта, который не перегружает его: Perl откажется использовать внутреннюю структуру объекта для умного сопоставления. - Умное сопоставление — экспериментальная функция
-
(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) Вы выполнили exec() с каким-либо утверждением после него, отличным от die(). Это почти всегда ошибка, так как exec() никогда не возвращается, кроме случаев сбоя. Вы, вероятно, хотели использовать system() вместо этого, который возвращает результат. Чтобы подавить это предупреждение, поместите exec() в собственный блок.
- Подпрограмма «state» %s не может быть в пакете
-
(F) Подпрограммы со локальным пространством имён не находятся в пакете, поэтому не имеет смысла пытаться объявить их с квалификатором пакета.
- «state %s» используется в сравнении для сортировки
-
(W синтаксис) Переменные пакета $a и $b используются для сравнения при сортировке. Вы использовали $a или $b в качестве операнда для оператора
<=>илиcmpвнутри блока сравнения для сортировки, и переменная ранее была объявлена как локальная переменная. Либо укажите имя пакета для переменной сортировки, либо переименуйте локальную переменную. - Переменная «state» %s не может быть в пакете
-
(F) Переменные со локальным пространством имён не находятся в пакете, поэтому не имеет смысла пытаться объявить их с квалификатором пакета. Используйте local(), если хотите локализовать переменную пакета.
- stat() для неоткрытого дескриптора файла %s
-
(W не открыто) Вы пытались использовать функцию stat() для дескриптора файла, который либо никогда не открывался, либо был закрыт.
- Строки с кодовыми точками более 0xFF могут не быть отображены в дескрипторы файлов в памяти
-
(W utf8) Вы попытались открыть ссылку на скаляр для чтения или добавления, где скаляр содержал кодовые точки более 0xFF. Файлы в памяти моделируют файлы на диске и могут содержать только байты.
- Найден заглушка при разрешении метода «%s» перегрузки «%s» в пакете «%s»
-
(P) Разрешение перегрузки через дерево @ISA может быть нарушено заглушками импорта. Заглушки никогда не должны создаваться неявно, но явные вызовы к
canмогут нарушить это. - Атрибуты подпрограммы должны предшествовать сигнатуре
-
(F) Когда включены сигнатуры подпрограмм, все атрибуты подпрограмм должны предшествовать сигнатуре. Обратите внимание, что в версиях 5.22..5.26 этот порядок был обратным. Таким образом:
sub foo :lvalue ($a, $b) { ... } # 5.20 and 5.28 + sub foo ($a, $b) :lvalue { ... } # 5.22 .. 5.26 - Подпрограмма "&%s" недоступна
-
(W замыкание) Во время компиляции внутренняя именованная подпрограмма или eval пытается захватить внешнюю локальную подпрограмму, которая в данный момент недоступна. Это может произойти по двум причинам. Во-первых, локальная подпрограмма может быть объявлена во внешней анонимной подпрограмме, которая еще не создана. (Помните, что именованные подпрограммы создаются во время компиляции, а анонимные — во время выполнения). Например,
sub { my sub a {...} sub f { \&a } }В момент создания f оно не может захватить текущую подпрограмму «a», так как анонимная подпрограмма еще не была создана. Напротив, следующее предупреждение не выдаст, так как анонимная подпрограмма к этому моменту создана и активна:
sub { my sub a {...} eval 'sub f { \&a }' }->();Вторая ситуация вызвана доступом eval к локальной подпрограмме, которая вышла из области видимости, например,
sub f { my sub a {...} sub { eval '\&a' } } f()->();Здесь, когда '\&a' в eval компилируется, f() не выполняется, поэтому его &a недоступна для захвата.
- Подпрограмма "%s" &%s скрывает более раннее объявление в том же %s
-
(W тень) Подпрограмма «my» или «state» была переопределена в текущей области видимости или операторе, фактически исключая весь доступ к предыдущему экземпляру. Это почти всегда типографическая ошибка. Обратите внимание, что предыдущая подпрограмма будет существовать до конца области видимости или пока не будут уничтожены все ссылки на неё из замыканий.
- Подпрограмма %s переопределена
-
(W переопределение) Вы переопределили подпрограмму. Чтобы подавить это предупреждение, напишите
{ no warnings 'redefine'; eval "sub name { ... }"; } -
(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 до типа, который фактически был ниже его текущего типа.
- SWASHNEW не вернул ссылку HV
-
(P) Что-то пошло не так внутри Perl при попытке поиска символов Юникода.
- Переключатель (?(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 синтаксис OK
-
(F) Конечное сводное сообщение, когда
perl -cзавершается успешно. - sysread() на закрытом файловом дескрипторе %s
-
(W closed) Вы попытались прочитать из закрытого файлового дескриптора.
- sysread() на неоткрытом файловом дескрипторе %s
-
(W unopened) Вы попытались прочитать из файлового дескриптора, который никогда не был открыт.
- System V %s не реализован на этой машине
-
(F) Вы попытались выполнить действие с функцией, начинающейся с "sem", "shm" или "msg", но System V IPC не реализован на вашей машине. На некоторых машинах функциональность может существовать, но не быть настроена. Обратитесь к поддержке вашей системы.
- syswrite() на закрытом файловом дескрипторе %s
-
(W closed) Файловый дескриптор, в который вы записываете, был закрыт до этого момента. Проверьте свой поток управления.
-
-Tи-Bне реализованы для файловых дескрипторов -
(F) Perl не может просмотреть буфер stdio файловых дескрипторов, когда не знает о вашем типе stdio. Вам нужно использовать имя файла вместо этого.
- Целевой goto слишком глубоко вложен
-
(F) Вы попытались использовать
gotoдля доступа к метке, которая была слишком глубоко вложена для достижения Perl. Perl делает вам одолжение, отказываясь. - telldir() выполнено с некорректным дескриптором каталога %s
-
(W io) Дескриптор каталога, для которого вы пытаетесь использовать telldir(), либо закрыт, либо не является дескриптором каталога. Проверьте свой поток управления.
- tell() на неоткрытом файловом дескрипторе
-
(W unopened) Вы попытались использовать функцию tell() для файлового дескриптора, который либо никогда не открывался, либо с тех пор был закрыт.
- Это использование $[ не поддерживается
-
(F) Присваивание
$[теперь строго ограничено и интерпретируется как директива компилятора. Вы можете сказать только одно из$[ = 0; $[ = 1; ... local $[ = 0; local $[ = 1; ...Это сделано для предотвращения проблем с тем, как один модуль может изменить базу массива из-под другого модуля непреднамеренно. См. "$[" в perlvar и arybase.
- Функция alpha_assertions находится в стадии разработки
-
(S experimental::alpha_assertions) Эта функция находится в стадии разработки, и ее поведение может измениться в любой будущей версии Perl. См. "Расширенные шаблоны" в perlre.
- Функция crypt() не реализована из-за чрезмерной паранойи.
-
(F) Configure не смог найти функцию crypt() на вашей машине, вероятно, потому, что ваш поставщик не предоставил ее, вероятно, потому, что они думают, что правительство США считает это секретом, или, по крайней мере, что они будут продолжать притворяться, что это так. И если вы цитируете меня по этому поводу, я буду отрицать это.
- Экспериментальная функция declared_refs не включена
-
(F) Чтобы объявить ссылки на переменные, как в
my \%x, вы должны сначала включить эту функцию:no warnings "experimental::declared_refs"; use feature "declared_refs"; - Функция %s не реализована
-
(F) Функция, указанная, не реализована на этой архитектуре, согласно проверкам Configure.
- Функция regex_sets находится в стадии разработки
-
(S experimental::regex_sets) Это предупреждение выводится, если вы используете синтаксис
(?[ ])в регулярном выражении. Детали этой функции могут измениться. Если вы хотите ее использовать, но знаете, что при этом вы принимаете на себя риск использования экспериментальной функции, которая может измениться или быть удалена в будущей версии Perl, вы можете сделать следующее, чтобы отключить предупреждение:no warnings "experimental::regex_sets"; - Функция script_run находится в стадии разработки
-
(S experimental::script_run) Эта функция находится в стадии разработки, и ее поведение может измениться в любой будущей версии Perl. См. "Запуск скриптов" в perlre.
- Функция signatures находится в стадии разработки
-
(S experimental::signatures) Это предупреждение выводится, если вы разворачиваете аргументы подпрограммы с помощью сигнатуры. Просто подавите предупреждение, если вы хотите использовать эту функцию, но знаете, что при этом вы рискуете использовать экспериментальную функцию, которая может измениться или быть удалена в будущей версии Perl:
no warnings "experimental::signatures"; use feature "signatures"; sub foo ($left, $right) { ... } - Функция stat перед %s не была lstat
-
(F) Не имеет смысла проверять текущий буфер stat на наличие символической ссылки, если последняя stat, которая записывала в буфер stat, уже прошла мимо символической ссылки, чтобы добраться до реального файла. Используйте вместо этого фактическое имя файла.
- Атрибут 'unique' может быть применен только к переменным 'our'
-
(F) Этот атрибут никогда не поддерживался в объявлениях
myилиsub. - Этот Perl не может сбросить элементы среды CRTL (%s)
- Этот Perl не может установить элементы среды CRTL (%s=%s)
-
(W internal) Предупреждения, специфичные для VMS. Вы пытались изменить или удалить элемент внутреннего массива environ CRTL, но ваша копия Perl не была скомпилирована с CRTL, содержащим функцию setenv(). Вам нужно будет перекомпилировать Perl с CRTL, который содержит ее, или переопределить PERL_ENV_TABLES (см. perlvms), чтобы массив environ не был целевым объектом изменения %ENV, которое привело к предупреждению.
- Этот Perl не был скомпилирован с поддержкой случайного обхода ключей хеша, но есть что-то под названием Perl_hv_rand_set().
-
(F) Что-то попыталось использовать внутренний вызов API, который зависит от того, что Perl скомпилирован с поддержкой случайного обхода ключей хеша по умолчанию, но этот Perl скомпилирован без нее. Вы должны сообщить об этом предупреждении соответствующей стороне, или перекомпилировать Perl с параметрами по умолчанию.
- times не реализовано
-
(F) Ваша версия библиотеки C, по-видимому, не поддерживает times(). Я предполагаю, что вы не работаете под Unix.
- "-T" находится в строке #!, она также должна быть использована в командной строке
-
(X) Строка #! (или её локальный аналог) в скрипте Perl содержит опцию -T (или -t), но Perl не был вызван с -T в командной строке. Это ошибка, потому что к тому времени, когда Perl обнаруживает -T в скрипте, уже слишком поздно правильно пометить всё из окружения. Поэтому Perl отказывается.
Если скрипт Perl выполняется как команда с помощью механизма #! (или его локального аналога), эту ошибку обычно можно исправить, отредактировав строку #!, чтобы опция -%c стала частью первого аргумента Perl: например, измените
perl -n -%cнаperl -%c -n.Если скрипт Perl выполняется
perl scriptname, то опция -%c должна присутствовать в командной строке:perl -%c scriptname. - To%s: незаконное отображение '%s'
-
(F) Вы пытались определить пользовательское отображение To для lc(), lcfirst, uc() или ucfirst() (или их строковых аналогов), но указали незаконное отображение. См. "Пользовательские свойства символов" в perlunicode.
- Слишком глубоко вложенные ()-группы
-
(F) Ваш шаблон содержит ()-группы с нелепым уровнем вложенности.
- Недостаточно аргументов для syscall
-
(F) Для syscall() должен быть хотя бы один аргумент, чтобы указать системный вызов, который нужно вызвать, глупый.
- Недостаточно аргументов для подпрограммы '%s'
-
(F) Подпрограмма использует меньше аргументов, чем требуется сигнатурой. Вероятно, виноват вызывающий подпрограмму.
Сообщение пытается включить имя вызываемой подпрограммы. Если подпрограмма была переименована, будет показано исходное имя подпрограммы, независимо от того, какое имя использовал вызывающий.
- Слишком поздно для опции "-%s"
-
(X) Строка #! (или её локальный аналог) в скрипте Perl содержит опцию -M, -m или -C.
В случае с -M и -m это ошибка, так как эти опции не предназначены для использования внутри скриптов. Используйте вместо этого директиву
use.Опция -C работает только в том случае, если она также указана в командной строке (с той же последовательностью букв или цифр). Либо укажите эту опцию в командной строке, либо, если ваша система её поддерживает, сделайте ваш скрипт исполняемым и запустите его напрямую вместо передачи его в perl.
- Слишком поздно для блока %s
-
(W void) Блок CHECK или INIT определяется во время выполнения, когда возможность их выполнения уже упущена. Возможно, вы загружаете файл с
requireилиdoкогда следует использоватьuse. Или, возможно, вы должны поместитьrequireилиdoвнутри блока BEGIN. - Слишком много аргументов для syscall
-
(F) Perl поддерживает максимальное количество аргументов syscall() — всего 14.
- Слишком много аргументов для %s
-
(F) Функция требует меньше аргументов, чем вы указали.
- Слишком много аргументов для подпрограммы '%s'
-
(F) Подпрограмма получила больше аргументов, чем разрешено сигнатурой. Вероятно, виноват вызывающий подпрограмму.
Сообщение пытается включить имя вызываемой подпрограммы. Если подпрограмма была переименована, будет показано исходное имя подпрограммы, независимо от того, какое имя использовал вызывающий.
- Слишком много )
-
(A) Вы случайно запустили свой скрипт через csh вместо Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl.
- Слишком много (
-
(A) Вы случайно запустили свой скрипт через csh вместо Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl.
- Завершающий \ в регулярном выражении m/%s/
-
(F) Регулярное выражение заканчивается неэкранированной обратной косой чертой. Экранируйте её. См. perlre.
- Шаблон транслитерации не завершён
-
(F) Лексер не смог найти внутренний разделитель конструкции tr/// или tr[][] или y/// или y[][]. Отсутствие ведущего
$в переменных$trили$yможет вызвать эту ошибку. - Замена транслитерации не завершена
-
(F) Лексер не смог найти конечный разделитель конструкции tr///, tr[][], y/// или y[][].
- '%s' заблокирован маской операций
-
(F) Вы пытались использовать оператор из безопасного отсека, в котором он запрещён. См. Safe.
- truncate не реализован
-
(F) Ваша машина не реализует механизм усечения файла, о котором знает Configure.
- Тип аргумента %d для &CORE::%s должен быть %s
-
(F) Подпрограмма в пакете CORE требует, чтобы её аргумент был жёсткой ссылкой на данные указанного типа. Перегрузка игнорируется, поэтому ссылка на объект, который не является указанным типом, но тем не менее имеет перегрузку для его обработки, всё равно не будет принята.
- Тип аргумента %d для %s должен быть %s (а не %s)
-
(F) Эта функция требует, чтобы аргумент в данной позиции был определённого типа. Массивы должны быть @NAME или
@{EXPR}. Хэши должны быть %NAME или%{EXPR}. Не допускается неявное разыменование — используйте формы {EXPR} для явного разыменования. См. perlref. - umask не реализован
-
(F) Ваша машина не реализует функцию umask, и вы пытались использовать её для ограничения разрешений для себя (EXPR & 0700).
- Несбалансированный контекст: %d больше PUSH, чем POP
-
(S internal) Код выхода обнаружил внутреннее несоответствие в количестве входов и выходов контекстов выполнения.
- Несбалансированные сохранения: %d больше сохранений, чем восстановлений
-
(S internal) Код выхода обнаружил внутреннее несоответствие в количестве сохранённых значений.
- Несбалансированные области: %d больше ENTER, чем LEAVE
-
(S internal) Код выхода обнаружил внутреннее несоответствие в количестве входов и выходов блоков.
- Несбалансированный счётчик ссылок таблицы строк: (%d) для "%s"
-
(S internal) При выходе Perl обнаружил некоторые строки, оставшиеся в общей таблице строк, используемой для копирования при записи и для ключей хэшей. Записи должны были быть освобождены, поэтому это указывает на ошибку где-то.
- Несбалансированные tmp: %d больше выделений, чем освобождений
-
(S internal) Код выхода обнаружил внутреннее несоответствие в количестве выделенных и освобождённых смертных скаляров.
- Вызван неопределённый формат "%s"
-
(F) Указанный формат, похоже, не существует. Возможно, он находится в другом пакете? См. perlform.
- Вызвана неопределённая подпрограмма сортировки "%s"
-
(F) Указанная подпрограмма сравнения для сортировки, похоже, не существует. Возможно, она находится в другом пакете? См. "sort" в perlfunc.
- Вызвана неопределённая подпрограмма &%s
-
(F) Указанная подпрограмма не определена или, если она была определена, она была позже удалена.
- Вызвана неопределённая подпрограмма
-
(F) Анонимная подпрограмма, которую вы пытаетесь вызвать, не определена или, если она была определена, она была позже удалена.
- Неопределённая подпрограмма в сортировке
-
(F) Указанная подпрограмма сравнения для сортировки объявлена, но, похоже, ещё не определена. См. "sort" в perlfunc.
- Вызван неопределённый основной формат "%s"
-
(F) Указанный формат, похоже, не существует. Возможно, он находится в другом пакете? См. perlform.
- Неопределённое значение присвоено typeglob
-
(W misc) Неопределённое значение было присвоено typeglob, как в
*foo = undef. Это ничего не делает. Возможно, вы имели в видуundef *foo. - %s: Неопределённая переменная
-
(A) Вы случайно запустили свой скрипт через csh вместо Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl.
- Неэкранированная левая фигурная скобка в регулярном выражении устарела здесь (и будет фатальной в Perl 5.30), пройдена через регулярное выражение; отмечена <-- HERE в m/%s/
- Неэкранированная левая фигурная скобка в регулярном выражении устарела здесь (и будет фатальной в Perl 5.32), пройдена через регулярное выражение; отмечена <-- HERE в m/%s/
-
(D устаревшее, regexp) Простое правило, если вы хотите сопоставить литеральный символ
{(U+007BLEFT CURLY BRACKET) в шаблоне регулярного выражения, заключается в том, чтобы каким-то образом экранировать каждый литеральный экземпляр. Обычно проще всего предварять его обратной косой чертой, как\{или заключить в квадратные скобки ([{]). Если разделители шаблона также являются фигурными скобками, все соответствующие правые фигурные скобки (}) также должны быть экранированы, чтобы не запутать анализатор, например,qr{abc\{def\}ghi}Принудительное экранирование литеральных символов
{позволит в будущих версиях расширить язык Perl различными способами. Чтобы избежать ненужного нарушения существующего кода, это ограничение не применяется в контекстах, где маловероятно появление расширений, которые могли бы конфликтовать с использованием{в качестве литерала.В этой версии Perl некоторые литеральные использования
{являются критическими, а некоторые всё ещё просто устаревшими. Это связано с упущением: некоторые использования литерального{должны были вызывать предупреждение об устаревании, начиная с версии v5.20, но предупреждение не появлялось до v5.26. Теперь, сделав уже предупреждаемые использования критическими, некоторые запланированные расширения языка можно внедрить раньше. Случаи, которые всё ещё разрешены, будут критическими в Perl 5.30 или 5.32.Контексты, где не генерируются предупреждения или ошибки:
-
в качестве первого символа в шаблоне или после
^для привязки сопоставления к началу строки. -
в качестве первого символа после
|для указания альтернативы. -
в качестве первого символа в скобочном группировании, как, например,
/foo({bar)/ /foo(?:{bar)/ -
в качестве первого символа после квантификатора
/\s*{/
-
- Неэкранированная левая фигурная скобка в регулярном выражении недопустима здесь в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Простое правило, если вы хотите сопоставить литеральный
"{"символ (U+007BLEFT CURLY BRACKET) в шаблоне регулярного выражения, заключается в том, чтобы каким-то образом экранировать каждый литеральный экземпляр. Обычно проще всего предварять его обратной косой чертой, как"\{"или заключить в квадратные скобки ("[{]"). Если разделители шаблона также являются фигурными скобками, все соответствующие правые фигурные скобки ("}") также должны быть экранированы, чтобы не запутать анализатор, например,qr{abc\{def\}ghi}Принудительное экранирование литеральных символов
"{"позволит в будущих версиях расширить язык Perl различными способами. Чтобы избежать ненужного нарушения существующего кода, это ограничение не применяется в контекстах, где маловероятно появление расширений, которые могли бы конфликтовать с использованием"{"в качестве литерала.В этой версии Perl некоторые литеральные использования
"{"являются критическими, а некоторые всё ещё просто устаревшими. Это связано с упущением: некоторые использования литерального"{"должны были вызывать предупреждение об устаревании, начиная с версии v5.20, но предупреждение не появлялось до v5.26. Теперь, сделав уже предупреждаемые использования критическими, некоторые запланированные расширения языка можно внедрить раньше.Контексты, где не генерируются предупреждения или ошибки:
-
в качестве первого символа в шаблоне или после
"^"для привязки сопоставления к началу строки. -
в качестве первого символа после
"|"для указания альтернативы. -
в качестве первого символа в скобочном группировании, как, например,
/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 недостаточно умен, чтобы понять, что вы имели в виду.
- Неожиданный константный lvalue при входе в подпрограмму через тип/таргет %d:%d
-
(P) При компиляции вызова подпрограммы в контексте lvalue 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} ) ])Перед
"("должен стоять оператор, так как нет указаний на то, как объединить цифры с символами в лаоском и тайском письме. - Не рекомендуется использовать несимвол Unicode U+%X для открытого обмена
-
(S несимвол) Некоторые кодовые точки, такие как U+FFFE и U+FFFF, определены стандартом Unicode как несимволы. Это допустимые кодовые точки, но они зарезервированы для внутреннего использования; поэтому приложения не должны пытаться обмениваться ими. Приложение может вообще не ожидать этих символов, и их получение может привести к ошибкам. Если вы знаете, что делаете, вы можете отключить это предупреждение, используя
no warnings 'nonchar';.Это не совсем ошибка «серьезного» уровня, но она должна отображаться по умолчанию, даже если предупреждения отключены, и в настоящее время единственный способ сделать это в Perl — пометить её как серьёзную.
- Недопустимый суррогат Unicode U+%X в UTF-8
-
(S суррогат) У вас был суррогат 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 слой) Была попытка добавить неизвестный слой в систему ввода-вывода Perl. (Слои обрабатывают преобразование данных между внешним и внутренним представлениями.) Обратите внимание, что некоторые слои, такие как
mmap, не поддерживаются во всех средах. Если ваша программа явно не запросила это действие, это может быть результатом значения переменной среды PERLIO. - Неизвестный процесс %x отправил сообщение в prime_env_iter: %s
-
(P) Ошибка, характерная для VMS. Perl считывал значения %ENV до итерации по нему, и кто-то вставил сообщение в поток данных, который Perl ожидал. Кто-то очень запутался или, возможно, пытается подорвать заполнение %ENV Perl для корыстных целей.
- Неизвестный модификатор регулярного выражения "/%s"
-
(F) Символы алфавитно-цифрового типа, непосредственно следующие за закрывающим разделителем шаблона регулярного выражения, интерпретируются Perl как флаги модификаторов для регулярного выражения. Один из указанных вами флагов недействителен. Это может произойти, если вы не поставили пробел между концом регулярного выражения и последующим алфавитно-цифровым оператором:
if ($a =~ /foo/and $bar == 3) { ... }"a"— это допустимый флаг модификатора, но"n"— нет, и это вызывает эту ошибку. Вероятно, вместо этого имелось в виду:if ($a =~ /foo/ and $bar == 3) { ... } - Неизвестный подпрагма "re" '%s' (известные подпрагмы: %s)
-
(W) Вы попытались использовать неизвестный подпрагма подпрагмы "re".
- Неизвестное условие переключения (?(...)) в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Часть условия конструкции (?(условие)если-часть|иначе-часть) неизвестна. Условие должно быть одним из следующих:
(1) (2) ... true if 1st, 2nd, etc., capture matched (<NAME>) ('NAME') true if named capture matched (?=...) (?<=...) true if subpattern matches (*pla:...) (*plb:...) true if subpattern matches; also (*positive_lookahead:...) (*positive_lookbehind:...) (*nla:...) (*nlb:...) true if subpattern fails to match; also (*negative_lookahead:...) (*negative_lookbehind:...) (?{ CODE }) true if code returns a true value (R) true if evaluating inside recursion (R1) (R2) ... true if directly inside capture group 1, 2, etc. (R&NAME) true if directly inside named capture (DEFINE) always false; for defining named subpatterns<-- HERE показывает местоположение в регулярном выражении, где была обнаружена проблема. См. perlre.
- Неизвестная буква опции Unicode '%c'
-
(F) Вы указали неизвестную опцию Unicode. См. документацию perlrun переключателя
-Cдля списка известных опций. - Неизвестное значение опции Unicode %d
-
(F) Вы указали неизвестное значение опции Unicode. См. документацию perlrun переключателя
-Cдля списка известных опций. - Неизвестный шаблон глагола '%s' в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы либо допустили опечатку, либо неправильно поставили квантификатор
*после открытой фигурной скобки в вашем шаблоне. Проверьте шаблон и пересмотрите perlre для получения подробностей о допустимых шаблонах глаголов. - Неизвестная категория предупреждений '%s'
-
(F) Ошибка, выданная подпрагмой
warnings. Вы указали категорию предупреждений, которая в данный момент неизвестна для Perl.Обратите внимание, что если вы хотите включить категорию предупреждений, зарегистрированную модулем (например,
use warnings 'File::Find'), этот модуль необходимо сначала загрузить. - Незакрытая квадратная скобка в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Скобки вокруг класса символов должны быть согласованы. Если вы хотите включить закрывающую скобку в класс символов, используйте обратную косую черту или поставьте ее в начале. <-- HERE показывает местоположение в регулярном выражении, где была обнаружена проблема. См. perlre.
- Незакрытая круглая скобка в регулярном выражении; отмечено <-- HERE в m/%s/
- Незакрытая круглая скобка в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Круглые скобки без обратной косой черты должны быть сбалансированы в регулярных выражениях. Если вы пользователь vi, клавиша % полезна для поиска соответствующей скобки. <-- HERE показывает местоположение в регулярном выражении, где была обнаружена проблема. См. perlre.
- Незакрытая правая скобка %s
-
(F) Лексер обнаружил больше закрывающих фигурных или квадратных скобок, чем открывающих, поэтому, вероятно, вам не хватает соответствующей открывающей скобки. Как правило, вы найдете недостающую скобку (так сказать) вблизи последнего места редактирования.
- Неоцитированная строка "%s" может конфликтовать с будущим зарезервированным словом
-
(W зарезервированное) Вы использовали неоцитированное слово, которое в будущем может быть зарезервированным словом. Лучше поместить такое слово в кавычки, сделать его заглавным или вставить символ подчеркивания. Вы также можете объявить его как подпрограмму.
- Неопознанный символ %s; отмечено <-- HERE после %s около колонки %d
-
(F) Парсер Perl не знает, что делать с указанным символом в вашем скрипте Perl (или eval) около указанной колонки. Возможно, вы пытались запустить сжатый скрипт, бинарную программу или каталог как программу Perl.
- Неопознанный escape \%c в классе символов в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы использовали сочетание обратной косой черты и символа, которое не распознается Perl внутри классов символов. Это фатальная ошибка, когда класс символов используется в
(?[ ]). - Неопознанный escape \%c в классе символов, пропущенный в регулярном выражении; отмечено <-- HERE в m/%s/
-
(W regexp) Вы использовали сочетание обратной косой черты и символа, которое не распознается Perl внутри классов символов. Символ был понят буквально, но это может измениться в будущих версиях Perl. <-- HERE показывает местоположение в регулярном выражении, где был обнаружен escape.
- Неопознанный escape \%c, пропущенный
-
(W misc) Вы использовали сочетание обратной косой черты и символа, которое не распознаётся Perl. Символ был понят буквально, но это может измениться в будущих версиях Perl.
- Неопознанный escape \%s, пропущенный в регулярном выражении; отмечено <-- HERE в m/%s/
-
(W regexp) Вы использовали сочетание обратной косой черты и символа, которое не распознается Perl. Символ(ы) были поняты буквально, но это может измениться в будущих версиях Perl. <-- HERE показывает местоположение в регулярном выражении, где был обнаружен escape.
- Неопознанное имя сигнала "%s"
-
(F) Вы указали имя сигнала для функции kill(), которое не было распознано. Введите
kill -lв вашей оболочке, чтобы увидеть допустимые имена сигналов в вашей системе. - Нераспознанный переключатель: -%s (-h отобразит допустимые опции)
-
(F) Вы указали недопустимую опцию для Perl. Не делайте этого. (Если вы считаете, что не делали этого, проверьте строку #! для определения, не передает ли она неверный переключатель от вашего имени.)
- Неудачная операция %s с именем файла, содержащим перевод строки
-
(W перевод строки) Была попытка выполнить операцию с файлом по имени файла, и эта операция не удалась, ВЕРОЯТНО, потому что имя файла содержало перевод строки, ВЕРОЯТНО, потому что вы забыли использовать chomp(). См. "chomp" в perlfunc.
- Вызванная функция для работы с каталогом "%s" не поддерживается
-
(F) Ваша машина не поддерживает opendir() и readdir().
- Неподдерживаемая функция %s
-
(F) Эта машина, по-видимому, не реализует указанную функцию. По крайней мере, Configure так считает.
- Неподдерживаемая функция fork
-
(F) Ваша версия исполняемого файла не поддерживает fork.
Обратите внимание, что на некоторых системах, таких как 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) Вы использовали шаблон вида
(*...), но не завершили его). Исправьте шаблон и повторите попытку. - Незавершенный разделитель для here-документа
-
(F) Это сообщение появляется, когда метка here-документа имеет начальную кавычку, но конечная кавычка отсутствует. Возможно, вы написали:
<<"fooвместо:
<<"foo" - Незавершенный шаблон \g... в регулярном выражении; отмечено <-- HERE в m/%s/
- Незавершенный шаблон \g{...} в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) В регулярном выражении у вас был
\g, за которым не последовала правильная ссылка на группу. В случае\g{отсутствует закрывающая скобка; в противном случае за\gдолжна следовать целое число. Исправьте шаблон и повторите попытку. - Незавершенный оператор <>
-
(F) Лексер обнаружил левую угловую скобку в месте, где ожидал термин, поэтому ищет соответствующую правую угловую скобку, но не находит ее. Вероятно, вы пропустили необходимые скобки в начале строки и имели в виду "меньше, чем".
- Незавершенный аргумент шаблона глагола в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы использовали шаблон вида
(*VERB:ARG), но не завершили его). Исправьте шаблон и повторите попытку. - Незавершенный шаблон глагола в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы использовали шаблон вида
(*VERB), но не завершили его). Исправьте шаблон и повторите попытку. - Попытка untie, в то время как %d внутренних ссылок всё ещё существуют
-
(W untie) Копия объекта, возвращённого из
tie(илиtied) была всё ещё действительна, когда было вызваноuntie. - Использование: POSIX::%s(%s)
-
(F) Вы вызвали функцию POSIX с некорректными аргументами. См. "FUNCTIONS" в POSIX для получения дополнительной информации.
- Использование: Win32::%s(%s)
-
(F) Вы вызвали функцию Win32 с некорректными аргументами. См. Win32 для получения дополнительной информации.
- $[ используется в %s (вы имели в виду $]?)
-
(W syntax) Вы использовали
$[в сравнении, например:if ($[ > 5.006) { ... }Вероятно, вы имели в виду
$]вместо этого.$[является основой для индексации массивов.$]— это номер версии Perl в десятичной форме. - Используйте "%s" вместо "%s"
-
(F) Второй перечисленный конструкт больше не является законным. Используйте первый вместо него.
- Бесполезная присваивание временной переменной
-
(W misc) Вы присвоили значение подпрограмме lvalue, но то, что вернула подпрограмма, было временным скалярным значением, которое должно быть удалено, поэтому присваивание не имело эффекта.
- Бесполезный (?-%s) - не используйте модификатор /%s в регулярном выражении; отмечено <-- HERE в m/%s/
-
(W regexp) Вы использовали внутренний модификатор, такой как (?-o), который не имеет смысла, если его не удалить из всего регулярного выражения:
if ($string =~ /(?-o)$pattern/o) { ... }должно быть записано как
if ($string =~ /$pattern/) { ... }<-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.
- Бесполезная локализация %s
-
(W syntax) Локализация lvalue, таких как
local($x=10), допустима, но на самом деле в данный момент local() не влияет на результат. Это может измениться в будущем, но пока такой код не рекомендуется. - Бесполезный (?%s) - используйте модификатор /%s в регулярном выражении; отмечено <-- HERE в m/%s/
-
(W regexp) Вы использовали внутренний модификатор, такой как (?o), который не имеет смысла, если он не применяется ко всему регулярному выражению:
if ($string =~ /(?o)$pattern/) { ... }должно быть записано как
if ($string =~ /$pattern/o) { ... }<-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.
- Бесполезное использование атрибута "const"
-
(W misc) Атрибут
constне влияет ни на что, кроме прототипов анонимных замыканий. Вы применили его к подпрограмме через attributes.pm. Это полезно только внутри обработчика атрибутов для анонимной подпрограммы. - Бесполезное использование модификатора /d в операторе транслитерации
-
(W misc) Вы использовали модификатор /d, где список поиска имеет такой же размер, как и список замены. См. perlop для получения дополнительной информации о модификаторе /d.
- Бесполезное использование \E
-
(W misc) У вас есть \E в строке с двойными кавычками без
\U,\Lили\Qперед ней. - Бесполезное использование модификатора жадности '%c' в регулярном выражении; отмечено <-- HERE в m/%s/
-
(W regexp) Вы указали что-то вроде этого:
qr/a{3}?/ qr/b{1,1}+/Модификаторы
"?"и"+"не имеют никакого эффекта, так как они изменяют то, чтобы соответствовать большему или меньшему числу, когда есть выбор, и, указав соответствие точно заданному числу, не остается места для выбора. - Бесполезное использование %s в контексте без значения
-
(W void) Вы сделали что-то без побочного эффекта в контексте, который ничего не делает со значением возврата, например, оператор, который не возвращает значение из блока или левая часть скалярного оператора запятой. Очень часто это указывает не на глупость с вашей стороны, а на невозможность Perl разобрать вашу программу так, как вы предполагали. Например, вы получите это, если смешаете приоритеты C с приоритетами Python и скажете:
$one, $two = 1, 2;когда вы имели в виду:
($one, $two) = (1, 2);Ещё одна распространённая ошибка заключается в использовании обычных скобок для создания ссылки на список, когда следует использовать квадратные или фигурные скобки, например, если вы говорите:
$array = (1,2);когда вы должны были сказать:
$array = [1,2];Квадратные скобки явно преобразуют значение списка в скалярное значение, в то время как круглые скобки этого не делают. Таким образом, когда скобочный список оценивается в скалярном контексте, запятая обрабатывается как оператор запятой C, который отбрасывает левый операнд, а это не то, что вы хотите. См. perlref для получения дополнительной информации об этом.
Это предупреждение не будет выдано для числовых констант, равных 0 или 1, поскольку они часто используются в операторах, таких как
1 while sub_with_side_effects();О строковых константах, которые обычно оцениваются как 0 или 1, выдаётся предупреждение.
- Бесполезное использование (?-p) в регулярном выражении; отмечено <-- HERE в m/%s/
-
(W regexp) Модификатор
pне может быть выключен после установки. - Бесполезное использование прагмы "re"
-
(W) Вы сделали
use re;без аргументов. Это не очень полезно. - Бесполезное использование sort в скалярном контексте
-
(W void) Вы использовали sort в скалярном контексте, как в:
my $x = sort @y;Это не очень полезно, и Perl в настоящее время оптимизирует это.
- Бесполезное использование %s без значений
-
(W syntax) Вы использовали функцию push() или unshift() без аргументов, кроме массива, например
push(@x)илиunshift(@foo). Обычно это не оказывает никакого эффекта на массив, поэтому совершенно бесполезно. В принципе, push(@tied_array) может иметь некоторый эффект, если массив привязан к классу, который реализует метод PUSH. В таком случае можно записатьpush(@tied_array,()), чтобы избежать этого предупреждения. - "use" запрещено в выражении
-
(F) Ключевое слово "use" распознается и выполняется во время компиляции и не возвращает полезного значения. См. perlmod.
- Использование присваивания переменной $[ устарело и станет фатальным в 5.30
-
(D deprecated) Переменная
$[(индекс первого элемента в массиве) устарела с Perl 5.12, и ее установка на ненулевое значение станет фатальной, начиная с Perl 5.30. См. "$[" в perlvar. - Использование простого << для обозначения <<"" запрещено
-
(F) Теперь требуется использовать явно указанную форму, если вы хотите использовать пустую строку в качестве терминатора here-документа.
Использование простого терминатора было устаревшим в Perl 5.000 и является фатальной ошибкой начиная с Perl 5.28.
- Использование модификатора /c бессмысленно в s///
-
(W regexp) Вы использовали модификатор /c в подстановке. Модификатор /c в настоящее время не имеет смысла в подстановках.
- Использование модификатора /c бессмысленно без /g
-
(W regexp) Вы использовали модификатор /c с операндом регулярного выражения, но не использовали модификатор /g. В настоящее время /c имеет смысл только при использовании /g. (Это может измениться в будущем.)
- Использование кодового значения 0x%s не разрешено; допустимый максимум 0x%x
- Использование кодового значения 0x%s не разрешено; допустимый максимум 0x%x в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы использовали код символа, который не разрешен, так как он слишком большой. Unicode разрешает только кодовые точки до 0x10FFFF, но Perl разрешает гораздо большие. Более ранние версии Perl разрешали кодовые точки выше IV_MAX (0x7FFFFFF на 32-битных платформах, 0x7FFFFFFFFFFFFFFF на 64-битных платформах), однако это могло привести к сбою интерпретатора Perl в некоторых конструкциях, в том числе к зависанию в некоторых случаях.
Если ваш код должен работать на различных платформах, имейте в виду, что верхний предел зависит от платформы. Он намного больше на 64-битных системах, чем на 32-битных.
Использование кодовых точек вне диапазона было устаревшим в Perl 5.24 и стало фатальной ошибкой в Perl 5.28.
- Использование each() для хэша после вставки без сброса итератора хэша приводит к неопределенному поведению
-
(S internal) Поведение
each()после вставки является неопределенным; оно может пропускать элементы или посещать элементы более одного раза. Рассмотрите использованиеkeys()вместоeach(). - Использование := для пустого списка атрибутов запрещено
-
(F) Конструкция
my $x := 42использовалась для парсинга как эквивалентнаяmy $x : = 42(применение пустого списка атрибутов к$x). Эта конструкция была устаревшей в версии 5.12.0 и теперь является синтаксической ошибкой, поэтому:=может быть повторно использована в качестве нового оператора в будущем.Если вам нужен пустой список атрибутов, например, в генераторе кода, добавьте пробел перед
=. - Использование %s для локали, отличной от UTF-8, неверно. Предполагается локали UTF-8
-
(W locale) Вы сопоставляете регулярное выражение с помощью правил локали, и была встречена указанная конструкция. Эта конструкция допустима только для локалей UTF-8, а текущая локали таковой не является. Это не имеет смысла. Perl продолжит, предполагая локаль Юникод (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.
- Использование -l для дескриптора файла%s
-
(W io) Дескриптор файла представляет собой открытый файл, и при открытии файла он уже прошел мимо любого символьного ссылки, которую, предположительно, вы пытаетесь найти. Операция вернула
undef. Используйте имя файла вместо этого. - Использование ссылки "%s" в качестве индекса массива
-
(W misc) Вы попытались использовать ссылку в качестве индекса массива; это, вероятно, не то, что вы имели в виду, поскольку ссылки в числовом контексте обычно представляют собой огромные числа, и это обычно указывает на ошибку программиста.
Если вы действительно имеете в виду это, явно преобразуйте вашу ссылку в число, как показано ниже:
$array[0+$ref]. Однако для перегруженных объектов это предупреждение не выдается, потому что вы можете перегрузить операторы преобразования в число и в строку, и тогда вы, предположительно, знаете, что делаете. - Использование строк с кодовыми точками больше 0xFF в качестве аргументов к оператору %s запрещено
-
(F) Вы попытались использовать один из битовых операторов для строк (
&или|или^или~) для строки, содержащей кодовую точку больше 0xFF. Битовые операторы для строк обрабатывают свои операнды как строки байтов, а значения сверх 0xFF бессмысленны в этом контексте.Это стало фатальной ошибкой в Perl 5.28.
-
Использование строк с кодовыми точками больше 0xFF в качестве аргументов к
vecустарело. Это станет фатальной ошибкой в Perl 5.32 -
(D устарело) Вы попытались использовать
vecдля строки, содержащей кодовую точку больше 0xFF, что бессмысленно в данном случае.Такое использование станет фатальной ошибкой в Perl 5.32.
- Использование зараженных аргументов в %s устарело
-
(W taint, устарело) Вы предоставили
system()илиexec()с несколькими аргументами, и по меньшей мере один из них заражен. Это раньше разрешалось, но в будущей версии perl станет фатальной ошибкой. Уберите заражение из аргументов. См. perlsec. - Использование неназначенной кодовой точки или несамостоятельного графема в качестве разделителя станет фатальной ошибкой начиная с Perl 5.30
-
(D устарело) Графем — это то, что носитель языка воспринимает как символ. В Юникоде (и, следовательно, в Perl) графем может на самом деле состоять из нескольких смежных символов, которые вместе образуют полный графем. Например, может быть основной символ, такой как "R", и диакритический знак, такой как умлаут "^", которые отображаются как один символ с умлаутом над "R". Perl в настоящее время разрешает такие вещи, как этот умлаут, в качестве разделителей строк, шаблонов и т. д. При отображении умлаут будет выглядеть так, как будто он относится к символу, который находится непосредственно слева от него. Для того, чтобы перейти к возможности использования графемов в качестве разделителей, мы должны упразднить использование разделителей, которые сами по себе не являются графемами. Кроме того, разделитель должен быть уже назначен (или известно, что он никогда не будет назначен), чтобы обеспечить будущую совместимость кода, иначе код, который работает сегодня, не будет компилироваться, если текущий неназначенный разделитель станет чем-то, что не является самостоятельным графемом. Поскольку Unicode никогда не будет назначать неназначаемые кодовые точки, ни кодовые точки, превышающие допустимый максимум Unicode, они могут быть разделителями, и их использование не вызовет это предупреждение.
- Использование неинициализированного значения%s
-
(W uninitialized) Было использовано неопределенное значение так, как будто оно уже было определено. Оно было интерпретировано как "" или 0, но, возможно, это ошибка. Чтобы подавить это предупреждение, присвойте переменным определенное значение.
Чтобы помочь вам выяснить, что было неопределенным, perl попытается сообщить вам имя переменной (если таковое имеется), которая была неопределенной. В некоторых случаях он не может сделать это, поэтому он также сообщает вам, в какой операции вы использовали неопределенное значение. Обратите внимание, однако, что perl оптимизирует вашу программу, и операция, отображаемая в предупреждении, может не отображаться буквально в вашей программе. Например,
"that $foo"обычно оптимизируется в"that " . $foo, и предупреждение будет относиться к операторуconcatenation (.), даже если в вашей программе нет.. - "use re 'strict'" экспериментально
-
(S experimental::re_strict) Вещи, которые отличаются при компиляции шаблона регулярного выражения под
'strict', могут меняться в будущих версиях Perl несовместимыми способами. Это означает, что шаблон, который компилируется сегодня, может не скомпилироваться в будущей версии Perl.Это предупреждение призвано предупредить вас об этом риске.
- Используйте \x{...} для более чем двух шестнадцатеричных символов в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) В регулярном выражении вы сказали что-то вроде
(?[ [ \xBEEF ] ])Perl не уверен, имели ли вы в виду следующее
(?[ [ \x{BEEF} ] ])или это
(?[ [ \x{BE} E F ] ])Вам нужно добавить либо фигурные скобки, либо пробелы, чтобы устранить неоднозначность.
- Использование только первого символа, возвращенного \N{} в классе символов в регулярном выражении; помечено <-- HERE в m/%s/
-
(W regexp) Имена Юникода, обозначающие символы
(\N{...}), могут возвращать многосимвольные последовательности. Даже если класс символов должен соответствовать только одному символу входных данных, perl будет правильно сопоставлять все последовательности, за исключением случаев, когда класс инвертирован ([^...]), или когда этот элемент является начальной или конечной точкой диапазона. В этих случаях поведение не ясно. В этих случаях Perl отбрасывает все, кроме первого символа возвращенной последовательности, что, вероятно, не соответствует вашим намерениям. - Использование /u для '%s' вместо /%s в регулярном выражении; помечено <-- HERE в m/%s/
-
(W regexp) Вы использовали границу Юникода (
\b{...}или\B{...}) в части регулярного выражения, где действуют модификаторы набора символов/aили/aa. Эти два модификатора указывают на интерпретацию ASCII, и это не имеет смысла для определения Юникода. Сгенерированное регулярное выражение будет скомпилировано так, что граница будет использовать весь Юникод. Другая часть регулярного выражения не затронута. - Использование !~ с %s не имеет смысла
-
(F) Использование оператора
!~сs///r,tr///rилиy///rв настоящее время зарезервировано для будущего использования, так как точное поведение не определено. (Просто возврат булевого отрицания изменённой строки обычно не особенно полезен.) - Супплементарный символ UTF-16 U+%X
-
(S surrogate) У вас был супплементарный символ UTF-16 в контексте, где они не считаются приемлемыми. Эти кодовые точки, между U+D800 и U+DFFF (включительно), используются Юникодом только для UTF-16. Однако Perl внутренне допускает все кодовые точки целых без знака (до предела, доступного в вашей платформе), включая супплементарные символы. Но это может вызвать проблемы при вводе или выводе, что, вероятно, и стало причиной этого сообщения. Если вы действительно точно знаете, что делаете, вы можете отключить это предупреждение, используя
no warnings 'surrogate';. - Значение %s может быть "0"; проверьте с помощью defined()
-
(W misc) В условном выражении вы использовали <HANDLE>, <*> (glob),
each(), илиreaddir()в качестве булевого значения. Каждый из этих конструкций может возвращать значение "0"; это сделает условное выражение ложным, что, вероятно, не соответствует вашим намерениям. При использовании этих конструкций в условных выражениях проверьте их значения с помощью оператораdefined. - Значение символа CLI "%s" слишком длинное
-
(W misc) Предупреждение, специфичное для VMS. Perl пытался прочитать значение элемента %ENV из таблицы символов CLI и обнаружил результирующую строку длиннее 1024 символов. Возвращаемое значение было усечено до 1024 символов.
- Переменная "%s" недоступна
-
(W closure) Во время компиляции внутренняя именованная подпрограмма или eval пытается захватить внешний лексический элемент, который в данный момент недоступен. Это может произойти по двум причинам. Во-первых, внешний лексический элемент может быть объявлен во внешней анонимной подпрограмме, которая ещё не была создана. (Помните, что именованные подпрограммы создаются во время компиляции, а анонимные подпрограммы — во время выполнения.) Например,
sub { my $a; sub f { $a } }В момент создания f она не может захватить текущее значение $a, так как анонимная подпрограмма ещё не создана. И наоборот, следующее не выдаст предупреждение, так как анонимная подпрограмма к этому моменту была создана и активна:
sub { my $a; eval 'sub f { $a }' }->();Вторая ситуация вызвана eval, пытающейся получить доступ к переменной, вышедшей из области видимости, например,
sub f { my $a; sub { eval '$a' } } f()->();Здесь, когда $a в eval компилируется, f() не выполняется, поэтому её $a недоступен для захвата.
- Переменная "%s" не импортирована%s
-
(S misc) При включенном "use strict", вы обратились к глобальной переменной, которую, по-видимому, вы думали импортировать из другого модуля, потому что что-то другое с таким же именем (обычно подпрограмма) экспортируется этим модулем. Обычно это означает, что вы неправильно поставили специальный символ перед вашей переменной.
- Не реализован обратный просмотр переменной длины в регулярном выражении m/%s/
-
(F) Обратный просмотр разрешен только для подвыражений, длина которых фиксирована и известна во время компиляции. Для положительного обратного просмотра вы можете использовать конструкцию регулярного выражения
\Kв качестве способа получения эквивалентной функциональности. См. (?<=pattern) и \K в perlre.Начиная с Perl 5.18, существуют неочевидные правила Юникода в
/iдля сопоставления с переменной длиной, о которых вы, возможно, не подумали. Например, подстрока"ss"может соответствовать одиночному символу LATIN SMALL LETTER SHARP S. Вот полный список текущих правил, влияющих на символы ASCII:ASCII sequence Matches single letter under /i FF U+FB00 LATIN SMALL LIGATURE FF FFI U+FB03 LATIN SMALL LIGATURE FFI FFL U+FB04 LATIN SMALL LIGATURE FFL FI U+FB01 LATIN SMALL LIGATURE FI FL U+FB02 LATIN SMALL LIGATURE FL SS U+00DF LATIN SMALL LETTER SHARP S U+1E9E LATIN CAPITAL LETTER SHARP S ST U+FB06 LATIN SMALL LIGATURE ST U+FB05 LATIN SMALL LIGATURE LONG S TЭтот список может быть изменён, но это вряд ли произойдёт. Каждая последовательность ASCII может быть любой комбинацией заглавных и строчных букв.
Вы можете избежать этого, используя в утверждении обратного просмотра скобочный набор символов, например
(?<![sS]t) (?<![fF]f[iI])Это обманет Perl, чтобы он не подбирал лигатуры.
Ещё один вариант для Perl, начиная с 5.16, если вас интересуют только совпадения ASCII, — добавить модификатор
/aaк регулярному выражению. Это исключит все эти неочевидные совпадения, таким образом, избавит от этого сообщения. Вы также можете сказатьuse if $] ge 5.016, re => '/aa';чтобы применить
/aaко всем регулярным выражениям, скомпилированным в его области видимости. См. re. - Переменная "%s" %s маскирует более раннее объявление в той же %s
-
(W shadow) Переменная "my", "our" или "state" была повторно объявлена в текущей области видимости или операторе, фактически исключив весь доступ к предыдущему экземпляру. Это практически всегда ошибка в написании. Обратите внимание, что предыдущая переменная всё ещё будет существовать до конца области видимости или пока не будут уничтожены все ссылки на неё в замыканиях.
- Синтаксис переменной
-
(A) Вы случайно запустили свою программу через csh вместо Perl. Проверьте строку #!, или вручную передайте свою программу в Perl.
-
(W closure) Внутренняя (вложенная) именованная подпрограмма ссылается на лексическую переменную, определённую во внешней именованной подпрограмме.
Когда внутренняя подпрограмма вызывается, она увидит значение переменной внешней подпрограммы, как оно было до и во время *первого* вызова внешней подпрограммы; в этом случае, после завершения первого вызова внешней подпрограммы, внутренняя и внешняя подпрограммы больше не будут совместно использовать общее значение переменной. Другими словами, переменная больше не будет общей.
Эту проблему обычно можно решить, сделав внутреннюю подпрограмму анонимной, используя синтаксис
sub {}. Когда создаются внутренние анонимные подпрограммы, ссылающиеся на переменные во внешних подпрограммах, они автоматически перепривязываются к текущим значениям таких переменных. - Векторный аргумент не поддерживается в альфа-версиях
-
(S printf) Формат %vd (s)printf не поддерживает версии с альфа-частями.
- В регулярном выражении %s требует обязательного аргумента; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) Вы использовали шаблон глагола, который требует аргумента. Укажите аргумент или проверьте, используете ли вы правильный глагол.
- Шаблон глагола '%s' не может иметь аргумент в регулярном выражении; отмечено <-- ЗДЕСЬ в 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 ambiguous) Вы написали унарный оператор, за которым следует что-то, что выглядит как бинарный оператор, который также мог быть интерпретирован как термин или унарный оператор. Например, если известно, что функция rand имеет аргумент по умолчанию 1.0, и вы напишите
rand + 5;вы можете ДУМАТЬ, что написали то же самое, что и
rand() + 5;но на самом деле получили
rand(+5);Поэтому используйте скобки, чтобы сказать, что вы действительно имели в виду.
- when — экспериментальная функция
-
(S experimental::smartmatch)
whenзависит от smartmatch, которая является экспериментальной. Кроме того, у неё есть несколько особых случаев, которые могут быть не очевидны, и их поведение может измениться или даже быть удалено в будущих версиях Perl. См. объяснение в разделе "Экспериментальные детали given и when" в perlsyn. - Символ с широкой кодировкой в %s
-
(S utf8) Perl обнаружил символ с широким кодом (порядковый номер >255), когда этого не ожидал. Это предупреждение по умолчанию включено для операций ввода-вывода (например, для print).
Если это предупреждение исходит от операций ввода-вывода, самый простой способ его отключить — добавить слой
:utf8, например,binmode STDOUT, ':utf8'. Другой способ отключить предупреждение — добавитьno warnings 'utf8';, но это часто похоже на обман. В общем случае вы должны явно указать кодировку для файла, см. open и "binmode" в perlfunc.Если предупреждение исходит от чего-то другого, кроме ввода-вывода, это диагностическое сообщение, вероятно, указывает на получение неверных результатов. Необходимо изучить код, чтобы определить, как символ с широким кодом попал в операцию, которая не обрабатывает их.
- Широкий символ (U+%X) в %s
-
(W locale) При работе в однобайтовой кодировке (т.е., не UTF-8), был встречен многобайтовый символ. Perl рассматривает этот символ как указанный код Юникода. Сочетание не-UTF-8 кодировок и Юникода опасно. Почти наверняка некоторые символы будут иметь два разных представления. Например, в кодировке ISO 8859-7 (греческий) код 0xC3 представляет собой заглавную Гамму. Но также и 0x393. Это сделает сравнение строк ненадежным.
Вероятно, вам нужно понять, как этот многобайтовый символ оказался смешанным с вашей однобайтовой кодировкой (или, возможно, вы думали, что у вас UTF-8 кодировка, но Perl не согласен).
- Внутри [], длина '%c' запрещена
-
(F) Счетчик в шаблоне (un)pack может быть заменён на
[TEMPLATE]только еслиTEMPLATEвсегда соответствует тому же количеству упакованных байтов, что может быть определено из самого шаблона. Это невозможно, если он содержит какие-либо коды @, /, U, u, w или *-длину. Измените шаблон. - %s() с отрицательным аргументом
-
(S misc) Некоторые операции не имеют смысла с отрицательными аргументами. Выдается предупреждение, и операция не выполняется.
- write() на закрытом файловом дескрипторе %s
-
(W closed) Файловый дескриптор, в который вы записываете, был закрыт до этого момента. Проверьте свой поток управления.
- %s «\x%X» не отображается в Юникод
-
(S utf8) При чтении в разных кодировках Perl пытается преобразовать всё в символы Юникода. Прочитанные вами байты не являются допустимыми в этой кодировке. Например
utf8 "\xE4" does not map to Unicodeесли вы пытаетесь прочитать латинские a-диарезисы в Latin-1 как UTF-8.
- 'X' вне строки
-
(F) У вас был шаблон (un)pack, который указывал на относительную позицию перед началом строки, которая подвергается (un)упаковке. См. "pack" в perlfunc.
- 'x' вне строки в unpack
-
(F) У вас был шаблон pack, который указывал на относительную позицию после конца строки, которая подвергается распаковке. См. "pack" в perlfunc.
- У ВАС ЕЩЁ НЕ ОТКЛЮЧЕНЫ СКРИПТЫ С ПРАВОМ ИЗМЕНЕНИЯ ИДЕНТИФИКАТОРА В ЯДРЕ!
-
(F) И, скорее всего, вы никогда этого не сделаете, потому что, вероятно, у вас нет исходных кодов вашего ядра, и ваш поставщик, вероятно, не заботится о ваших пожеланиях. Существует уязвимость в любом месте, где у вас есть скрипт с правом изменения идентификатора, и для её устранения необходимо удалить бит set-id из скрипта, который вы пытаетесь запустить. Чтобы действительно запустить скрипт с правом изменения идентификатора, ваш лучший вариант — поместить обёртку C с правом изменения идентификатора вокруг вашего скрипта.
- Необходимо привести "%s" в кавычки
-
(W syntax) Вы присвоили необработанное слово в качестве имени обработчика сигнала. К сожалению, у вас уже есть подпрограмма с таким именем, что означает, что Perl 5 попытается вызвать подпрограмму при выполнении присвоения, что, вероятно, не то, что вы хотите. (Если это именно то, что вы хотите, поставьте перед ним &.)
- Ваши случайные числа не так уж случайны
-
(F) При попытке инициализировать случайное зерно для хэшей Perl не смог получить никакой случайности из вашей системы. Это обычно указывает на серьёзную проблему.
- Нулевая длина \N{} в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Имена символов Юникода (
\N{...}) могут возвращать последовательность нулевой длины. Такой символ использовался в расширенном классе символов, т.е.(?[...]), или вuse re 'strict', что запрещено. Проверьте, что использовано правильное escape-последовательность и правильный обработчик charnames находится в области видимости. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема.
См. также
© 1993–2020 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.28.3/perldiag