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 пragma.
Если сообщение может быть управляемо с помощью warnings пragma, его категория предупреждения включается в описание ниже вместе с буквенной классификацией. Например, (W closed) означает предупреждение в категории closed.
Необязательные предупреждения включаются с помощью warnings pragma или ключей -w и -W. Предупреждения могут быть перехвачены, задав $SIG{__WARN__} ссылкой на процедуру, которая будет вызываться при каждом предупреждении вместо его вывода. См. perlvar.
Серьезные предупреждения всегда включены, если их не отключить явно с помощью warnings pragma или ключа -X.
Перехватываемые ошибки могут быть перехвачены с помощью оператора eval. См. "eval" в perlfunc. Почти во всех случаях предупреждения могут быть выборочно отключены или повышены до фатальных ошибок с помощью warnings pragma. См. warnings.
Сообщения упорядочены по алфавиту, без учёта верхнего и нижнего регистра. Некоторые из этих сообщений являются общими. Различия обозначены %s или другими escape-последовательностями в стиле printf. Эти escape-последовательности игнорируются при алфавитном упорядочении, как и все символы, кроме букв. Чтобы найти ваше сообщение, просто проигнорируйте все, что не является буквой.
- accept() на закрытом сокете %s
-
(W закрыт) Вы пытались выполнить accept на закрытом сокете. Не забыли ли проверить возвращаемое значение вызова socket()? См. "accept" в perlfunc.
- Использование алиасов через ссылки экспериментально
-
(S экспериментальный::refaliasing) Это предупреждение выводится, если вы используете конструктор ссылки в левой части присваивания для создания алиаса одной переменной другой. Просто отключите предупреждение, если хотите использовать эту функцию, но помните, что вы рискуете использовать экспериментальную функцию, которая может измениться или быть удалена в будущей версии Perl:
no warnings "experimental::refaliasing"; use feature "refaliasing"; \$x = \$y; - Выделение памяти слишком велико: %x
-
(X) На машине MS-DOS вы не можете выделить более 64К.
- '%c' разрешено только после типов %s в %s
-
(F) Модификаторы '!', '<' и '>' разрешены в pack() или unpack() только после определенных типов. См. "pack" в perlfunc.
- alpha->numify() приводит к потере информации
-
(W числовой) Значение типа alpha не может быть преобразовано в числовой тип без потери информации.
- Неоднозначный вызов разрешен как CORE::%s(), укажите явно или используйте &
-
(W неоднозначный) Вы объявили подпрограмму с таким же именем, как Perl-ключевое слово, и использовали имя без квалификации для вызова одной или другой. Perl решил вызвать встроенную подпрограмму, потому что подпрограмма не импортирована.
Чтобы принудительно интерпретировать как вызов подпрограммы, поместите амперсанд перед именем подпрограммы или укажите имя с пакетом. В качестве альтернативы, вы можете импортировать подпрограмму (или предположить, что она импортирована с помощью
use subsпragma).Чтобы неявно интерпретировать как Perl-оператор, используйте префикс
CORE::для оператора (например,CORE::log($x)) или объявите подпрограмму как метод объекта (см. "Атрибуты подпрограммы" в perlsub или attributes). - Неоднозначный диапазон в операторе транслитерации
-
(F) Вы написали что-то вроде
tr/a-z-0//, что вообще ничего не означает. Чтобы включить символ-в транслитерацию, поместите его либо в начало, либо в конец. (В прошлом,tr/a-z-0//было синонимомtr/a-y//, что, вероятно, не было тем, чего вы ожидали.) - Неоднозначное использование %s разрешено как %s
-
(S неоднозначный) Вы сказали что-то, что может быть интерпретировано не так, как вы думали. Обычно это легко устранить, добавив пропущенную кавычку, оператор, пару скобок или объявление.
- Неоднозначное использование -%s разрешено как -&%s()
-
(S неоднозначный) Вы написали что-то вроде
-foo, что может быть строкой"-foo", или вызовом функцииfoo, с отрицанием. Если вы имели в виду строку, просто напишите"-foo". Если вы имели в виду вызов функции, напишите-foo(). - Неоднозначное использование %c разрешено как оператор %c
-
(S неоднозначный)
%,&, и*являются одновременно инфиксными операторами (остаток, побитовое И и умножение) и начальными специальными символами (обозначающими хэши, подпрограммы и типглобы), и вы сказали что-то вроде*foo * foo, что может быть интерпретировано как одно из них. Мы предположили, что вы имели в виду инфиксный оператор, но, пожалуйста, сделайте это более ясным — в приведенном примере вы можете написать*foo * foo(), если вы действительно хотели умножить типглоб на результат вызова функции. - Неоднозначное использование %c{%s} разрешено как %c%s
-
(W неоднозначный) Вы написали что-то вроде
@{foo}, что может быть запросом к переменной@foo, или это может быть вызов функции с именем foo и разыменование ее как ссылки на массив. Если вы хотели переменную, вы можете просто написать@foo. Если вы хотели вызвать функцию, напишите@{foo()}... или вы можете просто не иметь переменной и функции с одинаковым именем, и избавить себя от многих проблем. - Неоднозначное использование %c{%s[...]} разрешено как %c%s[...]
- Неоднозначное использование %c{%s{...}} разрешено как %c%s{...}
-
(W неоднозначный) Вы написали что-то вроде
${foo[2]}(где foo представляет имя Perl-ключевого слова), что может искать элемент с номером 2 в массиве с именем@foo, в этом случае, пожалуйста, напишите$foo[2], или вы могли иметь в виду передать анонимный массив в функцию с именем foo, а затем выполнить скалярное разыменование возвращаемого значения. Если вы имели в виду это, напишите${foo([2])}.В регулярных выражениях синтаксис
${foo[2]}иногда необходим для разбора между индексами массива и классами символов./$length[2345]/, например, будет интерпретироваться как$lengthи класс символов[2345]. Если вам нужен индекс массива, вы можете избежать предупреждения, изменив/${length[2345]}/на некрасивое/${\$length[2345]}/, переименовав свой массив в то, что не совпадает с встроенным ключевым словом, или просто отключив предупреждения сno warnings 'ambiguous';. - '|' и '<' не могут быть одновременно указаны в командной строке
-
(F) Ошибка, характерная для VMS. Perl выполняет собственную перенаправлением командной строки и обнаружил, что STDIN является каналом и что вы также пытались перенаправить STDIN с помощью '<'. Только один поток STDIN для клиента, пожалуйста.
- '|' и '>' не могут быть одновременно указаны в командной строке
-
(F) Ошибка, характерная для VMS. Perl выполняет собственную перенаправлением командной строки и думает, что вы пытались перенаправить stdout как в файл, так и в канал другой команде. Вам нужно выбрать одно из них, хотя ничего не мешает вам перенаправить в программу или Perl-скрипт, который «разделяет» вывод на два потока, например
open(OUT,">$ARGV[0]") or die "Can't write to $ARGV[0]: $!"; while (<STDIN>) { print; print OUT; } close OUT; - Применение %s к %s повлияет на скаляр(%s)
-
(W 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) {} - Параметр-«сборщик» не может иметь значение по умолчанию
-
(F) Только скалярные параметры подписи подпрограммы могут иметь значение по умолчанию; например:
sub foo ($a = 1) {} # legal sub foo (@a = (1)) {} # invalid sub foo (%a = (a => b)) {} # invalid - Проверка не удалась: %s
-
(X) В пакете malloc, поставляемом с Perl, произошла внутренняя ошибка.
- Проверка %s не удалась: файл "%s", строка %d
-
(X) Произошла общая ошибка проверки. Необходимо проверить соответствующий файл.
- Присвоенное значение не является ссылкой
-
(F) Вы пытались присвоить что-то, что не является ссылкой, к lvalue-ссылке (например,
\$x = $y). Если вы хотели создать алиас $x для $y, используйте\$x = \$y. - Присвоенное значение не является %s ссылкой
-
(F) Вы пытались присвоить ссылку к конструктору ссылки, но ссылки были разных типов. Вы не можете создать алиас скаляра массиву или массива хэшу; типы должны совпадать.
\$x = \@y; # error \@x = \%y; # error $y = []; \$x = $y; # error; did you mean \$y? - Присвоение ненулевого значения $[] более невозможно
-
(F) Когда функция «array_base» отключена (например, под
use v5.16;, и начиная с Perl 5.30) специальная переменная$[, которая устарела, теперь имеет фиксированное значение ноль. - Присвоение как списку, так и скаляру
-
(F) Если вы присваиваете условному оператору, второй и третий аргументы должны быть либо оба скалярами, либо оба списками. В противном случае Perl не будет знать, какой контекст предоставить правой части.
- Предполагается, что это НЕ класс POSIX, так как %s в регулярном выражении; помечено <-- HERE в 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, есть %u, должна быть %d
-
(F) Вы передали буфер неправильного размера одной из функций msgctl(), semctl() или shmctl(). В терминологии C, соответствующие размеры составляют соответственно sizeof(struct msqid_ds *), sizeof(struct semid_ds *) и sizeof(struct shmid_ds *).
- Неправильный шаблон замены с eval
-
(F) Вы использовали переключатель
/eдля оценки замены в подстановке, но Perl обнаружил синтаксическую ошибку в коде оценки, вероятно, неожиданную правую фигурную скобку '}'. - Неправительный дескриптор файла: %s
-
(F) Символ был передан чему-то, ожидающему дескриптор файла, но у символа нет связанного с ним дескриптора файла. Возможно, вы не выполнили open(), или сделали это в другом пакете.
- Плохое освобождение() проигнорировано
-
(S malloc) Внутренняя функция вызвала free() на чем-то, что вообще не было выделено с помощью malloc(). Обязательно, но может быть отключено установкой переменной окружения
PERL_BADFREEв 0.Это сообщение часто можно увидеть с DB_File на системах с "жёсткой" динамической компоновкой, такими как
AIXиOS/2. Это ошибкаBerkeley DB, которая остаётся незамеченной, еслиDBиспользует поблажающую функцию system 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 голый символ) Компилятор обнаружил голый символ там, где ожидалось условное выражение, что часто указывает на то, что || или && были обработаны как часть последнего аргумента предыдущей конструкции, например:
open FOO || die;Это также может указывать на неправильно написанную константу, которая была интерпретирована как голый символ:
use constant TYPO => 1; if (TYOP) { print "foo" }Директива
strictполезна для предотвращения таких ошибок. - Голый символ в require содержит "%s"
- Голый символ в require отображается на запрещённый имя файла "%s"
- Голый символ в require отображается на пустое имя файла
-
(F) Голая форма require была вызвана с именем файла, которое не могло быть сгенерировано с помощью допустимого, разрешённого анализатором, голого символа. Вы не должны получать эту ошибку в коде Perl, но код XS может генерировать её, если он передаёт недопустимое имя модуля в
Perl_load_module. - Голый символ в require не должен начинаться с двойного двоеточия: "%s"
-
(F) В
require Bare::Word, независящее от слова не должно начинаться с двойного двоеточия. Запишитеrequire ::Foo::Barкакrequire Foo::Barвместо этого. - Независящее от слова "%s" запрещено при включенном "строгих подстановках"
-
(F) При включённых "строгих подстановках" независящее от слова разрешается только в качестве идентификатора подпрограммы в фигурных скобках или слева от символа "=>". Возможно, вам нужно предварительно объявить подпрограмму?
- Независящее от слова "%s" ссылается на несуществующий пакет
-
(W bareword) Вы использовали квалифицированное независящее от слова в форме
Foo::, но компилятор не обнаружил других применений этого пространства имён до этого момента. Возможно, вам нужно предварительно объявить пакет? - Независящее от слова дескриптор файла "%s" запрещено при отключённой функции 'no feature "bareword_filehandles"'
-
(F) Вы попытались использовать независящее от слова имя дескриптора файла при отключённой функции
bareword_filehandles.Только встроенные дескрипторы
STDIN,STDOUT,STDERR,ARGV,ARGVOUTиDATAмогут использоваться при отключённой функцииbareword_filehandles. - BEGIN не пройдена--компиляция прервана
-
(F) При выполнении подпрограммы BEGIN было поднято исключение, которое не было перехвачено. Компиляция немедленно останавливается, и интерпретатор завершает работу.
- BEGIN небезопасна после ошибок--компиляция прервана
-
(F) Perl обнаружил подпрограмму
BEGIN {}(или директивуuse, что подразумеваетBEGIN {}) после того, как уже произошла одна или несколько ошибок компиляции. Поскольку предполагаемая среда дляBEGIN {}не могла быть гарантирована (из-за ошибок), и поскольку последующий код, вероятно, зависит от её правильной работы, Perl просто отказался. - \%d лучше записать как $%d
-
(W syntax) За пределами шаблонов обратные ссылки существуют как переменные. Использование обратных слэшей сохраняется в правой части подстановки, но стилистически лучше использовать форму переменных, поскольку другие программисты Perl ожидают этого, и это работает лучше, если есть более 9 обратных ссылок.
- Двоичное число > 0b11111111111111111111111111111111 не переносимо
-
(W portable) Указанное двоичное число больше 2**32-1 (4294967295) и поэтому не переносимо между системами. См. perlport для получения дополнительной информации о проблемах с переносимостью.
- bind() на закрытом сокете %s
-
(W closed) Вы пытались выполнить bind на закрытом сокете. Вы забыли проверить значение возврата вашего вызова socket()? См. "bind" в perlfunc.
- binmode() для закрытого дескриптора файла %s
-
(W unopened) Вы пытались выполнить binmode() для дескриптора файла, который никогда не был открыт. Проверьте свой поток управления и количество аргументов.
- Размер битового вектора > 32 не переносимо
-
(W portable) Использование битовых векторов размером больше 32 не переносимо.
- Странная копия %s
-
(P) Perl обнаружил попытку скопировать внутреннее значение, которое нельзя скопировать.
- Странный SvTYPE [%d]
-
(P) При запуске новой нити или возврате значений из нити Perl столкнулся с недопустимым типом данных.
- Оба или ни один конец диапазона должны быть Unicode в регулярном выражении; помечено <-- HERE в m/%s/
-
(W regexp) (только при
use re 'strict'или внутри(?[...]))В квадратной скобке в шаблоне регулярного выражения у вас был диапазон, у которого ровно один конец задан с помощью
\N{}, а другой конец задан с помощью непереносимого механизма. Perl обрабатывает диапазон как диапазон Unicode, то есть все символы в нём считаются символами Unicode, которые могут иметь разные кодовые точки на некоторых платформах, на которых работает Perl. Например,[\N{U+06}-\x08]обрабатывается так, как будто вы сказали[\N{U+06}-\N{U+08}], то есть он соответствует символам, кодовые точки которых в Unicode равны 6, 7 и 8. Но эта\x08может указывать на то, что вы имели в виду что-то другое, поэтому появляется предупреждение. - Переполнение буфера в prime_env_iter: %s
-
(W internal) Предупреждение, специфичное для VMS. Пока Perl готовился к итерации по %ENV, он столкнулся с логическим именем или определением символа, которое было слишком длинным, поэтому оно было усечено до показанной строки.
- Обратный вызов вызвал 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 в typeglob
-
(F) Вы напрямую манипулировали таблицей символов Perl, сохранили в ней ссылку, а затем попытались получить доступ к этому символу через обычный синтаксис Perl. Доступ вызывает автовивификацию этого typeglob, но нет законного преобразования из этого типа ссылки в typeglob.
- Невозможно скопировать в %s
-
(P) Perl обнаружил попытку копирования значения в внутренний тип, которому нельзя напрямую присвоить значение.
- Кодировка "%s" не найдена
-
(S io) Вы попытались применить несуществующую кодировку к дескриптору файла, либо с помощью open(), либо binmode().
- Невозможно открыть %s как dirhandle: оно уже открыто как filehandle
-
(F) Вы попытались использовать opendir() для ассоциации dirhandle с символом (glob или скаляр), который уже содержит filehandle. Поскольку этот способ написания кода может сделать ваш код запутанным, он был устаревшим в Perl 5.10. Начиная с Perl 5.28, это фатальная ошибка.
- Невозможно открыть %s как filehandle: оно уже открыто как dirhandle
-
(F) Вы попытались использовать open() для ассоциации filehandle с символом (glob или скаляр), который уже содержит 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.
- Нельзя «прервать» в цикле topicalizer
-
(F) Вы вызвали
break, но вы находитесь в блокеforeach, а не в блокеgiven. Вы, вероятно, хотели использоватьnextилиlast. - Нельзя «прервать» за пределами заданного блока
-
(F) Вы вызвали
break, но вы не находитесь внутри блокаgiven. - Нельзя вызвать метод "%s" для неопределённого значения
-
(F) Вы использовали синтаксис вызова метода, но слот, заполненный ссылкой на объект или именем пакета, содержит неопределённое значение. Ошибка может быть воспроизведена, например:
$BADREF = undef; process $BADREF 1,2,3; $BADREF->process(1,2,3); - Can't call method "%s" on unblessed reference
-
(F) Вызов метода должен знать, в каком пакете он должен выполняться. Обычно это определяется из ссылки на объект, которую вы предоставляете, но в данном случае ссылка на объект не была предоставлена. Ссылка не является ссылкой на объект, пока она не была благословлена. См. perlobj.
- Can't call method "%s" without a package or object reference
-
(F) Вы использовали синтаксис вызова метода, но слот, заполненный ссылкой на объект или именем пакета, содержит выражение, возвращающее определённое значение, которое не является ни ссылкой на объект, ни именем пакета. Ошибка может быть воспроизведена, например:
$BADREF = 42; process $BADREF 1,2,3; $BADREF->process(1,2,3); - Can't call mro_isa_changed_in() on anonymous symbol table
-
(P) Perl запутался, являлся ли хэш обычным хэшем или хэшем таблицы символов при попытке обновления кэшей @ISA.
- Can't call mro_method_changed_in() on anonymous symbol table
-
(F) Модуль XS пытался вызвать
mro_method_changed_inна хэш, который не был привязан к таблице символов. - Can't chdir to %s
-
(F) Вы вызвали
perl -x/foo/bar, но /foo/bar не является каталогом, в который можно перейти, возможно, потому что он не существует. - Can't check filesystem of script "%s" for nosuid
-
(P) По какой-то причине невозможно проверить файловую систему скрипта на nosuid.
- Can't coerce %s to %s in %s
-
(F) Некоторые типы SVs, в частности реальные записи таблицы символов (typeglobs), не могут быть принудительно изменены. Поэтому нельзя делать следующее:
*foo += 1;Можно сделать так
$foo = *foo; $foo += 1;но тогда $foo больше не содержит глобальную переменную.
- Can't "continue" outside a when block
-
(F) Вы вызвали
continue, но вы находитесь не внутри блокаwhenилиdefault. (Обратите внимание, что эта ошибка выводится при выходе из блокаdefault, поэтому ошибка не будет выведена, если вы используете явноеcontinue.) - Can't create pipe mailbox
-
(P) Ошибка, характерная для VMS. У процесса закончились квоты или возникли другие проблемы с подключением.
- Can't declare %s in "%s"
-
(F) Только скалярные, массивы и хэши могут быть объявлены как переменные "my", "our" или "state". Их имена должны быть обычными идентификаторами.
- Can't "default" outside a topicalizer
-
(F) Вы использовали блок
default, который не находится внутри циклаforeachили блокаgiven. (Обратите внимание, что эта ошибка возникает при выходе из блокаdefault, поэтому вы не получите ошибку, если используете явноеcontinue.) - Can't determine class of operator %s, assuming BASEOP
-
(S) Это предупреждение указывает на ошибку во внутреннем механизме Perl. Perl пытался найти класс (например, LISTOP) конкретного OP и не смог этого сделать. Вероятнее всего, это связано с ошибкой во внутренних механизмах Perl или с ошибкой в коде XS, который манипулирует деревьями операторов Perl.
- Can't do inplace edit: %s is not a regular file
-
(S inplace) Вы попытались использовать переключатель -i со специальным файлом, например, файлом в /dev, FIFO или недоступным каталогом. Файл был проигнорирован.
- Can't do inplace edit on %s: %s
-
(S inplace) Создание нового файла завершилось с указанным сообщением об ошибке.
- Can't do inplace edit: %s would not be unique
-
(S inplace) Ваша файловая система не поддерживает имена файлов длиннее 14 символов, и Perl не смог создать уникальное имя файла во время редактирования на месте с переключателем -i. Файл был проигнорирован.
- Can't do %s("%s") on non-UTF-8 locale; resolved to "%s".
-
(W locale) Вы 1) работаете в «
use locale»; 2) текущий языковой стандарт не UTF-8; 3) вы пытались выполнить операцию изменения регистра на указанном символе Юникода; и 4) результат этой операции смешивал правила Юникода и языкового стандарта, которые, вероятно, конфликтуют. Смешивание разных типов правил запрещено, поэтому операция не была выполнена; вместо этого результатом является указанное значение, которое использует только правила Юникода. В большинстве случаев это исходный символ без изменений.В целом, не рекомендуется смешивать языковые стандарты, не являющиеся UTF-8, и Юникод, и эта проблема является одной из причин. Это предупреждение выводится, когда правила Юникода обычно приводят к результату этой операции, содержащему символ, который находится в диапазоне, указанном языковым стандартом (0..255), и, следовательно, подчиняется правилам языкового стандарта, а не Юникода.
Если вы используете языковой стандарт только для его характеристик, связанных с числовым и временным форматом (и не
LC_CTYPE), рассмотрите возможность использования ограниченной формы оператора pragma (см. "The "use locale" pragma" in perllocale) например, "use locale ':not_characters'".Обратите внимание, что неудачные операции изменения регистра, выполненные в результате сопоставления регистронезависимого
/iрегулярного выражения, будут отображаться в этом предупреждении как имеющие операциюfc(так как это то, что движок регулярных выражений вызывает за кулисами). - Can't do waitpid with flags
-
(F) На этой машине отсутствуют waitpid() или wait4(), поэтому эмулируется только waitpid() без флагов.
- Can't emulate -%s on #! line
-
(F) Строка #! указывает на переключатель, который не имеет смысла на данном этапе. Например, на строке #! было бы странно указать -x.
- Can't %s %s-endian %ss on this platform
-
(F) Порядок байтов вашей платформы не является ни big-endian, ни little-endian, или размер указателя очень странный. Возможно, не удастся упаковать и распаковать значения с плавающей точкой big- или little-endian и указатели. См. "pack" in perlfunc.
- Can't exec "%s": %s
-
(W exec) Система(), exec() или вызов piped open не смогли выполнить указанную программу по указанной причине. Типичные причины включают: неверные разрешения на файл, файл не найден в
$ENV{PATH}, исполняемый файл был скомпилирован для другой архитектуры или строка #! в скрипте указывает на интерпретатор, который нельзя запустить по аналогичным причинам. (Возможно, ваша система вообще не поддерживает #!). - Can't exec %s
-
(F) Perl пытался выполнить указанную программу за вас, так как это было указано в строке #!. Если это не то, что вы хотели, вам может потребоваться указать "perl" в строке #!.
- Can't execute %s
-
(F) Вы использовали переключатель -S, но у копий скрипта для выполнения, найденных в PATH, не было правильных разрешений.
- Can't find an opnumber for "%s"
-
(F) Строка вида
CORE::wordбыла передана в prototype(), но нет встроенного элемента с именемword. - Can't find label %s
-
(F) Вы попросили перейти по метке, которая нигде не упоминается. См. "goto" in perlfunc.
- Can't find %s on PATH
-
(F) Вы использовали переключатель -S, но скрипт для выполнения не был найден в PATH.
- Can't find %s on PATH, '.' not in PATH
-
(F) Вы использовали переключатель -S, но скрипт для выполнения не был найден в PATH или, по крайней мере, не с правильными разрешениями. Скрипт существует в текущем каталоге, но PATH запрещает его выполнение.
- Can't find string terminator %s anywhere before EOF
-
(F) Строки Perl могут занимать несколько строк. Это сообщение означает, что закрывающий разделитель опущен. Из-за вложенности скобок в фигурных кавычках следующему фрагменту не хватает заключительной скобки:
print q(The character '(' starts a side comment.);Если вы получаете эту ошибку из here-документа, возможно, вы включили невидимые пробелы перед или после закрывающей метки, или отсутствует перевод строки после неё. Хороший редактор кода предоставит способ найти эти символы (или их отсутствие). См. perlop для получения подробной информации о here-документах.
- Can't find Unicode property definition "%s"
- Can't find Unicode property definition "%s" in regex; marked by <-- HERE in m/%s/
-
(F) Указанное вами имя свойства Юникода с помощью
\pили\Pнеизвестно Perl. Возможно, вы ошиблись в написании? См. "Properties accessible through \p{} and \P{}" in perluniprops для получения полного списка доступных официальных свойств. Если это пользовательское свойство user-defined property, оно должно быть определено до сопоставления регулярного выражения.Если вы не имели в виду использование свойства Юникода, экранируйте
\p, либо\\p(только\p) либо\Q\p(остальная часть строки, или до\E). - Can't fork: %s
-
(F) Произошла фатальная ошибка при попытке разветвления во время открытия канала.
- Can't fork, trying again in 5 seconds
-
(W pipe) Разветвление в канале завершилось ошибкой EAGAIN и будет повторено через пять секунд.
- Can't get filespec - stale stat buffer?
-
(S) Предупреждение, специфичное для VMS. Оно возникает из-за различий в проверках доступа в VMS и в модели Unix, предполагаемой Perl. В VMS проверки доступа выполняются по имени файла, а не по битам в буфере stat, чтобы можно было учитывать ACL и другие виды защиты. К сожалению, Perl предполагает, что буфер stat содержит всю необходимую информацию и передает его, а не filespec, в процедуру проверки доступа. Он попытается извлечь filespec, используя имя устройства и FID, присутствующие в буфере stat, но это сработает только в том случае, если вы не сделали последующего вызова к процедуре CRTL stat(), поскольку имя устройства перезаписывается при каждом вызове. Если появляется это предупреждение, поиск имени не удался, и процедура проверки доступа отказалась и вернула FALSE, просто для большей осторожности. (Примечание: процедура проверки доступа знает о Perl
statоператоре и проверках файлов, поэтому вы никогда не должны видеть это предупреждение в ответ на команду Perl; оно возникает только в том случае, если какой-либо внутренний код относится к буферам stat небрежно.) - Невозможно получить имя устройства почтового ящика канала
-
(P) Ошибка, специфичная для VMS. После создания почтового ящика для работы как канала Perl не может получить его имя для последующего использования.
- Невозможно получить значение параметра SYSGEN для MAXBUF
-
(P) Ошибка, специфичная для VMS. Perl спросил $GETSYI, какой размер вы хотите для буферов почтового ящика, но не получил ответа.
- Нельзя выполнить "goto" внутрь бинарного или спискового выражения
-
(F) Был выполнен оператор "goto" для перехода в середину бинарного или спискового выражения. Вы не можете попасть туда отсюда. Причина этого ограничения заключается в том, что интерпретатор запутается, сколько аргументов имеется, что приводит к повреждению стека или сбоям. Эта ошибка возникает в следующих случаях:
goto F; print do { F: }; # Can't jump into the arguments to print goto G; $x + do { G: $y }; # How is + supposed to get its first operand? - Нельзя выполнить "goto" внутрь блока "given"
-
(F) Был выполнен оператор "goto" для перехода в середину блока
given. Вы не можете попасть туда отсюда. См. "goto" в perlfunc. - Нельзя выполнить "goto" в середину цикла foreach
-
(F) Был выполнен оператор "goto" для перехода в середину цикла foreach. Вы не можете попасть туда отсюда. См. "goto" в perlfunc.
- Нельзя выполнить "goto" из псевдоблока
-
(F) Был выполнен оператор "goto" для перехода из того, что может выглядеть как блок, но на самом деле это не настоящий блок. Это обычно происходит, если вы попытались перейти из блока sort() или подпрограммы, что недопустимо. См. "goto" в perlfunc.
- Невозможно перейти в подпрограмму из eval-%s
-
(F) Вызов "goto подпрограмма" не может быть использован для перехода из eval "строка" или блока.
- Невозможно перейти в подпрограмму из подпрограммы сортировки (или аналогичного обратного вызова)
-
(F) Вызов "goto подпрограмма" не может быть использован для перехода из подпрограммы сравнения для sort(), или из аналогичного обратного вызова (такого как функция reduce() в List::Util).
- Нельзя перейти в подпрограмму вне подпрограммы
-
(F) Глубоко магический вызов "goto подпрограмма" может заменить только один вызов подпрограммы на другой. Он не может создать его из ничего. Как правило, вы должны вызывать его только из подпрограммы AUTOLOAD. См. "goto" в perlfunc.
- Невозможно игнорировать сигнал CHLD, принудительное использование значения по умолчанию
-
(W signal) Perl обнаружил, что он запускается с сигналом SIGCHLD (иногда известным как SIGCLD) отключенным. Поскольку отключение этого сигнала повлияет на правильное определение статуса завершения дочерних процессов, Perl сбросил сигнал на его значение по умолчанию. Эта ситуация обычно указывает, что родительская программа, в которой может запускаться Perl (например, cron), очень небрежна.
- Невозможно убить процесс с нечисловым идентификатором
-
(F) Идентификаторы процессов должны быть целыми числами (со знаком). Попытка убить() неопределённый, пустой строковый или иным образом нечисловой идентификатор процесса является фатальной ошибкой.
- Нельзя использовать "last" вне блока цикла
-
(F) Оператор "last" был выполнен для выхода из текущего блока, но при этом существует проблема - текущего блока не существует. Обратите внимание, что блок "if" или "else" не считается "циклическим" блоком, так же как и блок, переданный sort(), map() или grep(). Обычно можно удвоить фигурные скобки, чтобы получить тот же эффект, потому что внутренние фигурные скобки будут считаться блоком, который выполняется один раз. См. "last" в perlfunc.
- Невозможно линейно отобразить анонимную таблицу символов
-
(F) Perl попытался вычислить порядок разрешения методов (MRO) пакета, но потерпел неудачу, потому что у хранилища пакета нет имени.
- Невозможно загрузить '%s' для модуля %s
-
(F) Модуль, который вы пытались загрузить, не смог загрузить динамическое расширение. Это может означать, что вы обновили свою версию perl до версии, несовместимой со старыми динамическими расширениями (что известно происходит между основными версиями perl), или (более вероятно), что ваше динамическое расширение было скомпилировано с более старой версией библиотеки, установленной на вашей системе. Вам может потребоваться перестроить старые динамические расширения.
- Невозможно локализовать лексическую переменную %s
-
(F) Вы использовали local для имени переменной, которое ранее было объявлено как лексическая переменная с использованием "my" или "state". Это не разрешается. Если вы хотите локализовать переменную пакета с таким же именем, квалифицируйте её именем пакета.
- Невозможно локализовать через ссылку
-
(F) Вы сказали что-то вроде
local $$ref, чего Perl в настоящее время не может обработать, потому что когда он пытается восстановить старое значение того, на что указывал $ref после завершения области видимости local(), он не может быть уверен, что $ref по-прежнему будет ссылкой. - Не удаётся найти %s
-
(F) Вы сказали
do(илиrequire, илиuse) файл, которого не удалось найти. Perl ищет файл во всех расположениях, упомянутых в @INC, если в имени файла не указан полный путь к файлу. Возможно, вам нужно установить переменную среды PERL5LIB или PERL5OPT, чтобы указать, где находится дополнительная библиотека, или, возможно, скрипту нужно добавить имя библиотеки в @INC. Или, возможно, вы просто неправильно написали имя файла. См. "require" в perlfunc и lib. - Не удаётся найти auto/%s.al в @INC
-
(F) В пакете был вызван метод (или функция), который позволяет автозагрузку, но нет функции для автозагрузки. Наиболее вероятные причины - опечатка в имени функции/метода или невозможность загрузить файл, например, выполнив
make install. - Не удаётся найти загружаемый объект для модуля %s в @INC
-
(F) Модуль, который вы загрузили, пытается загрузить внешнюю библиотеку, например, foo.so или bar.dll, но модуль DynaLoader не смог найти эту библиотеку. См. DynaLoader.
- Не удаётся найти метод объекта "%s" через пакет "%s"
-
(F) Вы правильно вызвали метод, и он правильно указал пакет, работающий как класс, но этот пакет не определяет этот конкретный метод, а также ни один из его базовых классов. См. perlobj.
- Не удаётся найти метод объекта "%s" через пакет "%s" (возможно, вы забыли загрузить "%s"?)
-
(F) Вы вызвали метод класса, которого не существовало, и метод не был найден в UNIVERSAL. Это часто означает, что методу требуется пакет, который не загружен.
- Не удаётся найти пакет %s для @%s::ISA
-
(W syntax) Массив @ISA содержал имя другого пакета, который, похоже, не существует.
- Не удаётся найти PerlIO%s
-
(F) Вы попытались использовать в open() PerlIO-слой, которого нет, например, open(FH, ">:nosuchlayer", "somefile").
- Невозможно выполнить присвоение списка к %ENV на данной системе
-
(F) Присвоение списка к %ENV не поддерживается на некоторых системах, в частности, на VMS.
- Невозможно сделать загруженные символы глобальными на этой платформе во время загрузки %s
-
(S) Модуль передал флаг 0x01 в DynaLoader::dl_load_file() для запроса того, чтобы символы из указанного файла были доступны глобально в процессе, но эта функциональность недоступна на этой платформе. Хотя модуль, вероятно, всё ещё будет работать, это может помешать интерпретатору perl загружать другие расширения на основе XS, которым необходимо напрямую связываться с функциями, определёнными в коде C или XS в указанном файле.
- Нельзя изменить %s в %s
-
(F) Вам запрещено присваивать значение указанному элементу или иным образом пытаться его изменить, например, с помощью автоинкремента.
- Невозможно изменить несуществующую подстроку
-
(P) Внутренняя процедура, выполняющая присвоение в substr(), получила NULL.
- Невозможно изменить не-lvalue-вызов подпрограммы &%s
- Невозможно изменить не-lvalue-вызов подпрограммы &%s в %s
-
(F) Подпрограммы, предназначенные для использования в контексте lvalue, должны быть объявлены как таковые. См. "Lvalue-подпрограммы" в perlsub.
- Невозможно изменить ссылку на %s в %s присваивании
-
(F) Только ограниченное число конструкций может быть использовано в качестве аргумента конструктора ссылки слева от знака присваивания, а то, что вы использовали, не является одним из них. См. "Присваивание ссылкам" в perlref.
- Невозможно изменить ссылку на локализованный скобочный массив в присваивании списка
-
(F) Присвоение к
\local(@array)или\(local @array)не поддерживается, так как неясно, что оно должно делать. Если вы имели в виду сделать @array ссылкой на другой массив, используйте\@array = \@other_array. Если вы хотите сделать элементы @array псевдонимами скаляров, на которые ссылаются справа от знака присваивания, используйте\(@array) = @scalar_refs. - Невозможно изменить ссылку на скобочную хеш-таблицу в присваивании списка
-
(F) Присвоение
\(%hash)не поддерживается. Если вы хотели, чтобы %hash ссылался на другой хэш, используйте\%hash = \%other_hash. Если вы хотите сделать элементы %hash псевдонимами скаляров, указанных в правой части, используйте срез хэша:\@hash{@keys} = @those_scalar_refs. - Невозможно msgrcv для read-only переменной
-
(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, что вызов должен быть в контексте списка.
- Не удаётся выполнить stat скрипта "%s"
-
(P) По какой-то причине вы не можете fstat() скрипта, даже если он уже открыт. Странно.
- Невозможно взять логарифм от %g
-
(F) Для обычных действительных чисел вы не можете взять логарифм отрицательного числа или нуля. Однако, пакет Math::Complex поставляется с Perl, если вы действительно хотите сделать это для отрицательных чисел.
- Невозможно извлечь квадратный корень из %g
-
(F) Для обычных действительных чисел вы не можете извлечь квадратный корень из отрицательного числа. Однако, пакет Math::Complex поставляется с Perl, если вы действительно хотите сделать это.
- Невозможно удалить активную подпрограмму
-
(F) Вы не можете удалить подпрограмму, которая в настоящее время выполняется. Однако вы можете переопределить её во время выполнения, и даже удалить переопределённую подпрограмму, пока выполняется старая подпрограмма. Как это работает.
- Нельзя ослабить не ссылку
-
(F) Вы пытались ослабить то, что не было ссылкой. Только ссылки можно ослабить.
- Невозможно обновить %s (%d) до %d
-
(P) Внутренняя функция sv_upgrade добавляет "члены" к SV, превращая его в более специализированный тип SV. Однако несколько верхних типов SV настолько специализированы, что их нельзя взаимопревращать. Это сообщение указывает, что была предпринята такая попытка.
- Нельзя использовать '%c' после -mname
-
(F) Вы пытались вызвать perl с переключателем -m, но после имени модуля вы ввели что-то кроме "=".
- Нельзя использовать хэш как ссылку
-
(F) Вы попытались использовать хэш как ссылку, как в
%foo->{"bar"}или%$ref->{"hello"}. Версии perl <= 5.22.0 позволяли использовать этот синтаксис, но не должны были. Это было устаревшим в perl 5.6.1. - Нельзя использовать массив как ссылку
-
(F) Вы попытались использовать массив как ссылку, как в
@foo->[23]или@$ref->[99]. Версии perl <= 5.22.0 позволяли использовать этот синтаксис, но не должны были. Это было устаревшим в perl 5.6.1. - Нельзя использовать анонимную таблицу символов для поиска методов
-
(F) Внутренняя функция, которая выполняет поиск методов, получила таблицу символов, у которой нет имени. Таблицы символов могут стать анонимными, например, при удалении стейков:
undef %Some::Package::. - Нельзя использовать неопределённое значение как %s ссылку
-
(F) Значение, используемое в качестве ссылки (строчной или жесткой), должно быть определённым значением. Это помогает избежать некоторых неприятных ошибок.
- Нельзя использовать голый идентификатор ("%s") как %s ссылку, когда включена "strict refs"
-
(F) Разрешены только жесткие ссылки в режиме "strict refs". Символические ссылки запрещены. См. perlref.
- Невозможно использовать %! из-за отсутствия Errno.pm
-
(F) При первом использовании хэша
%!, Perl автоматически загружает модуль Errno.pm. Модуль Errno должен связать хэш %! с предоставлением символических имён для$!значений errno. - Нельзя использовать '<' и '>' после типа '%c' в %s
-
(F) Тип не может иметь одновременно порядок байтов big-endian и little-endian, поэтому это сочетание модификаторов запрещено. См. "pack" в perlfunc.
- Нельзя использовать 'defined(@array)' (Возможно, стоит просто опустить defined()?)
-
(F) defined() не подходит для массивов, так как проверяет на неопределённое значение скаляра. Если вы хотите проверить, пуст ли массив, используйте
if (@array) { # not empty }, например. - Нельзя использовать 'defined(%hash)' (Возможно, стоит просто опустить defined()?)
-
(F)
defined()обычно некорректно работает с хэшами.Хотя
defined %hashложно для простого неиспользованного хэша, он становится истинным в нескольких неявных ситуациях, включая итераторы, слабые ссылки, имена стеков, и даже остаётся истинным послеundef %hash. Эти факторы делаютdefined %hashпрактически бесполезным на практике, поэтому теперь генерирует ошибку.Если вам нужно проверить, не пуст ли хэш, то поместите его в булевый контекст (см. "Скалярные значения" в perldata):
if (%hash) { # not empty }Если вы пытаетесь проверить существование такой переменной пакета,
defined %Foo::Bar::QUUX, то это никогда не было надёжным способом узнать о функциях пакета, или загружен ли он, и т. д. - Нельзя использовать %s в качестве переменной цикла
-
(P) Парсер запутался при попытке разобрать цикл
foreach. - Нельзя использовать глобальную %s в %s
-
(F) Вы попытались объявить магическую переменную как лексическую переменную. Это запрещено, так как магия связана только с одним местом (именно с глобальной переменной), и было бы очень непонятно иметь переменные в вашей программе, которые выглядели как магические, но не были таковыми.
- Нельзя использовать '%c' в группе с другим порядком байтов в %s
-
(F) Вы попытались принудительно изменить порядок байтов для типа, который уже находится в группе с модификатором порядка байтов. Например, вы не можете принудительно установить порядок байтов little-endian для типа, находящегося в группе big-endian.
- Нельзя использовать "my %s" в сравнении для сортировки
-
(F) Глобальные переменные $a и $b зарезервированы для сравнений при сортировке. Вы использовали $a или $b в той же строке, что и оператор <=> или cmp, и эта переменная ранее была объявлена как лексическая переменная. Либо укажите имя пакета для переменной сортировки, либо переименуйте лексическую переменную.
- Нельзя использовать ссылку типа %s как ссылку типа %s
-
(F) Вы перепутали типы ссылок. Вам необходимо разыменовать ссылку нужного типа. Вы можете использовать функцию ref() для проверки типа ссылки, если это необходимо.
- Нельзя использовать строку ("%s") как ссылку типа %s, когда включена опция "strict refs"
- Нельзя использовать строку ("%s"...) как ссылку типа %s, когда включена опция "strict refs"
-
(F) Вы указали Perl разыменовать строку, что
use strictзапрещает для предотвращения случайного выполнения. См. "Символические ссылки" в perlref. Это может быть вызвано@или$в строке с двойными кавычками непосредственно перед интерполяцией переменной, например в"user @$twitter_id", что говорит о том, что содержимое$twitter_idдолжно обрабатываться как ссылка на массив; используйте\для получения символа@в прямом виде, за которым следует содержимое$twitter_id:"user \@$twitter_id". - Нельзя использовать индекс к %s
-
(F) Компилятор попытался интерпретировать выражение в квадратных скобках как индекс. Но слева от скобок было выражение, которое не выглядело как ссылка на хэш или массив, или что-то ещё, допускающее индексацию.
- Нельзя использовать \%c вместо $%c в выражении
-
(W синтаксис) В обычном выражении обратный слэш — это унарный оператор, создающий ссылку на свой аргумент. Использование обратного слэша для указания обратной ссылки на совпавшую подстроку допустимо только в рамках шаблона регулярного выражения. Попытка сделать это в обычном Perl-коде приводит к значению, которое выглядит как SCALAR(0xdecaf). Используйте $1 вместо этого.
- Нельзя ослабить нессылку
-
(F) Вы пытались ослабить нессылку. Только ссылки можно ослабить.
- Нельзя использовать "when" вне topicalizer
-
(F) Вы использовали блок when(), который не находится внутри цикла
foreachили блокаgiven. (Обратите внимание, что эта ошибка выдаётся при выходе из блокаwhen, поэтому вы не получите ошибку, если соответствие не найдено или если вы используете явныйcontinue.) - Нельзя присвоить x= к неизменяемому значению
-
(F) Вы пытались повторить константу (часто неопределённое значение) с оператором присваивания, что подразумевает изменение самого значения. Возможно, вам нужно скопировать значение во временную переменную и повторить операцию.
- Символ, следующий за "\c", должен быть печатаемым ASCII-символом
-
(F) В
\cX, X должен быть печатаемым (не управляющим) ASCII-символом.Обратите внимание, что ASCII-символы, которые не отображаются как управляющие символы, не рекомендуются и будут генерировать предупреждение (если включено) ""\c%c" более наглядно записывается как "%s"".
- Символ, следующий за \%c, должен быть '{' или односимвольным именем свойства Юникода в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) (В приведенном выше примере
%cзаменяется либоp, либоP.) Вы указали то, что не является допустимым именем свойства Юникода. Большинство свойств Юникода задаются\p{...}. Но если имя состоит из одного символа, фигурные скобки можно опустить. - Символ в формате 'C' внутри pack
-
(W pack) Вы написали
pack("C", $x)где $x меньше 0 или больше 255; формат
"C"предназначен только для кодирования символов родной операционной системы (ASCII, EBCDIC и т. д.), а не для символов Юникода, поэтому Perl интерпретировал это какpack("C", $x & 255)Если вам нужно упаковать коды символов Юникода, используйте формат
"U". - Символ в формате 'c' внутри pack
-
(W pack) Вы написали
pack("c", $x)где $x меньше -128 или больше 127; формат
"c"предназначен только для кодирования символов родной операционной системы (ASCII, EBCDIC и т. д.), а не для символов Юникода, поэтому Perl интерпретировал это какpack("c", $x & 255);Если вам нужно упаковать коды символов Юникода, используйте формат
"U". - Символ в формате '%c' внутри unpack
-
(W unpack) Вы попытались что-то вроде
unpack("H", "\x{2a1}")где формат ожидает обработку байта (символ со значением ниже 256), но вместо этого было предоставлено большее значение. Perl использует остаток от деления значения на 256, как если бы вы предоставили:
unpack("H", "\x{a1}") - Символ в формате 'W' внутри pack
-
(W pack) Вы написали
pack("U0W", $x)где $x меньше 0 или больше 255. Однако, режим
U0ожидает, что все значения будут в интервале [0, 255], поэтому Perl интерпретировал это как:pack("U0W", $x & 255) - Символы в формате '%c' внутри pack
-
(W pack) Вы попытались что-то вроде
pack("u", "\x{1f3}b")где формат ожидает обработку последовательности байтов (символ со значением ниже 256), но некоторые символы имели большее значение. Perl использует остаток от деления значений символов на 256, как если бы вы предоставили:
pack("u", "\x{f3}b") - Символы в формате '%c' внутри unpack
-
(W unpack) Вы попытались что-то вроде
unpack("s", "\x{1f3}b")где формат ожидает обработку последовательности байтов (символ со значением ниже 256), но некоторые символы имели большее значение. Perl использует остаток от деления значений символов на 256, как если бы вы предоставили:
unpack("s", "\x{f3}b") - Определения псевдонимов charnames не могут содержать последовательность из нескольких пробелов; отмечено <-- HERE в %s
-
(F) Вы определили имя символа, содержащее несколько пробелов подряд. Замените их одиночными пробелами. Обычно эти имена определяются в аргументе import
:aliasкuse charnames, но они могут быть определены установленным в$^H{charnames}переводчиком. См. "CUSTOM ALIASES" в charnames. - chdir() для неоткрытого файлового дескриптора %s
-
(W unopened) Вы использовали chdir() для файлового дескриптора, который не был открыт.
- "\c%c" более наглядно записывается как "%s"
-
(W синтаксис) Конструкции
\cXпредназначены для указания непечатаемых символов. Вы использовали её для печатаемого символа, который лучше записать как сам символ, возможно с обратным слэшем перед ним для небуквенных символов. Такой способ не совместим с платформами ASCII и EBCDIC. - Клонирование контекста подстановки не реализовано
-
(F) Создание новой потоковой нити внутри оператора
s///не поддерживается. - Попытка closedir() на неверном дескрипторе каталога %s
-
(W io) Дескриптор каталога, который вы пытались закрыть, либо закрыт, либо не является дескриптором каталога. Проверьте свой поток управления.
- close() для неоткрытого файлового дескриптора %s
-
(W unopened) Вы пытались закрыть файловый дескриптор, который не был открыт.
- Вызван прототип замыкания
-
(F) Если у замыкания есть атрибуты, подпрограмма, переданная обработчику атрибута, является прототипом, который клонируется при создании нового замыкания. Это подпрограмму нельзя вызывать.
- \C больше не поддерживается в регулярных выражениях; отмечено <-- HERE в m/%s/
-
(F) Класс символов \C, используемый для сопоставления одного байта внутри многобайтового символа UTF-8, был удален в версии 5.24, так как он нарушал инкапсуляцию и имел чрезвычайно много ошибок в реализации. Если вам действительно нужно обработать отдельные байты, вам, вероятно, нужно преобразовать строку в такую, где каждый базовый байт хранится как символ, с помощью utf8::encode().
- Пропущенный код после '/'
-
(F) У вас была (под-)шаблон, заканчивающаяся на '/'. После косой черты должен быть другой код шаблона. См. "pack" в perlfunc.
- Код символа 0x%X не является Unicode и не является переносимым
-
(S non_unicode portable) У вас был код символа, который никогда не использовался в каком-либо стандарте, поэтому, вероятно, языки, отличные от Perl, его не поймут. Этот код символа также не поместится в 32-битовое слово на платформах ASCII и поэтому не является переносимым между системами.
В определённый момент некоторые стандарты разрешали использование кодов символов до 0x7FFF_FFFF, но не выше, а этот код символа выше.
Поддержка этих кодов символов — это расширение Perl, и вы должны ожидать, что кроме Perl их никто не сможет обработать; сам Perl на платформах EBCDIC до версии 5.24 не поддерживает их.
Perl также не гарантирует, что представление этих кодов символов не изменится в какой-то момент в будущем, скажем, когда появятся машины с размером слова больше 64 бит. В этом случае файлы, содержащие любые из этих кодов, написанные старой версией Perl, могут потребовать преобразования, прежде чем они станут читаемыми новой версией Perl.
- Код символа 0x%X не является Unicode, может быть не переносимым
-
(S non_unicode) У вас был код символа, превышающий максимальное значение Unicode U+10FFFF.
Perl позволяет строкам содержать супермножество кодов Unicode, но другие языки/системы их могут не принять. Кроме того, даже если эти языки/системы принимают эти большие коды символов, они могут выбрать для них другое представление, отличное от похожего на UTF-8, которое используется в Perl, что означает, что файлы не будут взаимозаменяемы между ними и Perl.
На платформах EBCDIC коды символов выше 0x3FFF_FFFF имеют другое представление в Perl версии 5.24, чем в предыдущих версиях, поэтому любой файл, содержащий эти коды и написанный до этой версии, потребует преобразования, прежде чем он станет читаемым более поздними версиями Perl.
- %s: Команда не найдена
-
(A) Вы случайно запустили свой скрипт через csh или другую оболочку вместо Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl. Строка #! в начале вашего файла может выглядеть так
#!/usr/bin/perl - %s: команда не найдена
-
(A) Вы случайно запустили свой скрипт через bash или другую оболочку вместо Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl. Строка #! в начале вашего файла может выглядеть так
#!/usr/bin/perl - %s: команда не найдена: %s
-
(A) Вы случайно запустили свой скрипт через zsh или другую оболочку вместо Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl. Строка #! в начале вашего файла может выглядеть так
#!/usr/bin/perl - Компиляция завершилась неудачей в require
-
(F) Perl не смог скомпилировать файл, указанный в
requireоператоре. Perl использует это общее сообщение, когда ни одна из ошибок, которые он обнаружил, не была достаточно серьезной, чтобы немедленно остановить компиляцию. - Превышен лимит рекурсии сложного регулярного подвыражения (%d)
-
(W regexp) Регулярное выражение использует рекурсию в сложных ситуациях, где требуется обратное отслеживание. Глубина рекурсии ограничена 32766 или, возможно, меньше на архитектурах, где стек не может неограниченно расти. ("Простые" и "средние" ситуации обрабатываются без рекурсии и не ограничены лимитом.) Попробуйте сократить строку, подлежащую проверке; использовать циклы в коде Perl (например, с
while) вместо регулярного выражения; или переписать регулярное выражение, чтобы оно было проще или меньше использовало обратное отслеживание. (См. perlfaq2 для информации о Мастерстве регулярных выражений.) - connect() на закрытом сокете %s
-
(W closed) Вы пытались выполнить соединение на закрытом сокете. Не забыли ли вы проверить возвращаемое значение вызова socket()? См. "connect" в perlfunc.
- Константа(%s): Вызов &{$^H{%s}} не вернул определенное значение
-
(F) Подпрограмма, зарегистрированная для обработки перегрузки констант (см. overload) или обработчик пользовательских имен символов (см. "CUSTOM TRANSLATORS" в charnames), вернула неопределенное значение.
- Константа(%s): $^H{%s} не определено
-
(F) Парсер обнаружил несоответствия при попытке определить перегруженную константу. Возможно, вы забыли загрузить соответствующий overload пragma?
- Константа не является ссылкой %s
-
(F) К константному значению (возможно, объявленному с помощью
use constantpragma) применяется операция разыменования, но она приводит к неверному типу ссылки. В сообщении указан ожидаемый тип ссылки. Обычно это указывает на синтаксическую ошибку в разыменовании константы. См. "Constant Functions" в perlsub и constant. - Константы из лексических переменных, потенциально изменяемых в других местах, больше не разрешены
-
(F) Вы написали что-то вроде
my $var; $sub = sub () { $var };но к $var обращаются в других местах, и он может быть изменён после того, как выражение
subбудет вычислено. Либо он явно изменяется в другом месте ($var = 3) либо он передаётся в подпрограмму или в оператор, например,printfилиmap, который может или не может изменить переменную.Традиционно Perl захватывал значение переменной в этот момент и превращал подпрограмму в константу, пригодную для инлайнинга. В тех случаях, когда переменная может быть изменена в другом месте, это нарушает поведение замыканий, в которых подпрограмма захватывает саму переменную, а не её значение, поэтому будущие изменения в переменной отражаются в возвращаемом значении подпрограммы.
Это использование было устаревшим, и с версии Perl 5.32 оно больше не разрешается, что позволяет изменить поведение в будущем.
Если вы намеревались сделать подпрограмму пригодной для инлайнинга, убедитесь, что к переменной не обращаются в других местах, возможно, скопировав её:
my $var2 = $var; $sub = sub () { $var2 };Если вы хотите, чтобы эта подпрограмма была замыканием, отражающим будущие изменения переменной, к которой она замыкается, добавьте явное
return.my $var; $sub = sub () { return $var }; - Переопределённая константная подпрограмма %s
-
(W redefine)(S) Вы переопределили подпрограмму, которая ранее была пригодна для инлайнинга. См. "Constant Functions" в perlsub для комментариев и обходных путей.
- Неопределенная константная подпрограмма %s
-
(W misc) Вы неопределили подпрограмму, которая ранее была пригодна для инлайнинга. См. "Constant Functions" в perlsub для комментариев и обходных путей.
- Неизвестная константа(%s)
-
(F) Парсер обнаружил несоответствия либо при попытке определить перегруженную константу, либо при попытке найти указанное в
\N{...}escape имя символа. Возможно, вы забыли загрузить соответствующий overload pragma? - :const — экспериментальная возможность
-
(S experimental::const_attr) Атрибут "const" — экспериментальный. Если вы хотите использовать эту возможность, отключите предупреждение с помощью
no warnings 'experimental::const_attr', но знайте, что при этом вы рискуете тем, что ваш код может сломаться в будущей версии Perl. - Атрибут :const не разрешён для именованных подпрограмм
-
(F) Атрибут "const" заставляет выполнить анонимную подпрограмму и захватить её значение в момент клонирования. Именованные подпрограммы не клонируются таким образом, поэтому атрибут не имеет смысла для них.
- Метод копирования не возвратил ссылку
-
(F) Метод, перегружающий "=", имеет ошибку. См. "Copy Constructor" в overload.
- &CORE::%s не может быть вызван напрямую
-
(F) Вы пытались вызвать подпрограмму в пространстве имён
CORE::с помощью синтаксиса&fooили через ссылку. Некоторые подпрограммы в этом пакете пока не могут быть вызваны таким образом, а должны вызываться как ключевые слова. Следующее работает:BEGIN { *shove = \&CORE::push; } shove @array, 1,2,3; # pushes on to @array - CORE::%s не является ключевым словом
-
(F) Пространство имён CORE:: зарезервировано для ключевых слов Perl.
- Повреждённый opcode регулярного выражения %d -> %d
-
(P) Это либо ошибка Perl, либо, если вы используете, ваш собственный движок регулярных выражений. Если это не так, сообщите о проблеме на https://github.com/Perl/perl5/issues.
- повреждённые указатели регулярного выражения
-
(P) Движок регулярных выражений запутался из-за того, что сгенерировал компилятор регулярных выражений.
- повреждённая программа регулярного выражения
-
(P) Движок регулярных выражений получил программу регулярного выражения без корректного магического числа.
- Повреждённый указатель malloc 0x%x в 0x%x
-
(P) Внутренняя ошибка в пакете malloc, который поставляется с Perl.
- Счёт после длины/кода в unpack
-
(F) У вас был шаблон unpack, указывающий на строку с указанной длиной, но вы также указали явный размер строки. См. "pack" в perlfunc.
- Объявление ссылок — экспериментальная возможность
-
(S experimental::declared_refs) Это предупреждение выводится, если вы используете конструктор ссылок в правой части
my,state,our, илиlocal. Просто подавите предупреждение, если хотите использовать эту возможность, но знайте, что при этом вы рискуете тем, что функция может измениться или быть удалена в будущей версии Perl:no warnings "experimental::declared_refs"; use feature "declared_refs"; $fooref = my \$foo; - Глубокая рекурсия в анонимной подпрограмме
- Глубокая рекурсия в подпрограмме "%s"
-
(W рекурсия) Данная подпрограмма вызвала себя (прямо или косвенно) более чем в 100 раз больше, чем вернулась. Вероятно, это указывает на бесконечную рекурсию, если вы не пишете странные программы для бенчмаркинга, в этом случае это указывает на что-то другое.
Этот порог может быть изменен с 100, перекомпилировав двоичный файл perl, установив макрос препроцессора C
PERL_SUB_DEPTH_WARNна желаемое значение. - (?(DEFINE)....) не допускает ветвлений в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы использовали что-то вроде
(?(DEFINE)...|..), что является недопустимым. Наиболее вероятная причина этой ошибки заключается в том, что вы пропустили скобку внутри части.....<-- HERE показывает, где в регулярном выражении была обнаружена проблема.
- %s не определяет ни пакет, ни VERSION — проверка версии не удалась
-
(F) Вы сказали что-то вроде "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 создал новую ссылку на объект, который только что был уничтожен '%s'
-
(F) Метод DESTROY() создал новую ссылку на объект, который только что был уничтожен. Perl сбит с толку и предпочитает прервать работу, а не создавать висячую ссылку.
- Не создан допустимый заголовок
-
См. "500 Ошибка сервера".
- %s не вернул истинное значение
-
(F) Требуемый (или используемый) файл должен вернуть истинное значение, чтобы указать, что он был правильно скомпилирован и правильно выполнил код инициализации. Обычно такой файл заканчивается "1;", но подойдёт любое истинное значение. См. "require" в perlfunc.
- (Вы имели в виду &%s вместо этого?)
-
(W разное) Вы, вероятно, имели в виду импортированную подпрограмму &FOO как $FOO или что-то подобное.
- (Вы имели в виду "local" вместо "our"?)
-
(W тень) Помните, что "our" не локализует объявленную глобальную переменную. Вы объявили её снова в той же области видимости, что кажется излишним.
- (Вы имели в виду $ или @ вместо %?)
-
(W) Вы, вероятно, сказали %hash{$key}, когда имели в виду $hash{$key} или @hash{@keys}. С другой стороны, возможно, вы просто имели в виду %hash и увлеклись.
- Выполнена ошибка
-
(F) Вы передали die() пустую строку (что эквивалентно
die "") или вызвали её без аргументов, и$@была пустой. - Документ не содержит данных
-
См. "500 Ошибка сервера".
- %s не определяет %s::VERSION — проверка версии не удалась
-
(F) Вы сказали что-то вроде "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 I/O, специфичная для VMS, каким-то образом была вызвана на другой платформе. Этого не должно происходить. - Неизвестно, как обработать магию типа \%o
-
(P) Внутренняя обработка магических переменных была испорчена.
- do_study: не хватает памяти
-
(P) Это должно было быть перехвачено safemalloc().
- (Нужно ли предварительно объявить %s?)
-
(S синтаксис) Это обоснованное предположение, сделанное в совокупности с сообщением "%s найден там, где ожидался оператор". Это часто означает, что подпрограмма или имя модуля ссылаются на то, что ещё не объявлено. Это может быть из-за проблем с упорядочением в вашем файле или из-за отсутствующей инструкции "sub", "package", "require" или "use". Если вы ссылаетесь на то, что ещё не определено, вам не нужно определять подпрограмму или пакет до текущего места. Вы можете использовать пустое "sub foo;" или "package FOO;" для ввода объявления вперёд.
- dump() должно быть написано как CORE::dump() начиная с Perl 5.30
-
(F) Вы использовали устаревшую
dump()встроенную функцию. Это было устарело в Perl 5.8.0. Начиная с Perl 5.30, оно должно быть написано в полном квалифицированном формате:CORE::dump().См. "dump" в perlfunc.
- dump не поддерживается
-
(F) Ваша машина не поддерживает dump/undump.
- Дублирующий free() проигнорирован
-
(S malloc) Внутренняя процедура вызвала free() на чём-то, что уже было освобождено.
- Повторяющийся модификатор '%c' после '%c' в %s
-
(W unpack) Вы применили один и тот же модификатор более одного раза после типа в шаблоне pack. См. "pack" в perlfunc.
- elseif должен быть elsif
-
(S синтаксис) В Perl нет ключевого слова "elseif", потому что Ларри считает его уродливым. Ваш код будет интерпретирован как попытка вызвать метод с именем "elseif" для класса, возвращённого следующим блоком. Это вряд ли то, что вы хотите.
- Пустой \%c в регулярном выражении; отмечено <-- HERE в m/%s/
- Пустой \%c{}
- Пустой \%c{} в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы использовали что-то вроде
\b{},\B{},\o{},\p,\P, или\xбез указания для него объекта обработки.К сожалению, по причинам обратной совместимости пустой
\xявляется допустимым внеuse re 'strict'и расширяется до символа NULL. - Пустой (?) без каких-либо модификаторов в регулярном выражении; отмечено <-- HERE в m/%s/
-
(W регулярные выражения) (только под
use re 'strict')(?)ничего не делает, поэтому, возможно, это опечатка. - ${^ENCODING} больше не поддерживается
-
(F) Специальная переменная
${^ENCODING}, ранее использовавшаяся для реализации псевдонимаencoding, больше не поддерживается начиная с Perl 5.26.0.Установление её в любое значение, отличное от
undef, является фатальной ошибкой начиная с Perl 5.28. - Не удалось установить эффективные %s
-
(F) При использовании псевдонима
use filetest, изменение реального и эффективного UID или GID не удалось. - %ENV присвоено %s
-
(F) Вы работаете в режиме taint, и переменная
%ENVбыла присвоена другому хэшу, поэтому она больше не отражает состояние среды программы. Это потенциально небезопасно. - Ошибка преобразования спецификации файла %s
-
(F) Ошибка, специфичная для VMS. Поскольку Perl может иметь дело со спецификациями файлов в формате VMS или Unix, он преобразует их в единый формат, когда должен работать с ними напрямую. Либо вы передали Perl недопустимую спецификацию файла, либо вы нашли случай, который не обрабатывается процедурами преобразования. Упс.
- Ошибка %s при расширении %s
-
(F) Встречена ошибка при обработке пользовательского свойства ("Пользовательские свойства символов" в perlunicode). Это программно написанные подпрограммы, поэтому подвержены ошибкам, которые могут помешать их компиляции или выполнению. Вызовы этих подпрограмм
eval', и если произошла ошибка, это сообщение поднимается, используя содержимое$@из неисправнойeval.Другая возможность заключается в том, что где-то в цепочке расширения свойства было обнаружено заражённые данные. В этом случае формулировка сообщения укажет на эту проблему. См. "Небезопасное пользовательское свойство %s".
- Группа Eval в небезопасном регулярном выражении
-
(F) Perl обнаружил заражённые данные при попытке скомпилировать регулярное выражение, содержащее утверждение
(?{ ... })нулевой ширины, что небезопасно. См. "(?{ code })" в perlre и perlsec. - Группировка Eval недоступна во время выполнения, используйте re 'eval' в регулярном выражении m/%s/
-
(F) Perl пытался скомпилировать регулярное выражение, содержащее утверждение
(?{ ... })нулевой ширины во время выполнения, как это происходит, когда шаблон содержит интерполированные значения. Поскольку это представляет собой риск для безопасности, это запрещено. Если вам необходимо, вы можете сделать это, используя прагмуre 'eval'или явно создавая шаблон из интерполированной строки во время выполнения и используя его в eval(). См. "(?{ code })" в perlre. - Группировка Eval недоступна, используйте re 'eval' в регулярном выражении m/%s/
-
(F) Регулярное выражение содержало утверждение
(?{ ... })нулевой ширины, но этот конструкт разрешён только при применении прагмыuse re 'eval'. См. "(?{ code })" в perlre. - EVAL без изменения позиции превысил предел в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) Вы использовали шаблон, который вложенно содержал слишком много вызовов EVAL без потребления каких-либо данных. Перестройте шаблон таким образом, чтобы данные потреблялись.
Пометка <-- HERE указывает место в регулярном выражении, где была обнаружена проблема.
- Чрезмерно длинный оператор <>
-
(F) Содержимое оператора <> не должно превышать максимальный размер идентификатора Perl. Если вы просто пытаетесь получить список длинных имён файлов, попробуйте использовать оператор glob() или поместите имена файлов в переменную и используйте glob для неё.
- exec? Я не *такой* операционной системой
-
(F) Функция
execне реализована на некоторых системах, например, на Catamount. См. perlport. - %sВыполнение %s прервано из-за ошибок компиляции.
-
(F) Конечное сообщение об ошибке при сбое компиляции Perl.
- Аргумент exists не является элементом HASH или ARRAY или подпрограммой
-
(F) Аргумент для
existsдолжен быть элементом массива или хэша или подпрограммой с амперсандом, например:$foo{$bar} $ref->{"susie"}[12] &do_something - Аргумент exists не является именем подпрограммы
-
(F) Аргумент для
existsдляexists &subдолжен быть именем подпрограммы, а не вызовом подпрограммы.exists &sub()вызовет эту ошибку. - Выход из eval через %s
-
(W exiting) Вы выходите из eval нестандартным способом, например, с помощью goto или операторов управления циклом.
- Выход из формата через %s
-
(W exiting) Вы выходите из формата нестандартным способом, например, с помощью goto или операторов управления циклом.
- Выход из псевдоблока через %s
-
(W exiting) Вы выходите из специального блока (например, блока сортировки или подпрограммы) нестандартным способом, например, с помощью goto или операторов управления циклом. См. "sort" в perlfunc.
- Выход из подпрограммы через %s
-
(W exiting) Вы выходите из подпрограммы нестандартным способом, например, с помощью goto или операторов управления циклом.
- Выход из замены через %s
-
(W exiting) Вы выходите из замены нестандартным способом, например, с помощью return, goto или операторов управления циклом.
- Ожидается закрывающая скобка в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) Вы написали что-то вроде
(?13чтобы обозначить группу захвата вида
(?PARNO), но опустили")". - Ожидается интерполированный расширенный класс символов в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) Похоже, вы пытались интерполировать уже скомпилированный расширенный класс символов, например:
my $thai_or_lao = qr/(?[ \p{Thai} + \p{Lao} ])/; ... qr/(?[ \p{Digit} & $thai_or_lao ])/;Но помеченный код не является синтаксически правильным для такого интерполированного класса.
- Экспериментальное алиасирование через ссылку не включено
-
(F) Чтобы выполнить алиасирование через ссылки, необходимо сначала включить эту функцию:
no warnings "experimental::refaliasing"; use feature "refaliasing"; \$x = \$y; - Экспериментальная функция %s для скалярного значения теперь запрещена
-
(F) Экспериментальная функция, добавленная в Perl 5.14, позволяла
each,keys,push,pop,shift,splice,unshift, иvaluesвызываться со скалярным аргументом. Этот эксперимент считается неудачным и был удалён. Функцияpostderefможет лучше удовлетворить ваши потребности. - Экспериментальные подписи подпрограмм не включены
-
(F) Чтобы использовать подписи подпрограмм, необходимо сначала их включить:
no warnings "experimental::signatures"; use feature "signatures"; sub foo ($left, $right) { ... } - Явное благословение для '' (предполагается пакет main)
-
(W misc) Вы благословляете ссылку на строку нулевой длины. Это приводит к благословению ссылки в пакет main. Обычно этого не требуется. Рассмотрите возможность предоставления целевого пакета по умолчанию, например, bless($ref, $p || 'MyPackage');
- %s: Синтаксис выражения
-
(A) Вы случайно выполнили скрипт через csh вместо Perl. Проверьте строку #!, или вручную передайте скрипт в Perl.
- %s не удался — очередь вызовов прервана
-
(F) При выполнении подпрограммы UNITCHECK, CHECK, INIT или END возникло неуловленное исключение. Обработка оставшейся очереди таких подпрограмм была преждевременно завершена.
- Не удалось закрыть файл временной работы %s: %s
-
(F) Закрытие выходного файла из редактирования на месте, как при использовании параметра командной строки
-i, не удалось. - Неверный диапазон [] "%s" в регулярном выражении; помечено <-- HERE в m/%s/
-
(W regexp)(F) Диапазон в классе символов должен начинаться и заканчиваться буквальным символом, а не другим классом символов, например
\dили[:alpha:]. Символ "-" в вашем неверном диапазоне интерпретируется как буквальный символ "-". В конструкте(?[...])это ошибка, а не предупреждение. Попробуйте экранировать символ "-", "\-". Пометка <-- HERE указывает место в регулярном выражении, где была обнаружена проблема. См. perlre. - Критическая ошибка VMS (статус=%d) в %s, строка %d
-
(P) Ошибка, характерная для VMS. Что-то нештатное произошло в службе системы VMS или в процедуре RTL; подробности можно получить из кода завершения Perl. Имя файла в "в %s" и номер строки в "строка %d" показывают, какой фрагмент исходного кода Perl вызвал проблему.
- fcntl не реализован
-
(F) Похоже, на вашей машине не реализован fcntl(). Что это, PDP-11 или что-то подобное?
- FETCHSIZE возвратил отрицательное значение
-
(F) Связанный массив заявил об отрицательном количестве элементов, что невозможно.
- Поле слишком широкое в формате 'u' в pack
-
(W pack) Каждая строка в uuencoded строке начинается с указателя длины, который не может кодировать значения выше 63. Поэтому нет смысла запрашивать длину строки, большую, чем эта. Perl будет вести себя так, как будто вы указали
u63в качестве формата. - File::Glob::glob() исчезнет в perl 5.30. Используйте File::Glob::bsd_glob() вместо этого.
-
(D устаревшее)
File::Globимеет функциюglob, которая просто вызываетbsd_glob. Однако её прототип отличается от прототипаCORE::glob, и поэтомуFile::Glob::globне следует использовать.File::Glob::glob()устарела в perl 5.8.0. Сообщение об устаревании выдавалось с perl 5.26.0 и далее, а функция исчезнет в perl 5.30.0.Код, использующий
File::Glob::glob(), должен вызыватьFile::Glob::bsd_glob()вместо этого. - Файловый дескриптор %s открыт только для чтения
-
(W io) Вы пытались записать в файл-дескриптор, открытый только для чтения. Если вы хотели, чтобы это был файл-дескриптор для чтения/записи, вам нужно было открыть его с "+<" или "+>" или "+>>" вместо "<" или ничего. Если вы хотели только записать в файл, используйте ">" или ">>". См. "open" в perlfunc.
- Файловый дескриптор %s открыт только для записи
-
(W io) Вы пытались читать из файлового дескриптора, открытого только для записи. Если вы хотели, чтобы это был файловый дескриптор для чтения/записи, вам нужно было открыть его с "+<" или "+>" или "+>>" вместо ">". Если вы хотели только прочитать из файла, используйте "<". См. "open" в perlfunc. Ещё одна возможность — вы пытались открыть файловый дескриптор 0 (также известный как STDIN) для записи (возможно, вы ранее закрыли STDIN?).
- Файловый дескриптор %s переоткрыт как %s только для чтения
-
(W io) Вы открыли файловый дескриптор для чтения, который получил тот же идентификатор файлового дескриптора, что и STDOUT или STDERR. Это произошло, потому что вы ранее закрыли STDOUT или STDERR.
- Файловый дескриптор STDIN переоткрыт как %s только для записи
-
(W io) Вы открыли файловый дескриптор для записи, который получил тот же идентификатор файлового дескриптора, что и STDIN. Это произошло, потому что вы ранее закрыли STDIN.
- Конечный $ должен быть $ или $имя
-
(F) Теперь вам нужно решить, был ли конечный $ в строке буквенным знаком доллара или он должен был ввести имя переменной, которая отсутствует. Поэтому вы должны поставить либо обратную косую черту, либо имя.
- flock() на закрытом файловом дескрипторе %s
-
(W закрыто) Дескриптор файла, который вы пытаетесь заблокировать (flock()), был закрыт некоторое время назад. Проверьте поток управления. flock() работает с дескрипторами файлов. Вы пытаетесь вызвать flock() для дескриптора каталога с таким же именем?
- Формат не завершён
-
(F) Формат должен завершаться строкой с единственной точкой. Perl достиг конца вашего файла, не найдя такой строки.
- Формат %s переопределён
-
(W переопределение) Вы переопределили формат. Чтобы подавить это предупреждение, используйте
{ no warnings 'redefine'; eval "format NAME =..."; } - Найдено = в условии, должно быть ==
-
(W синтаксис) Вы написали
if ($foo = 123)когда имели в виду
if ($foo == 123)(или что-то подобное).
- %s найден там, где ожидается оператор
-
(S синтаксис) Perl-лексер знает, ожидать ли термина или оператора. Если он видит то, что знает как терминал, когда ожидается оператор, он выдаёт это предупреждение. Обычно это указывает на то, что опущен оператор или разделитель, такой как точка с запятой.
- gdbm store вернул %d, errno %d, ключ "%s"
-
(S) Предупреждение из расширения GDBM_File о том, что хранение завершилось неудачно.
- gethostent не реализован
-
(F) Ваша C-библиотека, по-видимому, не реализует gethostent(), вероятно, потому, что если бы она это делала, она бы чувствовала моральную обязанность вернуть все имена хостов в интернете.
- get%sname() на закрытом сокете %s
-
(W закрыто) Вы попытались получить имя сокета или сокета-партнёра на закрытом сокете. Вы забыли проверить возвращаемое значение вызова socket()?
- getpwnam вернул недействительный UIC %#o для пользователя "%s"
-
(S) Предупреждение, специфичное для VMS. Вызов
sys$getuaiв основе оператораgetpwnamвернул недействительный UIC. - getsockopt() на закрытом сокете %s
-
(W закрыто) Вы попытались получить опцию сокета на закрытом сокете. Вы забыли проверить возвращаемое значение вызова socket()? См. "getsockopt" в perlfunc.
- given экспериментально
-
(S experimental::smartmatch)
givenзависит от smartmatch, который экспериментален, поэтому его поведение может измениться или быть удалено в любой будущей версии perl. См. объяснение в "Experimental Details on given and when" в perlsyn. - Глобальный символ "%s" требует явного имени пакета (вы забыли объявить "my %s"?)
-
(F) Вы использовали "use strict" или "use strict vars", что означает, что все переменные должны быть либо лексически охватываемыми (с помощью "my" или "state"), объявленными предварительно с помощью "our", или явно квалифицированы для указания пакета, в котором находится глобальная переменная (с помощью "::").
- glob не удалось (%s)
-
(S glob) Произошла ошибка с внешними программами, используемыми для
globи<*.c>. Обычно это означает, что вы указали шаблонglob, который заставил внешнюю программу завершиться ошибкой с ненулевым статусом. Если сообщение указывает, что аномальное завершение привело к сбросу ядра, это также может означать, что ваш csh (C shell) сломан. В этом случае вам следует изменить все переменные, связанные с csh, в config.sh: Если у вас tcsh, сделайте так, чтобы переменные ссылались на него как на csh (например,full_csh='/usr/bin/tcsh'); в противном случае сделайте их все пустыми (за исключением того, чтоd_cshдолжно быть'undef'), чтобы Perl думал, что csh отсутствует. В любом случае, после редактирования config.sh, запустите./Configure -Sи перестройте Perl. - Glob не завершён
-
(F) Лексер увидел левую угловую скобку в месте, где ожидал термина, поэтому ищет соответствующую правую угловую скобку, и не находит её. Скорее всего, вы опустили необходимые скобки ранее в строке, и имели в виду "меньше чем".
- gmtime(%f) не удалось
-
(W переполнение) Вы вызвали
gmtimeс числом, с которым он не мог справиться: слишком большим, слишком маленьким или NaN. Возвращённое значениеundef. - gmtime(%f) слишком большой
-
(W переполнение) Вы вызвали
gmtimeс числом, которое было больше, чем он может надёжно обработать, иgmtime, вероятно, вернул неправильную дату. Это предупреждение также срабатывает при NaN (специальное значение не число). - gmtime(%f) слишком мал
-
(W переполнение) Вы вызвали
gmtimeс числом, которое было меньше, чем он может надёжно обработать, иgmtime, вероятно, вернул неправильную дату. - Ошибка от DosAllocMem
-
(P) Ошибка, специфичная для OS/2. Вероятно, вы используете устаревшую версию Perl, и этого не должно происходить.
- goto должен иметь метку
-
(F) В отличие от "next" или "last", вы не можете перейти к неопределённой цели. См. "goto" в perlfunc.
- Переход к неопределённой подпрограмме%s
-
(F) Вы пытались вызвать подпрограмму с синтаксисом
goto &sub, но указанная подпрограмма не определена, или, если она была определена, она с тех пор была удалена. - Имя группы должно начинаться с символа слова, не являющегося цифрой, в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) Имена групп должны соответствовать правилам идентификаторов perl, то есть они должны начинаться с символа слова, не являющегося цифрой. Распространённой причиной этой ошибки является использование (?&0) вместо (?0). См. perlre.
- Группа () начинается с счётчика
-
(F) Группа () началась со счётчика. Счётчик должен следовать за чем-то: символом шаблона или группой (). См. "pack" в perlfunc.
- %s имел ошибки компиляции.
-
(F) Конечное сообщение об ошибке, когда
perl -cтерпит неудачу. - Пришлось неожиданно создать %s
-
(S внутреннее) Процедура запросила символ из таблицы символов, который должен был уже существовать, но по какой-то причине его не было, и его пришлось создать в экстренном порядке, чтобы предотвратить сбой ядра.
- %s содержит слишком много ошибок
-
(F) Парсер прекратил попытки парсинга программы после 10 ошибок. Дальнейшие сообщения об ошибках, вероятно, будут неинформативными.
- Шестнадцатеричное число с плавающей запятой: переполнение показателя
-
(W переполнение) Шестнадцатеричное число с плавающей запятой имеет больший показатель, чем поддерживает число с плавающей запятой.
- Шестнадцатеричное число с плавающей запятой: подпороговое значение показателя
-
(W переполнение) Шестнадцатеричное число с плавающей запятой имеет меньший показатель, чем поддерживает число с плавающей запятой. В случае с плавающей запятой IEEE 754 это также может означать, что используются поднормальные числа (ранее известные как денермализированные), что может быть или не быть ошибкой.
- Шестнадцатеричное число с плавающей запятой: внутренняя ошибка (%s)
-
(F) Что-то ужасно пошло не так при обработке шестнадцатеричного числа с плавающей запятой.
- Шестнадцатеричное число с плавающей запятой: переполнение мантиссы
-
(W переполнение) Шестнадцатеричная константа с плавающей запятой имела больше бит в мантиссе (часть между 0x и показателем, также известная как дробь или значащая часть) чем поддерживает число с плавающей запятой.
- Шестнадцатеричное число с плавающей запятой: потеря точности
-
(W переполнение) Шестнадцатеричное число с плавающей запятой имело внутренне больше цифр, чем можно вывести. Это может быть вызвано неподдерживаемыми форматами long double или отсутствием 64-битных целых чисел (необходимых для получения цифр при некоторых конфигурациях).
- Шестнадцатеричное число с плавающей запятой: неподдерживаемый формат long double
-
(F) Вы настроили Perl для использования long double, но внутренний формат long double неизвестен; поэтому вывод шестнадцатеричного числа с плавающей запятой невозможен.
- Шестнадцатеричное число > 0xffffffff не переносимо
-
(W переносимость) Указанное вами шестнадцатеричное число больше, чем 2**32-1 (4294967295), и поэтому не переносимо между системами. См. perlport для получения дополнительной информации о проблемах переносимости.
- Идентификатор слишком длинный
-
(F) Perl ограничивает идентификаторы (имена переменных, функций и т. д.) примерно 250 символами для простых имён и несколько больше для составных имён (например,
$A::B). Вы превысили лимит Perl. В будущих версиях Perl, вероятно, будут устранены эти произвольные ограничения. - Игнорирование нулевой длины \N{} в классе символов в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(W regexp) Имена Unicode-символов (
\N{...}) могут возвращать последовательность нулевой длины. При использовании такого escape-последовательности в классе символов его поведение не определено. Проверьте, что использована правильная escape-последовательность и корректный обработчик charname. - Неправильная %s цифра '%c' проигнорирована
-
(W цифра) Здесь
%s- это "двоичная", "восьмеричная" или "шестнадцатеричная". Вы, возможно, попытались использовать цифру, отличную от разрешённой для данного типа, например, только 0 и 1 для двоичной системы. Для восьмеричных чисел это поднимается только если некорректный символ - '8' или '9'. Для шестнадцатеричных чисел 'A' - 'F' и 'a' - 'f' допустимы. Интерпретация числа прекратилась незадолго до ошибочной цифры или символа. - Неправильная двоичная цифра '%c'
-
(F) Вы использовали цифру, отличную от 0 или 1, в двоичном числе.
- Неправильный символ после '_' в прототипе для %s : %s
-
(W illegalproto) В объявлении прототипа был найден некорректный символ. '_' в прототипе должен следовать за ';', что указывает на то, что остальные параметры необязательны, или одним из '@' или '%', так как эти два будут принимать 0 или более конечных параметров.
- Неправильный символ \%o (возврат каретки)
-
(F) Perl обычно рассматривает возвраты каретки в тексте программы как любой другой пробел, что означает, что вы никогда не должны видеть эту ошибку, когда Perl был скомпилирован с использованием стандартных опций. По какой-то причине ваша версия Perl, похоже, была скомпилирована без этой поддержки. Обратитесь к вашему системному администратору Perl.
- Некорректный символ после сигила в сигнатуре подпрограммы
-
(F) В параметре подписи подпрограммы после символа
$,@или%обнаружен неожиданный символ. Обычно после символа должен следовать имя переменной или=и т. д. Возможно, вы пытаетесь использовать прототип в области действияuse feature 'signatures'? Например:sub foo ($$) {} # legal - a prototype use feature 'signatures; sub foo ($$) {} # illegal - was expecting a signature sub foo ($a, $b) :prototype($$) {} # legal - Неверный символ в прототипе для %s : %s
-
(W illegalproto) В объявлении прототипа найден недопустимый символ. Допустимыми символами в прототипах являются $, @, %, *, ;, [, ], &, \, и +. Возможно, вы пытались написать подпись подпрограммы, но не включили эту функцию предварительно (
use feature 'signatures'), поэтому ваша подпись была интерпретирована как недопустимый прототип. - Недопустимое объявление анонимной подпрограммы
-
(F) При использовании ключевого слова
subдля создания анонимной подпрограммы необходимо всегда указывать блок кода. См. perlsub. - Недопустимое объявление подпрограммы %s
-
(F) Подпрограмма была объявлена некорректно. См. perlsub.
- Недопустимое деление на ноль
-
(F) Вы попытались разделить число на 0. Возможно, в вашей логике есть ошибка, или вам нужно добавить условное выражение для предотвращения бессмысленного ввода.
- Недопустимое взятие остатка от деления на ноль
-
(F) Вы попытались разделить число на 0, чтобы получить остаток. Большинство чисел к этому не склонны.
- Неверное количество битов в vec
-
(F) Количество битов в vec() (третий аргумент) должно быть степенью двойки от 1 до 32 (или 64, если ваша платформа поддерживает это).
- Недопустимая восьмеричная цифра '%c'
-
(F) Вы использовали 8 или 9 в восьмеричном числе.
- Недопустимый оператор после параметра в подписи подпрограммы
-
(F) После параметра в подписи подпрограммы был обнаружен символ, отличный от
=для указания значения по умолчанию,,или).use feature 'signatures'; sub foo ($=1) {} # legal sub foo ($a = 1) {} # legal sub foo ($a += 1) {} # illegal sub foo ($a == 1) {} # illegal - Недопустимый шаблон в регулярном выражении; помечено <-- ЗДЕСЬ в m/%s/
-
(F) Вы написали что-то вроде
(?+foo)"+"допустимо только в сочетании с цифрами, указывающими на группу захвата. См.(?PARNO). - Недопустимый скрипт с привилегиями root
-
(F) Скрипт, запущенный с привилегиями root, каким-то образом был недопустимым.
- Недопустимый переключатель в PERL5OPT: -%c
-
(X) Переменная среды PERL5OPT может использоваться только для задания следующих переключателей: -[CDIMUdmtw].
- Неверное имя пользовательского свойства
-
(F) Вы указали имя свойства, похожее на Unicode, в шаблоне регулярного выражения (используя
\p{}или\P{}), которое Perl не распознает как официальное свойство Unicode. Вероятно, вы имели в виду имя пользовательского свойства, но оно не может быть таким, так как оно должно начинаться сInилиIs. Проверьте правильность написания. См. также "Не удалось найти определение свойства Unicode "%s"". - Некорректное значение среды CRTL "%s"
-
(W internal) Предупреждение, характерное для VMS. Perl попытался прочитать внутренний массив среды CRTL и встретил элемент без разделителя
=, используемого для разделения ключей и значений. Элемент проигнорирован. - Некорректное сообщение в prime_env_iter: |%s|
-
(W internal) Предупреждение, характерное для VMS. Perl пытался прочитать логическое имя или определение символа CLI при подготовке к итерации по %ENV и не обнаружил ожидаемого разделителя между ключом и значением, поэтому строка была проигнорирована.
- (при очистке) %s
-
(W misc) Этот префикс обычно указывает на то, что метод DESTROY() вызвал указанное исключение. Поскольку деструкторы обычно вызываются системой в произвольные моменты выполнения и часто многократно, предупреждение выдаётся только один раз для любого числа сбоев, которые в противном случае привели бы к повторению одного и того же сообщения.
Неудачные пользовательские обратные вызовы, отправленные с помощью флага
G_KEEPERR, также могут привести к этому предупреждению. См. "G_KEEPERR" в perlcall. - Неполное выражение в '(?[ ])' в регулярном выражении; помечено <-- ЗДЕСЬ в m/%s/
-
(F) В
(?[ ])была синтаксическая ошибка. Это может произойти, если выражение внутри конструкции было полностью пустым или если слишком много или слишком мало операндов для количества операторов. Perl недостаточно умён, чтобы предоставить более точное указание на ошибку. - Несогласованная иерархия при слиянии класса '%s' по методу C3: слияние не удалось для родительского класса '%s'
-
(F) Порядок разрешения методов (MRO) данного класса не соответствует стандарту C3, и вы включили MRO C3 для этого класса. Подробнее об MRO C3 см. в документации mro.
- Отступ на строке %d документа here не соответствует разделителю
-
(F) У вас есть отступы в документе here, где на одной или нескольких строках имеются начальные пробелы, не соответствующие закрывающему разделителю.
Например, строка 2 ниже неверна, потому что у неё нет хотя бы 2 пробелов, но строки 1 и 3 в порядке, поскольку в них есть хотя бы 2 пробела:
if ($something) { print <<~EOF; Line 1 Line 2 not Line 3 EOF }Обратите внимание, что табуляции и пробелы сравниваются строго, т.е. 1 табуляция не эквивалентна 8 пробелам.
- Бесконечная рекурсия в регулярном выражении
-
(F) Вы использовали шаблон, который ссылается на себя без потребления входного текста. Вам следует проверить шаблон, чтобы убедиться, что рекурсивные шаблоны либо потребляют текст, либо терпят неудачу.
- Бесконечная рекурсия в пользовательском свойстве
-
(F) Пользовательское свойство ("Пользовательские свойства символов" в perlunicode) может зависеть от определений других пользовательских свойств. Если цепочка зависимостей возвращается к этому свойству, произойдёт бесконечная рекурсия, если бы не проверка, которая выявила эту ошибку.
Перестройте определения свойств, чтобы избежать этого.
- Бесконечная рекурсия из-за пустого шаблона
-
(F) Вы попытались использовать пустой шаблон внутри блока кода регулярного выражения, например
/(?{ s!!! })/, что привело к повторному выполнению того же шаблона, что является бесконечным циклом, прерванным сбросом исключения. - Инициализация переменных состояния в списке запрещена
-
(F)
stateдопускает инициализацию только одной переменной, указанной без скобок. Таким образом,state $a = 42иstate @a = qw(a b c)разрешены, но неstate ($a) = 42или(state $a) = 42. Чтобы инициализировать более одной переменнойstate, инициализируйте их по одной. - %%s[%s] в скалярном контексте лучше записать как $%s[%s]
-
(W 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() или конвейный open в скрипте с привилегиями root или в скрипте с правами группы, если
$ENV{PATH}содержит каталог, доступный для записи всем. Кроме того, PATH не должен содержать относительных каталогов. Подробности см. в perlsec. - Небезопасное использование $ENV{%s} при запуске %s
-
(F) Вы не можете использовать system(), exec() или конвейный open в скрипте с привилегиями 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) Шестнадцатеричное, восьмеричное или двоичное число, которое вы указали либо как литерал, либо как аргумент к hex() или oct(), слишком велико для вашей архитектуры и было преобразовано в число с плавающей точкой. В 32-битной архитектуре наибольшее шестнадцатеричное, восьмеричное или двоичное число, представимое без переполнения, составляет соответственно 0xFFFFFFFF, 037777777777 или 0b11111111111111111111111111111111. Обратите внимание, что Perl прозрачно преобразует все числа во внутреннее представление с плавающей точкой, подвергая последующие операции ошибкам потери точности.
- Целочисленное переполнение в srand
-
(Переполнение S) Число, которое вы передали в srand, слишком велико, чтобы поместиться в целочисленном представлении вашей архитектуры. Число было заменено на наибольшее поддерживаемое целое число (0xFFFFFFFF в 32-битных архитектурах). Это означает, что вы можете получить меньше случайности, чем ожидаете, потому что различные случайные семена выше максимума будут возвращать одну и ту же последовательность случайных чисел.
- Переполнение целого числа в версии
- Переполнение целого числа в версии %d
-
(Переполнение W) Некоторая часть инициализации версии слишком велика для размера целых чисел вашей архитектуры. Это не предупреждение, потому что нет рациональной причины, чтобы версия пыталась использовать элемент больше, чем обычно 2**32. Это обычно вызвано попыткой использовать какое-то необычное математическое выражение в качестве версии, например 100/9.
- Внутренняя ошибка в парсере регулярных выражений; отмечено <-- ЗДЕСЬ в m/%s/
-
(P) Что-то пошло очень не так в парсере регулярных выражений. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема.
- Внутреннее несоответствие при отслеживании vforks
-
(S) Предупреждение, характерное для VMS. Perl отслеживает количество раз, когда вы вызывали
forkиexec, чтобы определить, должно ли текущее вызовexecвлиять на текущий скрипт или дочерний процесс (см. "exec LIST" в perlvms). Как-то это счётчик был нарушен, поэтому Perl делает предположение и рассматривает этоexecкак запрос на завершение скрипта Perl и выполнение указанной команды. - внутренний %<num>p может конфликтовать с будущими расширениями printf
-
(S внутренний) Внутренняя процедура Perl, обрабатывающая
printfиsprintfформатирование, следует немного другим правилам, когда вызывается из кода C или XS. В частности, форматы, состоящие из цифр, за которыми следует "p" (например, "%7p"), зарезервированы для будущего использования. Если вы видите это сообщение, модуль XS пытался вызвать эту процедуру с одним из таких зарезервированных форматов. - Внутренняя ошибка в парсере регулярных выражений; отмечено <-- ЗДЕСЬ в m/%s/
-
(P) Что-то серьёзно пошло не так в парсере регулярных выражений. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема.
- %s (...) интерпретируется как функция
-
(W синтаксис) Вы нарушили правило, согласно которому любой оператор списка, за которым следуют скобки, превращается в функцию, а все аргументы операторов списка находятся внутри скобок. См. "Элементы и операторы списков (влево)" в perlop.
- В '(?...)', '(' и '?' должны быть смежными в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) Последовательность из двух символов
"(?"в этом контексте в шаблоне регулярного выражения должна быть неделимым токеном, без чего-либо между"("и"?", но вы их разделили пробелом. - В '(*...)', '(' и '*' должны быть смежными в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) Последовательность из двух символов
"(*"в этом контексте в шаблоне регулярного выражения должна быть неделимым токеном, без чего-либо между"("и"*", но вы их разделили. Исправьте шаблон и повторите попытку. - Недопустимый атрибут %s: %s
-
(F) Указанный атрибут для подпрограммы или переменной не был распознан Perl или пользовательским обработчиком. См. атрибуты.
- Недопустимые атрибуты %s: %s
-
(F) Указанные атрибуты для подпрограммы или переменной не были распознаны Perl или пользовательским обработчиком. См. атрибуты.
- Недопустимый символ в определении псевдонима charnames; отмечено <-- ЗДЕСЬ в '%s
-
(F) Вы пытались создать пользовательский псевдоним для имени символа, с помощью параметра
:aliasкuse charnames, и указанный символ в указанном имени не является допустимым. См. "Пользовательские псевдонимы" в charnames. - Недопустимый символ \0 в %s для %s: %s\0%s
-
(W вызовы систем) Встроенные символы \0 в именах путей или других аргументах вызовов систем вызывают предупреждение начиная с версии 5.20. Части после \0 ранее игнорировались системными вызовами.
- Недопустимый символ в \N{...}; отмечено <-- ЗДЕСЬ в \N{%s}
-
(F) Только определённые символы являются допустимыми для имён символов. Указанный символ не является допустимым. См. "Пользовательские псевдонимы" в charnames.
- Недопустимое преобразование в %s: "%s"
-
(W printf) Perl не понимает заданное преобразование формата. См. "sprintf" в perlfunc.
- Недопустимый escape-код в указанной кодировке в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(W regexp)(F) Числовой escape-код (например
\xHH) со значением < 256 не соответствует одному символу после преобразования из кодировки, заданной директивой кодировки. Вместо этого escape-код был заменён символом ЗАМЕЩЕНИЯ (U+FFFD), за исключением случаев внутри(?[ ]), где это является фатальной ошибкой. <-- ЗДЕСЬ показывает место в регулярном выражении, где был обнаружен escape-код. - Недопустимое шестнадцатеричное число в \N{U+...}
- Недопустимое шестнадцатеричное число в \N{U+...} в регулярном выражении; отмечено <-- ЗДЕСЬ в 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. Отрицательные числа не являются допустимыми номерами символов, поэтому возвращается символ Unicode замены (U+FFFD). - Недопустимое число '%s' для параметра -C.
-
(F) Вы указали число для параметра -C, которое либо имеет лишние ведущие нули, либо превышает представление беззнакового целого числа Perl.
- Недопустимый параметр -D%c, используйте -D'' для просмотра вариантов
-
(S отладка) Perl был вызван с недопустимыми флагами отладчика. Вызовите perl с параметром -D без флагов, чтобы увидеть список допустимых значений. См. также "-Dletters" в perlrun.
- Недопустимый квантификатор в {,} в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) Шаблон похож на квантификатор {min,max}, но min или max не могут быть распарсены как допустимое число — либо оно имеет ведущие нули, либо представляет собой слишком большое число. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.
- Недопустимый диапазон [] "%s" в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) Указанный диапазон в классе символов имел минимальный символ, больший, чем максимальный. Возможный вариант — вы забыли
{}из вашего заключительного\x{}-\xбез фигурных скобок может быть только доff. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема. См. perlre. - Недопустимый диапазон "%s" в операторе транслитерации
-
(F) Указанный диапазон в операторе tr/// или y/// имел минимальный символ, больший, чем максимальный. См. perlop.
- Недопустимая ссылка на группу в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) Указанная вами группа захвата не может существовать, потому что используемое число не входит в допустимый диапазон для этой машины.
- Недопустимый разделительный символ %s в списке атрибутов
-
(F) В списке атрибутов было обнаружено нечто иное, кроме двоеточия или пробела между элементами. Возможно, список параметров в предыдущем атрибуте был завершен преждевременно. См. атрибуты.
- Недопустимый разделитель %s в спецификации слоя PerlIO %s
-
(Слой W) При добавлении слоев в систему Perl I/O между элементами списка слоев было обнаружено нечто иное, кроме двоеточия или пробела. Возможно, список параметров в предыдущем атрибуте был завершен преждевременно.
- Недопустимый формат версии «строгий» (%s)
-
(F) Номер версии не соответствует критериям «строгой» версии. «Строгий» номер версии — это положительное десятичное число (целое или с дробной частью) без показательной записи или же строка с точками и десятичными знаками, начинающаяся с символа 'v' и содержащая не менее трёх компонентов. Текст в скобках указывает, какие критерии не были соблюдены. Для получения дополнительной информации об разрешенных форматах версий см. модуль version.
- Недопустимый тип '%s' в %s
-
(F) Указанный символ не является допустимым типом для pack или unpack. См. "pack" в perlfunc.
(W) Указанный символ не является допустимым типом для pack или unpack, но ранее игнорировался без предупреждений.
- Недопустимый формат версии (%s)
-
(F) Номер версии не соответствует критериям «свободной» версии. «Свободный» номер версии — это положительное десятичное число (целое или с дробной частью) без показательной записи или же строка с точками и десятичными знаками. Если строка с точками и десятичными знаками содержит менее трёх компонентов, она должна начинаться с символа 'v'. В противном случае, символ 'v' в начале необязателен. Как десятичные, так и версии с точками и десятичными знаками могут иметь конечный компонент «альфа», отделённый символом подчёркивания от дробной или компонента с точками и десятичными знаками. Текст в скобках указывает, какие критерии не были соблюдены. Для получения дополнительной информации об разрешенных форматах версий см. модуль version.
- Недопустимый объект версии
-
(F) Внутренняя структура объекта версии была неверна. Возможно, внутренние данные были изменены непосредственно каким-либо способом или в класс «version» был благословлён произвольная ссылка.
- В '(*VERB...)', символы '(' и '*' должны быть смежными в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
- Инвертирование класса символов, содержащего многосимвольную последовательность, недопустимо в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) Вы написали что-то вроде
qr/\P{name=KATAKANA LETTER AINU P}/ qr/[^\p{name=KATAKANA LETTER AINU P}]/Это имя фактически оценивается как последовательность двух символов катаканы, а не как один, и попытка получить дополнение к последовательности недопустима. (Математически это означало бы любую последовательность символов длиной от 0 до бесконечности, которая не была этими двумя подряд, и это, вероятно, не будет иметь реального практического применения.)
(F) Двухсимвольная последовательность
"(*"в этом контексте в шаблоне регулярного выражения должна быть неделимым токеном, без чего-либо между"("и"*", но вы их разделили. - ioctl не реализован
-
(F) Похоже, на вашей машине не реализована функция ioctl(), что довольно странно для машины, поддерживающей C.
- ioctl() на неоткрытом %s
-
(W неоткрытый) Вы использовали ioctl() для дескриптора файла, который никогда не был открыт. Проверьте поток управления и количество аргументов.
-
(F) Ваш Perl не был сконфигурирован для использования PerlIO, и поэтому вы не можете использовать слои ввода-вывода. Для использования PerlIO Perl должен быть сконфигурирован с опцией 'useperlio'.
- IO::Socket::atmark не реализован на этой архитектуре
-
(F) На вашей машине не реализована функция sockatmark(), ни как системный вызов, ни как вызов ioctl (SIOCATMARK).
- '%s' — неизвестный тип связи в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) Вы использовали
\b{...}или\B{...}и...не известно Perl. Текущие допустимые значения указаны в "\b{}, \b, \B{}, \B" в perlrebackslash. - %s запрещён — совпадает с пустой строкой многократно в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) Указанный шаблон может привести к бесконечной работе регулярного выражения, поэтому он запрещён. <-- ЗДЕСЬ показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.
- %s() запрещено для дескрипторов :utf8
-
(F) Операторы sysread(), recv(), syswrite() и send() не допускаются для дескрипторов, имеющих слой
:utf8, как явно, так и неявно, например, со слоем:encoding(UTF-16LE).Ранее sysread() и recv() использовали только флаг
:utf8для потока, игнорируя фактические слои. Так как sysread() и recv() не выполняли валидацию UTF-8, они могли создавать скаляры с некорректным кодированием.Аналогично, syswrite() и send() использовали только флаг
:utf8, в противном случае игнорируя слои. Если флаг был установлен, оба оператора записывали значение в кодировке UTF-8, даже если слой имел другую кодировку, например, как в примере выше.В идеале, все эти операторы должны полностью игнорировать состояние
:utf8, работая только с байтами, но это привело бы к молчаливому нарушению существующего кода. - "%s" яснее записывается как "%s" в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(W regexp) (только при
use re 'strict'или внутри(?[...]))Вы указали символ, у которого есть более простая запись, которая также портируется на платформы с различными кодировками символов.
- $* больше не поддерживается начиная с Perl 5.30
-
(F) Специальная переменная
$*, устаревшая в более ранних версиях Perl, была удалена в версии 5.10.0, больше не поддерживается и является фатальной ошибкой начиная с Perl 5.30. В предыдущих версиях Perl использование$*включало или отключало многострочное соответствие внутри строки.Вместо использования
$*следует использовать модификаторы регулярных выражений/m(и, возможно,/s). Вы можете включить/mдля лексической области видимости (даже всего файла) с помощьюuse re '/m'. (В более старых версиях: когда$*было установлено в истинное значение, все регулярные выражения вели себя так, как будто они были написаны с использованием/m.)Использование этой переменной будет фатальной ошибкой в Perl 5.30.
- $# больше не поддерживается начиная с Perl 5.30
-
(F) Специальная переменная
$#, устаревшая в более ранних версиях Perl, была удалена с версии 5.10.0, больше не поддерживается и является фатальной ошибкой начиная с Perl 5.30. Следует использовать функции printf/sprintf. - '%s' не является ссылкой на код
-
(W overload) Второй (четвёртый, шестой, ...) аргумент overload::constant должен быть ссылкой на код. Либо анонимная подпрограмма, либо ссылка на подпрограмму.
- '%s' — не тип, допускающий перегрузку
-
(W overload) Вы попытались перегрузить константный тип, о котором пакет overload не знает.
- isa — экспериментальная функция
-
(S experimental::isa) Это предупреждение выдаётся, если вы используете оператор (
isa). Этот оператор сейчас находится в стадии разработки, и его поведение может измениться в будущих выпусках Perl. - Флаг -i использован без имён файлов в командной строке, чтение из STDIN
-
(S inplace) Флаг
-iбыл передан в командной строке, указывая, что сценарий предназначен для изменения файлов на месте, но файлы не были указаны. Это, как правило, ошибка, так как изменение STDIN на месте не имеет смысла и может быть неоднозначным, так как может показаться, что Perl завис, когда он на самом деле пытается прочитать STDIN. Вам следует либо передать имя файла для редактирования, либо удалить-iиз командной строки. Для получения дополнительной информации см. perlrun. - Мусор в конце регулярного выражения в m/%s/
-
(P) Парсер регулярных выражений сбит.
- \K запрещено в утверждениях lookahead/lookbehind в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) В вашем регулярном выражении использовался
\Kв утверждениях lookahead или lookbehind, что в настоящее время запрещено.Это может измениться в будущем, см. Support \K in lookarounds.
- Метка не найдена для "last %s"
-
(F) Вы дали имя цикла для выхода, но вы не находитесь в цикле с таким именем, даже не учитывая вызовы. См. "last" в perlfunc.
- Метка не найдена для "next %s"
-
(F) Вы дали имя цикла для продолжения, но вы не находитесь в цикле с таким именем, даже не учитывая вызовы. См. "last" в perlfunc.
- Метка не найдена для "redo %s"
-
(F) Вы дали имя цикла для перезапуска, но вы не находитесь в цикле с таким именем, даже не учитывая вызовы. См. "last" в perlfunc.
- Не удалось изменить эффективные права доступа %s
-
(F) При использовании директивы
use filetest, изменение реальных и эффективных идентификаторов пользователя или группы не удалось. - Длина/код после конца строки в 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 в регулярных выражениях; помечено <-- ЗДЕСЬ в m/%s/
-
(F) (только при использовании
use re 'strict'или внутри(?[...]))Вероятно, вы забыли модификатор
/xили допущена опечатка в шаблоне. Например, вы действительно хотели сопоставить символ перевода страницы? Если да, все ASCII-символы вертикального пробела могут быть представлены последовательностями escape, что не будет выглядеть столь резко, как ваш шаблон при отображении.\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 локаль) Вы используете локаль 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 локаль) Вы используете именованную локаль, которая не UTF-8, и Perl определил, что она не полностью совместима с тем, что он может обрабатывать. Вторая
%sсодержит причину.Наиболее распространённой причиной является то, что локаль содержит символы, которые представляются более чем одним байтом. Perl может обрабатывать только такие локали UTF-8. Скорее всего, указанная локаль — локаль для языка Восточной Азии, например, китайского или японского, не UTF-8. Если локаль является надмножеством ASCII, её ASCII-часть может работать в Perl.
Некоторые устаревшие локали, которые не являются надмножествами ASCII, в основном локали ISO 646 или другие 7-битные локали, такие как ASMO 449, также могут иметь проблемы, в зависимости от того, какие части ASCII-набора символов изменяются локалью и используются программой. Сообщение предупреждения перечисляет обнаруживаемые конфликтующие символы.
Обратите внимание, что не все несовместимости обнаружены.
Если это произойдёт с вами, вы можете только переключиться на другую локаль или использовать Encode для перевода из локали в UTF-8; если это непрактично, вас предупредили, что некоторые вещи могут сломаться.
Это сообщение выводится каждый раз, когда плохая локаль переключается в пределах области действия
use locale, или при первом возможном влиянии операции, еслиuse localeунаследовала плохую локаль. Оно не генерируется для операций из модуля POSIX. - localtime(%f) не удалось
-
(W переполнение) Вы вызвали
localtimeс числом, с которым он не может справиться: слишком большое, слишком маленькое или NaN. Возвращаемое значение —undef. - localtime(%f) слишком большое
-
(W переполнение) Вы вызвали
localtimeс числом, которое больше, чем он может надёжно обработать, иlocaltime, вероятно, вернул неправильную дату. Это предупреждение также срабатывает при NaN (специальном значении «не число»). - localtime(%f) слишком маленькое
-
(W переполнение) Вы вызвали
localtimeс числом, которое меньше, чем он может надёжно обработать, иlocaltime, вероятно, вернул неправильную дату. - Обратный поиск длиной более %d не реализован в регулярном выражении m/%s/
-
(F) В настоящее время существует ограничение на длину строки, которую может обработать обратный поиск. Это ограничение может быть смягчено в будущих версиях.
- Потеря точности при %s %f на 1
-
(W неточность) Вы пытались увеличить или уменьшить значение на единицу, но результат слишком велик для точного хранения в представлении с плавающей точкой. Таким образом, цель
++или--увеличивается или уменьшается на значение, отличное от единицы, например, на ноль (т.е. цель не изменяется) или на два из-за округления. Perl выводит это предупреждение, потому что он уже перешёл с целых чисел на числа с плавающей точкой, когда значения слишком велики для целых чисел, и теперь даже числа с плавающей точкой недостаточны. Вы можете переключиться на использование Math::BigInt явно. - lstat() на дескрипторе файла%s
-
(W ввод/вывод) Вы пытались выполнить lstat на файловом дескрипторе. Что вы имели в виду? lstat() имеет смысл только для имён файлов. (Perl выполнил fstat() для файлового дескриптора вместо этого.)
- Атрибут lvalue %s уже определён для подпрограммы
-
(W прочее) Хотя attributes.pm позволяет это, включение или выключение атрибута lvalue для подпрограммы Perl, которая уже определена, не всегда работает корректно. Он может или не может делать то, что вы хотите, в зависимости от кода внутри подпрограммы, и точные детали могут меняться между версиями Perl. Делайте это только в том случае, если вы действительно знаете, что делаете.
- Атрибут lvalue проигнорирован после определения подпрограммы
-
(W прочее) Использование синтаксиса
:lvalueдля определения подпрограммы Perl как подпрограммы lvalue после её определения не разрешено. Чтобы сделать подпрограмму подпрограммой lvalue, добавьте атрибут lvalue к определению или поместите объявлениеsub foo :lvalue;перед определением.См. также attributes.pm.
- Магические списковые константы не поддерживаются
-
(F) Вы присвоили магический массив элементу хранилища, а затем попытались использовать подпрограмму из того же слота. Вы просите Perl сделать то, что он не может, детали могут меняться между версиями Perl.
- Неправильный целочисленный тип в [] в pack
-
(F) Между скобками, содержащими числовой счётчик повторений, разрешены только цифры. См. "pack" в perlfunc.
- Неправильный целочисленный тип в [] в unpack
-
(F) Между скобками, содержащими числовой счётчик повторений, разрешены только цифры. См. "pack" в perlfunc.
- Неправильный PERLLIB_PREFIX
-
(F) Ошибка, специфичная для OS/2. PERLLIB_PREFIX должен иметь вид
prefix1;prefix2или prefix1 prefix2
при непустых prefix1 и prefix2. Если
prefix1— это префикс пути поиска встроенной библиотеки, prefix2 подставляется. Ошибка может возникнуть, если компоненты не найдены или слишком длинные. См. "PERLLIB_PREFIX" в perlos2. - Неправильный прототип для %s: %s
-
(F) Вы попытались использовать функцию с неправильным прототипом. Синтаксис прототипов функций проверяется на этапе компиляции для выявления явных ошибок, таких как недопустимые символы. Более строгая проверка выполняется при вызове функции. Возможно, автор функции пытался написать подпись подпрограммы, но сначала не активировал эту функцию (
use feature 'signatures'), поэтому подпись была интерпретирована как плохой прототип. - Некорректный символ UTF-8%s
-
(S utf8)(F) Perl обнаружил строку, которая должна быть UTF-8, но не соответствует правилам кодирования UTF-8 или представляет собой код, значение которого не помещается в размер слова текущей платформы (переполнение). Подробности о точной некорректности приведены в переменной
%s, которая является частью сообщения.Возможной причиной является то, что вы установили флаг UTF8 для данных, которые, как вы думали, были в UTF-8, но это не так (например, это были данные с 8-битным кодированием наследия). Чтобы защититься от этого, вы можете использовать
Encode::decode('UTF-8', ...).Если вы используете PerlIO-слой
:encoding(UTF-8)для ввода, некорректные последовательности байтов обрабатываются корректно, но если вы используете:utf8, флаг устанавливается без проверки данных, что может привести к этому сообщению об ошибке.См. также "Обработка поврежденных данных" в Encode.
- Некорректная UTF-8 строка, возвращённая \N{%s} сразу после '%s'
-
(F) Обработчик charnames вернул некорректную UTF-8 строку.
- Некорректная UTF-8 строка в "%s"
-
(F) Это сообщение указывает на ошибку либо в ядре Perl, либо в коде XS. Такой код пытался определить, является ли символ, предположительно закодированный внутри как UTF-8, определённого типа, например, пунктуацией или цифрой. Но символ не был закодирован в соответствии с правилами UTF-8.
%sзаменяется строкой, которую знающие люди могут использовать, чтобы определить, какой тип проверялся.Передача повреждённых строк была устаревшей в Perl 5.18 и стала фатальной в Perl 5.26.
- Некорректная UTF-8 строка в формате '%c' в unpack
-
(F) Вы попытались распаковать что-то, что не соответствует правилам кодирования UTF-8, и Perl не смог определить, как продолжить.
- Некорректная UTF-8 строка в pack
-
(F) Вы попытались упаковать что-то, что не соответствует правилам кодирования UTF-8, и Perl не смог определить, как продолжить.
- Некорректная UTF-8 строка в unpack
-
(F) Вы попытались распаковать что-то, что не соответствует правилам кодирования UTF-8, и Perl не смог определить, как продолжить.
- Некорректный суррогат UTF-16
-
(F) Perl посчитал, что он считывает данные символов, закодированные в UTF-16, но при этом встретил некорректный суррогат Unicode.
- Обязательный параметр следует за необязательным параметром
-
(F) В сигнатуре подпрограммы вы написали что-то вроде "$a = undef, $b", сделав предыдущий параметр необязательным, а последующий — обязательным. Параметры заполняются слева направо, поэтому вызывающей стороне невозможно пропустить предыдущий и передать последующий. Если вы хотите действовать так, как если бы параметры заполнялись справа налево, объявите самый правый параметр необязательным, а затем переставьте параметры в теле подпрограммы.
- Сопоставление не-Unicode кода 0x%X со свойством Unicode; возможно, не переносимо
-
(S non_unicode) Perl позволяет строкам содержать супермножество кодов Unicode; каждый код может быть так же велик, как хранится в знаковом целом числе вашей системы, но они могут не быть приняты другими языками/системами. Это сообщение возникает, когда вы сопоставили строку, содержащую такой код, с шаблоном регулярного выражения, и код был сопоставлен со свойством Unicode,
\p{...}или\P{...}. Свойства Unicode определены только для кодов Unicode, поэтому результат этого соответствия не определен в Unicode, но Perl (начиная с версии 5.20) обрабатывает не-Unicode коды, как если бы они были типичными неназначенными кодами Unicode, и соответствовал этому в соответствии. В "Свойства, доступные через \p{} и \P{}" в perluniprops указано, соответствуют ли эти коды данным свойствам или нет.Это сообщение подавляется (если только оно не было сделано фатальным), если это несущественно для результатов сопоставления, является ли код Unicode или нет. Например, свойство
\p{ASCII_Hex_Digit}может соответствовать только 22 символам[0-9A-Fa-f], поэтому очевидно, что все остальные коды, Unicode или нет, не будут соответствовать ему. (И\P{ASCII_Hex_Digit}будет соответствовать каждому коду, кроме этих 22.)Получение этого сообщения указывает на то, что результат сопоставления, вероятно, должен был быть обратным тому, что фактически произошло. Если вы думаете, что это так, вы можете сделать категорию предупреждений
non_unicodeфатальной; если вы согласны с решением Perl, вы можете отключить эту категорию.См. "За пределами кодов Unicode" в 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) В то время как некоторые функции позволяют указать дескриптор файла или «косвенный объект» перед списком аргументов, это не относится к ним.
- Отсутствует команда в командном конвейере open
-
(W pipe) Вы использовали конструкцию
open(FH, "| command")илиopen(FH, "command |"), но команда отсутствовала или была пустой. - Отсутствует имя управляющего символа в \c
-
(F) Строка двойных кавычек закончилась на "\c" без требуемого имени управляющего символа.
- Отсутствует ']' в прототипе для %s : %s
-
(W illegalproto) Группировка началась с
[, но никогда не закрылась с]. - Отсутствует имя в "%s sub"
-
(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 2PerlIO::scalar также выведет это сообщение как предупреждение, если вы попытаетесь открыть скаляр только для чтения для записи.
- Попытка изменения значения массива, которое нельзя создать, %s
-
(F) Вы попытались создать значение массива, и индекс, скорее всего, был отрицательным, даже считая от конца массива назад.
- Попытка изменения значения хеша, которое нельзя создать, %s
-
(P) Вы попытались создать значение хеша, и его невозможно было создать по какой-то странной причине.
- Имя модуля должно быть константой
-
(F) В качестве первого аргумента к "use" разрешено только имя модуля в виде имени.
- Имя модуля требуется с опцией -%c
-
(F) Опции
-Mили-mуказывают, что Perl должен загрузить модуль, но вы опустили имя модуля. Обратитесь к perlrun для получения полной информации об опциях-Mи-m. - Более одного аргумента для открытия функции '%s'
-
(F) Функции
openбыло предложено открыть несколько файлов. Это может произойти, если вы пытаетесь открыть канал к команде, которая принимает список аргументов, но забыли указать режим открытия через канал. См. "open" в perlfunc для получения подробностей. - mprotect для строки COW %p %u завершился с ошибкой %d
-
(S) Вы скомпилировали Perl с -DPERL_DEBUG_READONLY_COW (см. "Копирование при записи" в perlguts), но общий буфер строки не смог стать только для чтения.
- mprotect для %p %u завершился с ошибкой %d
-
(S) Вы скомпилировали Perl с -DPERL_DEBUG_READONLY_OPS (см. perlhacktips), но дерево операций не удалось сделать только для чтения.
- mprotect RW для строки COW %p %u завершился с ошибкой %d
-
(S) Вы скомпилировали Perl с -DPERL_DEBUG_READONLY_COW (см. "Копирование при записи" в perlguts), но общий буфер строки только для чтения не удалось сделать изменяемым.
- mprotect RW для %p %u завершился с ошибкой %d
-
(S) Вы скомпилировали Perl с -DPERL_DEBUG_READONLY_OPS (см. perlhacktips), но дерево операций только для чтения не удалось сделать изменяемым перед освобождением операций.
- msg%s не реализован
-
(F) У вас нет межпроцессного обмена сообщениями System V на вашей системе.
- Многомерный поиск в хеше отключён
-
(F) Вы указали список индексов для поиска в хеше в
no feature "multidimensional";, например:$z = $foo{$x, $y};что по умолчанию действует как:
$z = $foo{join($;, $x, $y)}; - Многомерный синтаксис %s не поддерживается
-
(W синтаксис) Многомерные массивы не записываются как
$foo[1,2,3]. Они записываются как$foo[1][2][3], как в C. - Не допускается несколько параметром со звездочкой
-
(F) В подпрограммах параметры со звездочкой (
@или%) должны быть последними параметрами, и их должно быть не более одного. Например:sub foo ($a, @b) {} # legal sub foo ($a, @b, %) {} # invalid - '/' должен следовать за числовым типом в unpack
-
(F) У вас был шаблон unpack, содержащий '/', но он не следовал за спецификацией unpack, возвращающей числовое значение. См. "pack" в perlfunc.
- %s не должен быть именованной последовательностью в операторе транслитерации
-
(F) Транслитерация (
tr///иy///) транслитерирует отдельные символы. Но именованная последовательность по определению представляет собой больше, чем отдельный символ, и поэтому выполнение этой операции над ней не имеет смысла. - "my sub" пока не реализован
-
(F) Лексически ограниченные подпрограммы пока не реализованы. Не пробовали это пока.
- "my" подпрограмма %s не может быть в пакете
-
(F) Лексически ограниченные подпрограммы не находятся в пакете, поэтому бессмысленно пытаться объявить их с квалификатором пакета в начале.
- "my %s" используется в сравнении сортировки
-
(W синтаксис) Переменные пакета $a и $b используются для сравнения сортировки. Вы использовали $a или $b в качестве операнда для оператора
<=>илиcmpвнутри блока сравнения сортировки, и переменная ранее была объявлена как лексическая переменная. Либо укажите имя пакета для переменной сортировки, либо переименуйте лексическую переменную. - "my" переменная %s не может быть в пакете
-
(F) Лексически ограниченные переменные не находятся в пакете, поэтому бессмысленно пытаться объявить их с квалификатором пакета в начале. Используйте local() для локализации переменной пакета.
- Имя "%s::%s" используется только один раз: возможная опечатка
-
(W однократно) Ошибки в написании часто проявляются как уникальные имена переменных. Если у вас была веская причина для использования уникального имени, то просто укажите его ещё раз каким-либо способом, чтобы подавить сообщение. Объявление
ourтакже доступно для этой цели.ПРИМЕЧАНИЕ: Это предупреждение обнаруживает символы пакета, которые использовались только один раз. Это означает, что лексические переменные никогда не будут вызывать это предупреждение. Это также означает, что все переменные пакета $c, @c, %c, а также *c, &c, sub c{}, c(), и c (дескриптор файла или формат) считаются одинаковыми; если программа использует $c только один раз, но также использует любые другие, она не вызовет это предупреждение. Символы, начинающиеся с нижнего подчёркивания, и символы, использующие специальные идентификаторы (см. perldata), исключены из этого предупреждения.
- Требуется ровно 3 восьмеричных цифры в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) В
(?[ ])все константы, интерпретируемые как восьмеричные, должны иметь ровно 3 цифры. Это помогает избежать некоторых неоднозначностей. Если ваша константа слишком короткая, добавьте ведущие нули, например(?[ [ \078 ] ]) # Syntax error! (?[ [ \0078 ] ]) # Works (?[ [ \007 8 ] ]) # ClearerМаксимальное число, которое может выразить эта конструкция, равно
\777. Если вам нужно большее число, вам нужно использовать \o{} вместо этого. Если вы имели в виду два отдельных числа, вам нужно разделить их:(?[ [ \7776 ] ]) # Syntax error! (?[ [ \o{7776} ] ]) # One meaning (?[ [ \777 6 ] ]) # Another meaning (?[ [ \777 \006 ] ]) # Still another - Отрицательное количество '/' в unpack
-
(F) Количество, полученное из операции unpack по длине/коду, было отрицательным. См. "pack" в perlfunc.
- Отрицательная длина
-
(F) Вы попытались выполнить операцию чтения/записи/отправки/приёма с длиной буфера меньше 0. Это сложно представить.
- Отрицательный смещение для vec в контексте lvalue
-
(F) Когда
vecвызывается в контексте lvalue, второй аргумент должен быть больше или равен нулю. - Отрицательное количество повторений ничего не делает
-
(W числовой) Вы попытались выполнить оператор повторения
xменьше 0 раз, что не имеет смысла. - Вложенные квантификаторы в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы не можете квантифицировать квантификатор без вмешательства скобок. Поэтому такие вещи, как ** или +* или ?* являются недопустимыми. <-- ЗДЕСЬ показывает, где в регулярном выражении была обнаружена проблема.
Обратите внимание, что минимальные квантификаторы соответствия,
*?,+?, и??кажутся вложенными квантификаторами, но таковыми не являются. См. perlre. - %s никогда не был введен
-
(S internal) Символ, о котором идет речь, был объявлен, но каким-то образом вышел за пределы области видимости, прежде чем мог быть использован.
- next::method/next::can/maybe::next::method не может найти содержащий метод
-
(F)
next::methodнеобходимо вызывать в контексте реального метода в реальном пакете, и он не смог найти такой контекст. См. mro. - \N в классе символов должен быть именованным символом: \N{...} в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) Новое значение (от Perl 5.12) для
\Nкак[^\n]не является допустимым в классе символов в квадратных скобках по той же причине, что и.в классе символов теряет свою специальность: оно соответствует практически всему, чего, вероятно, вы не хотите. - \N{} здесь ограничено одним символом в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) Именованные эскейпы Unicode-символов (
\N{...}) могут возвращать многосимвольный последовательность. Несмотря на то, что класс символов должен соответствовать только одному символу входных данных, Perl будет соответствовать всему правильно, за исключением определенных условий. В настоящее время они:-
Когда класс инвертирован (
[^...]) -
Математически логичное поведение для того, что совпадает при инвертировании, сильно отличается от того, чего ожидают люди, поэтому мы решили запретить это.
- Эскейп является начальной или конечной точкой диапазона
-
Аналогично неясно, что должно быть сгенерировано, когда
\N{...}используется как одна из конечных точек диапазона, например, в[\x{41}-\N{ARABIC SEQUENCE YEH WITH HAMZA ABOVE WITH AE}]Здесь неясно, что подразумевается, так как
\N{...}эскейп является последовательностью кодовых точек, поэтому это считается ошибкой. - В наборе регулярных выражений
-
Синтаксис
(?[ ])в регулярном выражении даёт список отдельных кодовых точек, ни одна из которых не может быть последовательностью.
-
Когда класс инвертирован (
- Не разрешено %s во время выполнения setuid
-
(F) Некоторые операции считаются слишком небезопасными для скрипта setuid или setgid, чтобы даже пытаться их выполнить. Как правило, есть другой способ сделать то, что вы хотите, который, если не безопасен, то, по крайней мере, может быть обеспечен безопасностью. См. perlsec.
- Нет кода, указанного для -%c
-
(F) Командные параметры Perl -e и -E требуют аргумент. Если вы хотите запустить пустую программу, передайте пустую строку в качестве отдельного аргумента или запустите программу, состоящую из единственной 0 или 1:
perl -e "" perl -e0 perl -e1 - Запятая не допускается после %s
-
(F) Оператор списка, имеющий дескриптор файла или «косвенный объект», не может иметь запятую между ним и последующими аргументами. В противном случае это был бы просто еще один из аргументов.
Возможной причиной этого является то, что вы ожидали импортировать константу в своё пространство имён с помощью use или import, но такого импорта не произошло. Например, может быть, ваша операционная система не поддерживает эту конкретную константу. Надеемся, вы использовали явный список импорта для констант, которые вы ожидаете видеть; см. "use" в perlfunc и "import" в perlfunc. Хотя явный список импорта, вероятно, раньше поймал бы эту ошибку, он естественно не исправляет тот факт, что ваша операционная система всё ещё не поддерживает эту константу. Возможно, у вас есть опечатка в константах списка символов импорта use или import или в имени константы в строке, где возникла эта ошибка?
- Нет команды для перенаправления на командной строке
-
(F) Ошибка, специфичная для VMS. Perl обрабатывает перенаправление командной строки самостоятельно и обнаружил «|» в конце командной строки, поэтому не знает, куда вы хотите перенаправить вывод этой команды.
- Нет определённой функции DB::DB
-
(F) Текущий выполняемый код был скомпилирован с переключателем -d, но по какой-то причине текущий отладчик (например, perl5db.pl или модуль
Devel::) не определил функцию, которая должна вызываться в начале каждой инструкции. - Нет dbm на этом компьютере
-
(P) Это считается внутренней ошибкой, потому что сейчас каждый компьютер должен поставлять dbm, поскольку Perl поставляется с SDBM. См. SDBM_File.
- Нет определённой функции DB::sub
-
(F) Текущий выполняемый код был скомпилирован с переключателем -d, но по какой-то причине текущий отладчик (например, perl5db.pl или модуль
Devel::) не определил функциюDB::subдля вызова в начале каждого обычного вызова подпрограммы. - Нет цифр, найденных для %s литерала
-
(F) Не было найдено шестнадцатеричных цифр после
0xили не было найдено двоичных цифр после0b. - Не указана директория для -I
-
(F) Командный переключатель -I требует имя директории в рамках одного и того же аргумента. Используйте -Ilib, например. -I lib не сработает.
- Нет файла ошибок после 2> или 2>> на командной строке
-
(F) Ошибка, специфичная для VMS. Perl обрабатывает перенаправление командной строки самостоятельно и обнаружил '2>' или '2>>' на командной строке, но не может найти имя файла, в который нужно записать данные, предназначенные для stderr.
- Нет символа окончания группы '%c' в шаблоне
-
(F) Шаблон pack или unpack имеет открывающую '(' или '[' без соответствующей закрывающей. См. "pack" в perlfunc.
- Нет входного файла после < на командной строке
-
(F) Ошибка, специфичная для VMS. Perl обрабатывает перенаправление командной строки самостоятельно и обнаружил '<' на командной строке, но не может найти имя файла, из которого нужно считать данные для stdin.
- Нет next::method '%s', найденного для %s
-
(F)
next::methodне нашёл дальнейших экземпляров этого имени метода в оставшихся пакетах MRO этого класса. Если вы не хотите, чтобы он выбрасывал исключение, используйтеmaybe::next::methodилиnext::can. См. mro. - Бесконечное число повторений ничего не делает
-
(W numeric) Вы пытались выполнить оператор повторения
xInf(или-Inf) илиNaNраз, что не имеет смысла. - Нешестнадцатеричный символ в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) В регулярном выражении был нешестнадцатеричный символ там, где ожидался шестнадцатеричный, например:
(?[ [ \xDG ] ]) (?[ [ \x{DEKA} ] ]) - Нешестнадцатеричный символ '%c' завершает \x рано. Преобразован в "%s"
-
(W digit) При разборе шестнадцатеричной числовой константы был неожиданно встречен символ, который не является шестнадцатеричным. Результирующее значение указано.
Обратите внимание, что в фигурных скобках каждый символ, начиная с первого нешестнадцатеричного и до закрывающей фигурной скобки, игнорируется.
- Невосьмеричный символ в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) В регулярном выражении был невосьмеричный символ там, где ожидался восьмеричный, например:
(?[ [ \o{1278} ] ]) - Невосьмеричный символ '%c' завершает \o рано. Преобразован в "%s"
-
(W digit) При разборе восьмеричной числовой константы был неожиданно встречен символ, который не является восьмеричным. Результирующее значение указано.
Когда не используется
\o{...}, вы написали что-то вроде\08, или\179в строке с двойными кавычками. Результат указан, при этом все, кроме последней цифры, рассматриваются как один символ, указанный в восьмеричном формате. Последняя цифра - это следующий символ в строке. Чтобы сообщить Perl, что именно это вы хотите, вы можете использовать синтаксис\o{ }, или использовать ровно три цифры для задания восьмеричного числа для символа.Обратите внимание, что в фигурных скобках каждый символ, начиная с первого невосьмеричного и до закрывающей фигурной скобки, игнорируется.
- "no" не разрешено в выражении
-
(F) Ключевое слово "no" распознаётся и выполняется во время компиляции и не возвращает полезного значения. См. perlmod.
- Нестроковый аргумент передан как битовая маска
-
(W misc) Число было передано как аргумент битовой маски для select(). Используйте функцию vec(), чтобы создать битовые маски дескрипторов файлов для select. См. "select" в perlfunc.
- Нет выходного файла после > на командной строке
-
(F) Ошибка, специфичная для VMS. Perl обрабатывает перенаправление командной строки самостоятельно и обнаружил одиночный '>' в конце командной строки, поэтому не знает, куда вы хотели перенаправить stdout.
- Нет выходного файла после > или >> на командной строке
-
(F) Ошибка, специфичная для VMS. Perl обрабатывает перенаправление командной строки самостоятельно и обнаружил '>' или '>>' на командной строке, но не может найти имя файла, в который нужно записать данные, предназначенные для stdout.
- Имя пакета недопустимо для подпрограммы %s в "our"
- Имя пакета недопустимо для переменной %s в "our"
-
(F) Полностью квалифицированные имена подпрограмм и переменных не допускаются в объявлениях "our", так как это не имеет смысла в рамках существующих правил. Такой синтаксис зарезервирован для будущих расширений.
- Не найдено скрипта Perl во вводе
-
(F) Вы вызвали
perl -x, но в файле не найдена строка, начинающаяся с #! и содержащая слово "perl". - Отсутствует setregid
-
(F) Configure не обнаружил ничего, что напоминало бы вызов setregid() для вашей системы.
- Отсутствует setreuid
-
(F) Configure не обнаружил ничего, что напоминало бы вызов setreuid() для вашей системы.
- Класс %s не найден
-
(F) Вы указали квалификатор класса в объявлении "my", "our" или "state", но этот класс не существует на данном этапе вашей программы.
- Поле "%s" класса %s в переменной %s типа %s не найдено
-
(F) Вы попытались получить доступ к ключу в хеше через указанную типизированную переменную, но этот ключ не разрешен пакетом того же типа. Указанный пакет ограничил набор разрешенных ключей с помощью оператора fields.
- Неизвестный обработчик: %s
-
(F) Вы указали обработчик сигнала, который не распознается Perl. В настоящее время Perl принимает
__DIE__и__WARN__в качестве допустимых обработчиков сигналов. - Не открытая труба
-
(P) Ошибка, характерная для VMS. Внутренняя процедура my_pclose() пыталась закрыть трубу, которая не была открыта. Это должно было быть обнаружено ранее как попытка закрыть неоткрытый дескриптор файла.
- Сигнал SIG%s не найден
-
(W signal) Вы указали имя сигнала в качестве индекса к %SIG, которое не распознается. Введите
kill -lв своей оболочке, чтобы увидеть допустимые имена сигналов в вашей системе. - Совпадений с маской значения свойства Юникода нет:
-
(W regexp) Вы указали маску для значения свойства Юникода, но в текущей версии Юникода нет значения свойства, которое ей соответствует. Проверьте правильность написания.
- Ссылка не на процедуру
-
(F) Perl пытался оценить ссылку на значение кода (то есть подпрограмму), но вместо этого обнаружил ссылку на что-то другое. Вы можете использовать функцию ref(), чтобы узнать, на что она действительно ссылается. См. также perlref.
- Ссылка не на GLOB
-
(F) Perl пытался оценить ссылку на "typeglob" (то есть запись в таблице символов, похожую на
*foo), но вместо этого обнаружил ссылку на что-то другое. Вы можете использовать функцию ref(), чтобы узнать, на что она действительно ссылается. См. perlref. - Ссылка не на хеш
-
(F) Perl пытался оценить ссылку на значение хеша, но вместо этого обнаружил ссылку на что-то другое. Вы можете использовать функцию ref(), чтобы узнать, на что она действительно ссылается. См. perlref.
- Символ '#' не разрешен непосредственно после сигила в сигнатуре подпрограммы
-
(F) В определении сигнатуры подпрограммы комментарий, следующий за сигилом (
$,@или%), должен быть отделен пробелами или запятыми и т. п., в частности, чтобы избежать путаницы с переменной$#. Например:# bad sub f ($# ignore first arg , $b) {} # good sub f ($, # ignore first arg $b) {} - Ссылка не на массив
-
(F) Perl пытался оценить ссылку на значение массива, но вместо этого обнаружил ссылку на что-то другое. Вы можете использовать функцию ref(), чтобы узнать, на что она действительно ссылается. См. perlref.
- Ссылка не на скаляр
-
(F) Perl пытался оценить ссылку на скалярное значение, но вместо этого обнаружил ссылку на что-то другое. Вы можете использовать функцию ref(), чтобы узнать, на что она действительно ссылается. См. perlref.
- Ссылка не на подпрограмму
-
(F) Perl пытался оценить ссылку на значение кода (то есть подпрограмму), но вместо этого обнаружил ссылку на что-то другое. Вы можете использовать функцию ref(), чтобы узнать, на что она действительно ссылается. См. также perlref.
- Ссылка не на подпрограмму в таблице перегрузки
-
(F) Была предпринята попытка указать запись в таблице перегрузки, которая каким-то образом не указывает на действительную подпрограмму. См. overload.
- Недостаточно аргументов для %s
-
(F) Функции требуется больше аргументов, чем вы указали.
- Недостаточно аргументов формата
-
(W syntax) В формате указано больше полей форматирования, чем было предоставлено в следующей строке. См. perlform.
- %s: не найден
-
(A) Вы случайно запустили свою программу через оболочку Bourne, а не через Perl. Проверьте строку #! или вручную передайте свою программу в Perl.
- Отсутствует информация о смещении UTC; предполагается, что местное время совпадает с UTC
-
(S) Предупреждение, характерное для VMS. Perl не смог найти смещение местного часового пояса, поэтому предполагает, что местное системное время эквивалентно UTC. Если это не так, определите логическое имя SYS$TIMEZONE_DIFFERENTIAL, чтобы перевести в количество секунд, которое нужно добавить к UTC, чтобы получить местное время.
- NULL-оператор в RUN
-
(S debugging) Некоторая внутренняя процедура вызвала run() с указателем на NULL-оператор.
- Пустая картина в строке формы
-
(F) Первый аргумент formline должен быть допустимым спецификацией формата. Он оказался пустым, что, вероятно, означает, что вы передали ему неинициализированное значение. См. perlform.
- Нулевой realloc
-
(P) Была предпринята попытка realloc с NULL.
- NULL аргумент регулярного выражения
-
(P) Внутренние процедуры сопоставления с образцом серьезно подвели.
- NULL параметр регулярного выражения
-
(P) Внутренние процедуры сопоставления с образцом свихнулись.
- Число слишком длинное
-
(F) Perl ограничивает представление десятичных чисел в программах примерно 250 символами. Вы превысили этот предел. В будущих версиях Perl, вероятно, будет устранено это произвольное ограничение. Тем временем попробуйте использовать научный формат (например, "1e6" вместо "1_000_000").
- Число без цифр
-
(F) Perl искал число, но не нашел ничего, что выглядело как число. Это происходит, например, с
\o{}, если между фигурными скобками нет числа. - Результат числового формата слишком большой
-
(F) Длина результата числового формата, переданного в sprintf() или printf(), была слишком большой для сообщения об ошибке подлежащей функции C. Это ограничение обычно составляет 2 ГБ.
- Переменные с числовыми значениями, содержащие более одной цифры, не могут начинаться с '0'
-
(F) Единственная числовая переменная, которая может начинаться с 0, это
$0, а вы упомянули переменную, начинающуюся с 0, которая имеет более одной цифры. Вероятно, вы хотите удалить ведущую 0, или, если вы намеревались представить имя переменной в восьмеричной форме, вам следует преобразовать его в десятичную. - Восьмеричное число > 037777777777 не переносимо
-
(W portable) Указанное восьмеричное число больше, чем 2**32-1 (4294967295), и поэтому не переносимо между системами. См. perlport для получения дополнительной информации о проблемах переносимости.
- Неверное количество аргументов имя/значение для подпрограммы '%s'
-
(F) Подпрограмма, использующая параметр-хеш со слиянием, получила нечетное количество аргументов для заполнения хеша. Она требует аргументов в парах, с одинаковым количеством ключей и значений. Вероятно, виноват вызывающий.
Сообщение пытается указать имя вызываемой подпрограммы. Если подпрограмма была алиасована, будет показано исходное имя подпрограммы, независимо от того, какое имя использовал вызывающий.
- Нечетное число аргументов для overload::constant
-
(W overload) Вызов overload::constant содержал нечетное число аргументов. Аргументы должны подаваться парами.
- Нечетное число элементов в анонимном хеше
-
(W misc) Вы указали нечетное число элементов для инициализации хеша, что странно, так как хеши представляют собой пары ключ/значение.
- Нечетное число элементов в присвоении хеша
-
(W misc) Вы указали нечетное число элементов для инициализации хеша, что странно, так как хеши представляют собой пары ключ/значение.
- Смещение за пределами строки
-
(F)(W layer) Вы попытались выполнить операцию чтения/записи/отправки/приёма/позиционирования с смещением, выходящим за пределы буфера. Это трудно представить. Единственные исключения — добавление нулевых байтов при переходе за конец строки при чтении файла или при позиционировании в конце скаляра, открытого для ввода-вывода (в ожидании будущих чтений и для имитации поведения с реальными файлами).
- Используется старый разделитель пакетов в строке
-
(W syntax) Вы использовали старый разделитель пакетов, "'", в имени переменной внутри двойной кавычки; например,
"In $name's house". Это эквивалентно"In $name::s house". Если вы имели в виду первое, поставьте обратный слэш перед апострофом ("In $name\'s house"). - %s() на неоткрытом %s
-
(W unopened) Была предпринята попытка операции ввода-вывода на дескрипторе файла, который никогда не инициализировался. Вам нужно выполнить вызов open(), sysopen() или socket(), или вызвать конструктор из пакета FileHandle.
- -%s на неоткрытом дескрипторе файла %s
-
(W unopened) Вы попытались вызвать оператор проверки файла на дескрипторе файла, который не открыт. Проверьте свой поток управления. См. также "-X" в perlfunc.
- oops: oopsAV
-
(S internal) Внутреннее предупреждение о том, что грамматика повреждена.
- oops: oopsHV
-
(S internal) Внутреннее предупреждение о том, что грамматика повреждена.
- Операнд без предшествующего оператора в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы написали что-то вроде
(?[ \p{Digit} \p{Thai} ])Есть два операнда, но нет оператора, указывающего, как их комбинировать.
- Операция "%s": метод не найден, %s
-
(F) Была предпринята попытка выполнить перегруженную операцию, для которой не был определён обработчик. Хотя некоторые обработчики могут быть сгенерированы автоматически в терминах других обработчиков, нет стандартного обработчика для любой операции, если не указано, что перегрузка
fallbackдолжна быть включена. См. overload. - Операция "%s" возвращает свой аргумент для не-Unicode кодовой точки 0x%X
-
(S non_unicode) Вы выполнили операцию, требующую правил Unicode, над кодовой точкой, которая не входит в Unicode, поэтому её поведение не определено. Perl выбрал не делать ничего и предупредить вас.
Если показанная операция — "ToFold", это означает, что выполнено нечувствительное к регистру сопоставление в регулярном выражении над кодовой точкой.
Если вы знаете, что делаете, вы можете отключить это предупреждение, используя
no warnings 'non_unicode';. - Операция "%s" возвращает свой аргумент для суррогата UTF-16 U+%X
-
(S surrogate) Вы выполнили операцию, требующую правил Unicode, над суррогатом Unicode. Unicode не одобряет использование суррогатов для чего-либо, кроме хранения строк в UTF-16, но правила для суррогатов определены (с неохотой), и для этой операции они ничего не делают. Поскольку использование суррогатов может быть опасным, Perl выводит предупреждение.
Если показанная операция — "ToFold", это означает, что выполнено нечувствительное к регистру сопоставление в регулярном выражении над кодовой точкой.
Если вы знаете, что делаете, вы можете отключить это предупреждение, используя
no warnings 'surrogate';. - Пропущен оператор или точка с запятой перед %s
-
(S ambiguous) Вы использовали переменную или вызов подпрограммы там, где парсер ожидал оператор. Парсер предположил, что вы действительно имели в виду оператор, но это, скорее всего, неверно. Например, если вы напишете "*foo *foo", это будет интерпретировано так, как будто вы написали "*foo * 'foo'".
- Не указано выражение по умолчанию для необязательного параметра
-
(F) В сигнатуре подпрограммы вы написали что-то вроде "$a =", создав именованный необязательный параметр без значения по умолчанию. Для безымянного необязательного параметра разрешено не указывать значение по умолчанию, но для именованного оно обязательно. Вероятно, вы хотели написать "$a = undef".
- Переменная "our" %s объявлена повторно
-
(W shadow) Похоже, вы уже объявляли ту же глобальную переменную ранее в текущем лексическом пространстве.
- Ошибка: недостаточно памяти!
-
(X) Функция malloc() вернула 0, что указывает на недостаток свободной памяти (или виртуальной памяти) для удовлетворения запроса. Perl не может сделать ничего кроме как немедленно выйти.
По крайней мере, в Unix вы можете обойти это, увеличив лимиты размера данных процесса: в csh/tcsh используйте
limitиlimit datasize n(гдеn— количество килобайтов) для проверки текущих ограничений и их изменения, а в ksh/bash/zsh используйтеulimit -aиulimit -d n, соответственно. - Ошибка: недостаточно памяти при расширении %s
-
(X) Была предпринята попытка расширить массив, список или строку за пределы максимально возможного выделения памяти.
- Ошибка: недостаточно памяти при "большом" запросе для %s
-
(F) Функция malloc() вернула 0, что указывает на недостаток свободной памяти (или виртуальной памяти) для удовлетворения запроса. Однако запрос был признан достаточно большим (значение по умолчанию на этапе компиляции — 64 Кб), поэтому предоставлена возможность завершить работу, перехватив эту ошибку.
- Ошибка: недостаточно памяти при запросе для %s
-
(X)(F) Функция malloc() вернула 0, что указывает на недостаток свободной памяти (или виртуальной памяти) для удовлетворения запроса.
Запрос был признан малым, поэтому возможность его перехвата зависит от способа компиляции Perl. По умолчанию это не перехватывается. Однако, если скомпилировано иначе, Perl может использовать содержимое
$^Mв качестве резервного пула после выхода с этим сообщением об ошибке. В этом случае ошибка может быть перехвачена один раз, и сообщение об ошибке будет содержать строку и файл, где произошёл неудачный запрос. - Ошибка: недостаточно памяти для чрезвычайно большого запроса
-
(F) Вы не можете выделить более 2^31+"небольшое количество" байтов. Эта ошибка, скорее всего, вызвана опечаткой в программе Perl. Например,
$arr[time]вместо$arr[$time]. - Ошибка: недостаточно памяти для стека yacc
-
(F) Парсер yacc хотел увеличить свой стек, чтобы продолжить разбор, но realloc() не предоставил больше памяти, ни физической, ни виртуальной.
- '.' вне строки в pack
-
(F) Аргумент для '.' в вашем шаблоне попытался переместить рабочую позицию перед началом формируемой упакованной строки.
- '@' вне строки в unpack
-
(F) У вас был шаблон, который задавал абсолютную позицию вне строки, подлежащей распаковке. См. "pack" в perlfunc.
- '@' вне строки с некорректным UTF-8 в unpack
-
(F) У вас был шаблон, который задавал абсолютную позицию вне строки, подлежащей распаковке. Строка, подлежащая распаковке, также содержала некорректный UTF-8. См. "pack" в perlfunc.
- Некорректный аргумент перегрузки '%s'
-
(W overload) Предикату overload был передан аргумент, который он не распознал. Возможно, вы ошиблись в написании оператора?
- Перегруженная операция разыменования не вернула ссылку
-
(F) Объект с перегруженным оператором разыменования был разыменован, но перегруженная операция не вернула ссылку. См. overload.
- Перегруженная операция qr не вернула REGEXP
-
(F) Объект с перегрузкой
qrбыл использован в качестве части совпадения, но перегруженная операция не вернула скомпилированное регулярное выражение. См. overload. - Атрибут пакета %s может конфликтовать с будущим зарезервированным словом: %s
-
(W reserved) Было использовано имя атрибута с маленькими буквами, имеющее обработчик для конкретного пакета. В будущем это имя может получить другое значение в Perl, даже если сейчас этого нет. Возможно, стоит использовать имя атрибута с большой буквой вместо этого. См. attributes.
- Переполнение счётчика повторения в pack/unpack
-
(F) Вы не можете указать счётчик повторения, настолько большой, что он переполнит целые числа со знаком. См. "pack" в perlfunc.
- Переполнение страницы
-
(W io) Единоразовый вызов write() произвёл больше строк, чем помещается на одной странице. См. perlform.
- Паника: %s
-
(P) Внутренняя ошибка.
- Паника: попытка вызвать %s в %s
-
(P) Один из операторов проверки файла вошёл в ветвь кода, которая вызывает функцию, связанную с ACL, но эта функция недоступна в этой системе. Предыдущие проверки означают, что в данной системе вхождение в эту ветвь должно быть невозможно.
- Паника: дочерний псевдопроцесс никогда не был запланирован
-
(P) Дочерний псевдопроцесс в реализации ithreads в Windows не был запланирован в разрешённый интервал времени и поэтому не смог корректно инициализироваться.
- Паника: ck_grep, тип=%u
-
(P) Не удалось выполнить внутреннюю проверку согласованности при компиляции grep.
- Паника: повреждённый индекс сохранённого стека %ld
-
(P) От стека сохранений потребовалось восстановить больше локальных значений, чем их содержится в стеке сохранений.
- Паника: 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) Мы извлекли контекст из стека контекстов к контексту с указанным меткой, и затем обнаружили, что это не контекст, для которого мы знаем, как выполнить переход по метке.
- Паника: gp_free не смог освободить указатель на типглоб
-
(P) Внутренняя функция, используемая для очистки записей типаглоба, многократно пыталась, но каждый раз что-то повторно создавало записи в глобе. Скорее всего, гроб содержит объект со ссылкой обратно на гроб и деструктором, который добавляет новый объект в гроб.
- Паника: 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) Внутренне обнаружен нулевой смещение буфера. Была предпринята попытка освободить целевой объект, который изначально не был выделен.
- panic: pad_reset curpad, %p!=%p
-
(P) Компилятор запутался, какой буфер использовать для выделения и освобождения временных и лексических переменных.
- panic: pad_sv po
-
(P) Внутренне обнаружен нулевой смещение буфера. Вероятно, оператору потребовалась цель, но эта цель по какой-то причине не была выделена.
- panic: pad_swipe curpad, %p!=%p
-
(P) Компилятор запутался, какой буфер использовать для выделения и освобождения временных и лексических переменных.
- panic: pad_swipe po
-
(P) Внутренне обнаружено недопустимое смещение буфера.
- panic: pp_iter, type=%u
-
(P) Итератор foreach был вызван вне контекста цикла.
- panic: pp_match%s
-
(P) Внутренняя функция pp_match() была вызвана с недопустимыми операционными данными.
- panic: realloc, %s
-
(P) Что-то запросило отрицательное число байтов для realloc.
- panic: ошибка подсчета ссылок на nsv в sv_replace() (%d != 1)
-
(P) Внутренняя функция sv_replace() получила новый SV с количеством ссылок, отличным от 1.
- panic: restartop в %s
-
(P) Некоторая внутренняя функция запросила переход (или что-то подобное), но не предоставила место назначения.
- panic: return, type=%u
-
(P) Мы извлекли контекст из стека в подпрограмму или контекст eval, а затем обнаружили, что это не подпрограмма или контекст eval.
- panic: scan_num, %s
-
(P) scan_num() была вызвана на объекте, который не является числом.
- panic: Последовательность (?{...}): в регулярном выражении m/%s/ не найден блок кода
-
(P) При компиляции шаблона, содержащего вложенные (?{}) или (??{}) блоки кода, Perl не смог найти блок кода, который должен был быть уже виден и скомпилирован Perl перед тем, как управление было передано компилятору регулярных выражений.
- panic: strxfrm() получает абсурдный результат - a => %u, ab => %u
-
(P) Проверка целостности интерпретатором функции C strxfrm() завершилась неудачей. В текущем языке локали преобразование строки "ab" короче, чем преобразование строки "a", что не имеет смысла.
- panic: sv_chop %s
-
(P) В функцию sv_chop() была передана позиция, которая не находится в буфере строки скаляра.
- panic: sv_insert, midend=%p, bigend=%p
-
(P) Функция sv_insert() получила указание удалить больше строки, чем есть.
- panic: top_env
-
(P) Компилятор попытался выполнить переход, или что-то странное, подобное этому.
- 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) Лексер попал в плохое состояние во время обработки модификатора case.
- Пропущены скобки вокруг списка "%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 для сообщения об ошибке; в регулярном выражении; помечено <-- HERE в m/%s/
-
(S regexp) Вы использовали регулярное выражение с игнорированием регистра, и в Perl есть ошибка, в которой встроенные правила сворачивания регулярных выражений некорректны. Это может привести к неверным результатам. Пожалуйста, сообщите об этой ошибке на https://github.com/Perl/perl5/issues.
- Экспериментальный уровень PerlIO ':win32'
-
(S experimental::win32_perlio) Уровень PerlIO
:win32экспериментальный. Если хотите рискнуть использовать этот уровень, просто отключите это предупреждение:no warnings "experimental::win32_perlio"; - Perl_my_%s() недоступен
-
(F) Ваша платформа имеет очень необычный порядок байтов и размер целых чисел, поэтому невозможно настроить некоторые или все функции преобразования порядка байтов фиксированной ширины. Это проблема только когда вы используете модификаторы '<' или '>' в шаблонах (un)pack. Смотрите "pack" в perlfunc.
- Требуется Perl %s (вы имели в виду %s?)--это только %s, остановлено
-
(F) Код, который вы пытаетесь запустить, запросил более новую версию Perl, чем у вас установлена. Возможно,
use 5.10было написано вместоuse 5.010илиuse v5.10. Без ведущегоv, число интерпретируется как десятичное, где каждая группа из трёх цифр после десятичной точки представляет часть номера версии. Например, 5.10 эквивалентно v5.100. - Требуется Perl %s--это только %s, остановлено
-
(F) Запрашиваемый модуль использует функции версии Perl, более новой, чем текущая. Сколько времени прошло с момента обновления?
См. "require" в perlfunc.
- PERL_SH_DIR слишком длинный
-
(F) Ошибка, специфичная для OS/2. PERL_SH_DIR — это директория для поиска
sh-оболочки. См. "PERL_SH_DIR" в perlos2. - PERL_SIGNALS неверно: "%s"
-
(X) См. "PERL_SIGNALS" в perlrun для допустимых значений.
- Perl-ы начиная с %s слишком новые--это %s, остановлено
-
(F) Код, который вы пытаетесь запустить, заявляет, что не будет работать на вашей версии Perl, потому что она слишком новая. Возможно, код нужно обновить или он просто неправильный, и проверка версии должна быть удалена.
- perl: предупреждение: Не-шестнадцатеричный символ в '$ENV{PERL_HASH_SEED}', seed задан не полностью
-
(S) PERL_HASH_SEED должен соответствовать /^\s*(?:0x)?[0-9a-fA-F]+\s*\z/, но он содержал не-шестнадцатеричный символ. Это может означать, что вы не используете ожидаемый seed для хеширования.
- perl: предупреждение: Установка локали не удалась.
-
(S) Сообщение предупреждения может выглядеть примерно так:
perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LC_ALL = "En_US", LANG = (unset) are supported and installed on your system. perl: warning: Falling back to the standard locale ("C").Точно, какие настройки локали потерпели неудачу, различаются. В приведенном примере настройки были таковы, что LC_ALL был "En_US", а LANG не имел значения. Эта ошибка означает, что Perl обнаружил, что вы и/или поставщик вашей операционной системы и/или системный администратор настроили систему локали, но Perl не смог использовать эти настройки. К счастью, это не было критично: Perl может и будет использовать "локальную по умолчанию" "C", и скрипт будет запущен. Однако, прежде чем вы действительно решите проблему, вы будете получать это же сообщение об ошибке каждый раз, когда запускаете 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:] в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) Класс в синтаксисе класса символов [: :] неизвестен. <-- HERE показывает местоположение проблемы в регулярном выражении. Обратите внимание, что POSIX классы символов не имеют префикс
is, который есть в соответствующих интерфейсах C: другими словами, это[[:print:]], а неisprint. См. perlre. - POSIX getpgrp не может принимать аргумент
-
(F) Ваша система имеет POSIX getpgrp(), который не принимает аргумент в отличие от версии BSD, которая принимает pid.
- POSIX-синтаксис [%c %c] должен находиться внутри классов символов%s в регулярных выражениях; помечено <-- HERE в m/%s/
-
(W regexp) Perl считает, что вы имели в виду класс символов POSIX, но не использовали достаточно скобок. Эти конструкции классов POSIX [: :], [= =] и [. .] идут внутри классов символов, [ ] являются частью конструкции, например:
qr/[012[:alpha:]345]/. Составленная регулярная выражение, вероятно, не соответствует вашим намерениям. Например,qr/[:alpha:]/компилируется в регулярный закомментированный класс символов, состоящий из четырёх символов":","a","l","h", и"p". Чтобы указать класс POSIX, его нужно было написатьqr/[[:alpha:]]/.Обратите внимание, что [= =] и [. .] в настоящее время не реализованы; они просто служат маркерами для будущих расширений и приведут к фатальным ошибкам. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.
Если указание класса не было полностью корректным, сообщение указывает на это.
- POSIX-синтаксис [. .] зарезервирован для будущих расширений в регулярных выражениях; помечено <-- HERE в m/%s/
-
(F) Внутри классов символов регулярных выражений ([]) синтаксис, начинающийся с "[." и заканчивающийся ".]", зарезервирован для будущих расширений. Если вам нужно представить эти последовательности символов внутри класса символов регулярного выражения, просто укажите квадратные скобки с обратной косой чертой: "\[." и ".\]". <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.
- POSIX-синтаксис [= =] зарезервирован для будущих расширений в регулярных выражениях; помечено <-- HERE в m/%s/
-
(F) Внутри классов символов регулярных выражений ([]) синтаксис, начинающийся с "[=" и заканчивающийся "=]", зарезервирован для будущих расширений. Если вам нужно представить эти последовательности символов внутри класса символов регулярного выражения, просто укажите квадратные скобки с обратной косой чертой: "\[=" и "=\]". <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.
- Возможная попытка вставить комментарии в список qw()
-
(W qw) Списки qw() содержат элементы, разделенные пробелами; как и с текстовыми строками, символы комментариев не игнорируются, а вместо этого обрабатываются как литеральные данные. (Вы могли использовать другие разделители, кроме круглых скобок, показанных здесь; также часто используются фигурные скобки.)
Вы, вероятно, написали что-то вроде этого:
@list = qw( a # a comment b # another comment );в то время как вам нужно было написать это:
@list = qw( a b );Если вам действительно нужны комментарии, создайте свой список старым способом, с кавычками и запятыми:
@list = ( 'a', # a comment 'b', # another comment ); - Возможная попытка разделить слова запятыми
-
(W qw) Списки qw() содержат элементы, разделенные пробелами; поэтому запятые не нужны для разделения элементов. (Вы могли использовать другие разделители, кроме круглых скобок, показанных здесь; также часто используются фигурные скобки.)
Вы, вероятно, написали что-то вроде этого:
qw! a, b, c !;что помещает буквальные запятые в некоторые элементы списка. Напишите его без запятых, если вы не хотите, чтобы они отображались в ваших данных:
qw! a b c !; - Возможная ошибка повреждения памяти: %s переполнил 3-й аргумент
-
(F) ioctl() или fcntl() вернули больше, чем Perl ожидал. Perl предполагает разумный размер буфера, но помещает контрольный байт в конец буфера на всякий случай. Этот контрольный байт был перезаписан, и Perl предполагает, что память повреждена. См. "ioctl" в perlfunc.
- Возможная проблема с приоритетом оператора управления потоком
-
(W syntax) Возможная проблема со смешением оператора управления потоком (например,
return) и оператора с низким приоритетом, такого какor. Рассмотрим:sub { return $a or $b; }Это интерпретируется как:
sub { (return $a) or $b; }Что по сути равно:
sub { return $a; }Используйте скобки или вариант оператора с высоким приоритетом.
Обратите внимание, что это также может быть вызвано конструкциями, такими как:
sub { 1 if die; } - Возможная проблема с приоритетом битового оператора %s
-
(W precedence) Ваша программа использует битовый логический оператор в сочетании с оператором численного сравнения, например:
if ($x & $y == 0) { ... }Это выражение фактически эквивалентно
$x & ($y == 0), из-за более высокого приоритета==. Вероятно, это не то, что вы имели в виду. (Если вы действительно хотели написать это, отключите предупреждение или, лучше, явно поместите скобки и напишите$x & ($y == 0)). - Возможная нежелательная интерполяция $\ в регулярном выражении
-
(W ambiguous) Вы использовали что-то вроде
m/$\/в регулярном выражении. Регулярное выражениеm/foo$\s+bar/mпереводится в: найти слово 'foo', разделитель записей вывода (см. "$\" в perlvar) и букву 's' (один или более раз) за которой следует слово 'bar'.Если это то, что вы имели в виду, вы можете отключить предупреждение, используя
m/${\}/(например:m/foo${\}s+bar/).Если вместо этого вы хотели найти слово 'foo' в конце строки, за которым следует пробел и слово 'bar' в следующей строке, вы можете использовать
m/$(?)\/(например:m/foo$(?)\s+bar/). - Возможная нежелательная интерполяция %s в строке
-
(W ambiguous) Вы использовали что-то вроде '@foo' в строке с двойными кавычками, но в данный момент массив
@fooне был в области видимости. Если вам нужна буквальная @foo, напишите её как \@foo; в противном случае выясните, что случилось с массивом, о котором вы, видимо, забыли. - Проблема с приоритетом: open %s должен быть open(%s)
-
(S precedence) Старая нерегулярная конструкция
open FOO || die;теперь интерпретируется как
open(FOO || die);из-за строгой регламентации грамматики Perl 5 в унарные и списковые операторы. (Старый open был немного и того, и другого.) Вы должны поставить скобки вокруг дескриптора файла или использовать новый оператор "или" вместо "||".
- Преждевременный конец заголовков скрипта
-
См. "500 Server error".
- printf() на закрытом дескрипторе файла %s
-
(W closed) Дескриптор файла, в который вы записываете, был закрыт до этого момента. Проверьте ваш поток управления.
- print() на закрытом дескрипторе файла %s
-
(W closed) Дескриптор файла, на который вы печатаете, был закрыт до этого момента. Проверьте ваш поток управления.
- Процесс завершен SIG%s
-
(W) Это стандартное сообщение, выпущенное приложениями OS/2, в то время как приложения *nix завершаются молча. Это считается особенностью порта OS/2. Его можно легко отключить с помощью соответствующих обработчиков сигналов, см. "Сигналы" в perlipc. См. также "Процесс завершен SIGTERM/SIGINT" в perlos2.
- Прототип после '%c' для %s : %s
-
(W illegalproto) Символ следует за % или @ в прототипе. Это бесполезно, так как % и @ поглощают оставшиеся аргументы подпрограммы.
- Несовпадение прототипов: %s vs %s
-
(S prototype) Подпрограмма, которая объявляется или определена, ранее была объявлена или определена с другим прототипом функции.
- Прототип не завершен
-
(F) Вы опустили закрывающую скобку в определении прототипа функции.
- Прототип '%s' перезаписан атрибутом 'prototype(%s)' в %s
-
(W prototype) Прототип был объявлен как в скобках после имени подпрограммы, так и с помощью атрибута 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-символом, который не является управляющим, имели все свои конечные точки как буквальные символы, а не какие-либо последовательности экранирования (например,"\x41"), и диапазоны должны быть все цифрами, или все заглавными буквами, или все строчными буквами. - Диапазоны цифр должны быть из одной группы в регулярном выражении; помечено <-- HERE в m/%s/
-
(W regexp) (только в
use re 'strict'или в(?[...]))Более строгие правила помогают находить опечатки и другие ошибки. Вы указали диапазон, и по крайней мере одна из конечных точек — десятичная цифра. Согласно более строгим правилам, в этом случае обе конечные точки должны быть цифрами в одной группе из 10 последовательных цифр.
- readdir() попытка доступа к недействительной дескриптору каталога %s
-
(W io) Дескриптор каталога, из которого вы читаете, закрыт или не является дескриптором каталога. Проверьте свой поток управления.
- readline() на закрытом дескрипторе файла %s
-
(W closed) Дескриптор файла, из которого вы читаете, был закрыт до этого момента. Проверьте свой поток управления.
- readline() на неоткрытом дескрипторе файла %s
-
(W unopened) Дескриптор файла, из которого вы читаете, никогда не был открыт. Проверьте свой поток управления.
- read() на закрытом дескрипторе файла %s
-
(W closed) Вы попытались прочитать из закрытого дескриптора файла.
- read() на неоткрытом дескрипторе файла %s
-
(W unopened) Вы попытались прочитать из дескриптора файла, который никогда не был открыт.
- Перевыделение слишком велико: %x
-
(F) Вы не можете выделить более 64К на компьютере с MS-DOS.
- realloc() освобождённой памяти проигнорирован
-
(S malloc) Внутренняя процедура realloc() была вызвана на уже освобождённой памяти.
- Пересоставьте Perl с -DDEBUGGING для использования переключателя -D
-
(S debugging) Вы не можете использовать опцию -D, если код для получения желаемого вывода не скомпилирован в Perl, что влечёт определённые накладные расходы, поэтому он в настоящее время исключён из вашей копии.
- Рекурсивный вызов Perl_load_module в PerlIO_find_layer
-
(P) В настоящее время запрещено загружать модули при создании дескриптора файла внутри крючка %INC. Это может произойти с
open my $fh, '<', \$scalar, который неявно загружает PerlIO::scalar. Попробуйте сначала явно загрузить PerlIO::scalar. - Обнаружено рекурсивное наследование в пакете '%s'
-
(F) При расчёте порядка разрешения методов (MRO) пакета Perl считает, что обнаружен бесконечный цикл в
@ISAиерархии. Это грубая проверка, которая прерывает процесс после 100 уровней@ISAглубины. - Избыточный аргумент в %s
-
(W redundant) Вы вызвали функцию с большим количеством аргументов, чем предполагалось исходя из других аргументов, которые вы передали. В настоящее время выводится только при использовании формата типа printf, когда требовалось меньше аргументов, чем предоставлено, но в будущем может использоваться для, например, "pack" в perlfunc.
- refcnt_dec: fd %d%s
- refcnt: fd %d%s
- refcnt_inc: fd %d%s
-
(P) Внутренняя проверка целостности реализации ввода-вывода Perl не прошла. Если вы видите это сообщение, что-то очень не так.
- Ссылка найдена там, где ожидался список чётной длины
-
(W misc) Вы передали одну ссылку, а Perl ожидал список с чётным количеством элементов (для присваивания в хеш). Обычно это означает, что вы использовали конструктор анонимного хеша, когда должны были использовать скобки. В любом случае, хеш требует пар ключ/значение.
%hash = { one => 1, two => 2, }; # WRONG %hash = [ qw/ an anon array / ]; # WRONG %hash = ( one => 1, two => 2, ); # right %hash = qw( one 1 two 2 ); # also fine - Ссылка уже слабая
-
(W misc) Вы пытались ослабить ссылку, которая уже слабая. Это не оказывает никакого влияния.
- Ссылка не является слабой
-
(W misc) Вы пытались ослабить ссылку, которая не является слабой. Это не оказывает никакого влияния.
- Ссылка на недопустимую группу 0 в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) Вы использовали
\g0или подобное в регулярном выражении. Вы можете ссылаться на захватывающие скобки только с положительными целыми числами (обычные обратные ссылки) или с отрицательными целыми числами (относительные обратные ссылки). Использование 0 не имеет смысла. - Ссылка на несуществующую группу в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) Вы использовали что-то вроде
\7в вашем регулярном выражении, но в выражении нет как минимум семи наборов захватывающих скобок. Если вы хотели вставить символ с порядковым номером 7 в регулярное выражение, добавьте нули, чтобы сделать его трёхзначным:\007Строка <-- HERE показывает, где была обнаружена проблема в регулярном выражении.
- Ссылка на несуществующую именованную группу в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) Вы использовали что-то вроде
\k'NAME'или\k<NAME>в вашем регулярном выражении, но нет соответствующей именованной захватывающей скобки, например(?'NAME'...)или(?<NAME>...). Проверьте, правильно ли написано имя как в обратной ссылке, так и в объявлении.Строка <-- HERE показывает, где была обнаружена проблема в регулярном выражении.
- Ссылка на несуществующую или незакрытую группу в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) Вы использовали что-то вроде
\g{-7}в своём регулярном выражении, но в выражении до места, где находилась\g{-7}, нет как минимум семи наборов закрытых захватывающих скобок.Строка <-- HERE показывает, где была обнаружена проблема в регулярном выражении.
- Повреждение памяти регулярного выражения
-
(P) Двигатель регулярных выражений запутался из-за того, что ему предоставил компилятор регулярных выражений.
- Модификатор регулярного выражения "/%c" может появиться не более двух раз
- Модификатор регулярного выражения "%c" может появиться не более двух раз в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) В шаблоне регулярного выражения было слишком много указанных модификаторов. Удалите лишние.
- Модификатор регулярного выражения "%c" не может появиться после "-" в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) Отключение данного модификатора приводит к включению другого. В настоящее время Perl этого не допускает. Переформулируйте регулярное выражение, чтобы использовать желаемый модификатор (и поместите его перед знаком минус), вместо того, чтобы отключать ненужный.
- Модификатор регулярного выражения "/%c" не может появиться дважды
- Модификатор регулярного выражения "%c" не может появиться дважды в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) В шаблоне регулярного выражения было слишком много указанных модификаторов. Удалите лишние.
- Модификаторы регулярного выражения "/%c" и "/%c" взаимоисключающие
- Модификаторы регулярного выражения "%c" и "%c" взаимоисключающие в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) В шаблоне регулярного выражения было более одного из этих взаимоисключающих модификаторов. Сохраните только тот модификатор, который должен быть.
- Недостаточно памяти для регулярного выражения в m/%s/
-
(P) Ошибка, которая «не должна произойти», так как safemalloc() должна была её поймать ранее.
- Строка форматирования, содержащая повтор и не завершится (~~ и @#)
-
(F) Ваш формат содержит последовательность ~~ (повторение до пустой строки) и числовое поле, которое никогда не станет пустым, поэтому повторение никогда не завершится. Возможно, стоит использовать ^# вместо этого. Смотрите perlform.
- Список замены длиннее списка поиска
-
(W misc) Вы использовали список замены, который длиннее списка поиска. Поэтому дополнительные элементы в списке замены бессмысленны.
- '(*%s' требует завершающего ':' в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) Вы использовали конструкцию, которая требует двоеточия и аргумент шаблона. Укажите их или проверьте, что вы используете правильную конструкцию.
- '%s' разрешилось в '\o{%s}%d'
-
С версии Perl 5.32 это сообщение больше не генерируется. Вместо этого см. "Non-octal character '%c' terminates \o early. Resolved as "%s"". (W misc, regexp) Вы написали что-то вроде
\08, или\179в строке с двойными кавычками. Все, кроме последней цифры, обрабатывается как один символ, заданный в восьмеричном формате. Последняя цифра — следующий символ в строке. Чтобы указать Perl, что вы действительно хотите этого, вы можете использовать синтаксис\o{ }, или использовать ровно три цифры для указания восьмеричного значения символа. - Обратный оператор %s=
-
(W syntax) Вы написали оператор присваивания наоборот. Знак = всегда должен стоять в конце, чтобы избежать неоднозначности с последующими унарными операторами.
- Попытка rewinddir() на некорректном дескрипторе каталога %s
-
(W io) Дескриптор каталога, для которого вы пытаетесь выполнить rewinddir(), либо закрыт, либо на самом деле не является дескриптором каталога. Проверьте ваш поток управления.
- Утечка скаляров: %d
-
(S internal) Что-то пошло не так во внутренней системе Perl по работе со скалярами: не все переменные скаляров были освобождены к моменту выхода Perl. Обычно это указывает на утечку памяти, что, конечно, плохо, особенно если программа Perl предназначена для длительной работы.
- Значение скаляра @%s[%s] лучше записать как $%s[%s]
-
(W syntax) Вы использовали срез массива (обозначенный как @) для выбора одного элемента массива. Обычно лучше запрашивать значение скаляра (обозначенное как $). Разница в том, что
$foo[&bar]всегда ведет себя как скаляр, как при присваивании, так и при вычислении его аргумента, в то время как@foo[&bar]ведет себя как список при присваивании и предоставляет контекст списка для индексации, что может вызвать странное поведение, если вы ожидаете только один индекс.С другой стороны, если вы на самом деле надеялись обработать элемент массива как список, вам нужно разобраться с тем, как работают ссылки, потому что Perl не будет магически преобразовывать скаляры в списки. См. perlref.
- Значение скаляра @%s{%s} лучше записать как $%s{%s}
-
(W syntax) Вы использовали срез хэша (обозначенный как @) для выбора одного элемента хэша. Обычно лучше запрашивать значение скаляра (обозначенное как $). Разница в том, что
$foo{&bar}всегда ведет себя как скаляр, как при присваивании, так и при вычислении его аргумента, в то время как@foo{&bar}ведет себя как список при присваивании и предоставляет контекст списка для индексации, что может вызвать странное поведение, если вы ожидаете только один индекс.С другой стороны, если вы на самом деле надеялись обработать элемент хэша как список, вам нужно разобраться с тем, как работают ссылки, потому что Perl не будет магически преобразовывать скаляры в списки. См. perlref.
- Незавершенный шаблон поиска
-
(F) Лексер не смог найти конечный разделитель конструкции // или m{}. Помните, что разделители в скобках учитывают уровень вложенности. Пропущенный ведущий
$из переменной$mможет вызвать эту ошибку.Обратите внимание, что с Perl 5.10.0 // также может быть конструкцией «определено или», а не пустым шаблоном поиска. Поэтому код, написанный в Perl 5.10.0 или более поздней версии, использующий // как конструкцию «определено или», может быть неправильно интерпретирован Perl-версиями до 5.10.0 как незавершенный шаблон поиска.
- Попытка seekdir() на некорректном дескрипторе каталога %s
-
(W io) Дескриптор каталога, для которого вы пытаетесь выполнить seekdir(), либо закрыт, либо на самом деле не является дескриптором каталога. Проверьте ваш поток управления.
- %sseek() на незапущенном файловом дескрипторе
-
(W unopened) Вы попытались использовать функцию seek() или sysseek() на файловом дескрипторе, который либо никогда не был открыт, либо с тех пор был закрыт.
- select не реализован
-
(F) Эта машина не реализует системный вызов select().
- Собственные связки массивов и хэшей не поддерживаются
-
(F) В текущей реализации не поддерживаются собственные связки массивов и хэшей.
- Похоже, отсутствует точка с запятой
-
(W semicolon) Около синтаксической ошибки, вероятно, была вызвана отсутствующей точкой с запятой или, возможно, другим отсутствующим оператором, таким как запятая.
- semi-panic: попытка дублирования освобожденной строки
-
(S internal) Внутренняя функция newSVsv() была вызвана для дублирования скаляра, который ранее был помечен как освобожденный.
- sem%s не реализован
-
(F) На вашей системе нет системных семафоров IPC.
- send() на закрытом сокете %s
-
(W closed) Сокет, к которому вы пытаетесь отправить данные, был закрыт до этого. Проверьте поток управления.
- Последовательность "\c{" неверна
-
(F) Эти три символа не могут появляться последовательно в контексте двойных кавычек. Это сообщение генерируется только на платформах, отличных от ASCII (на платформах ASCII выводится другое сообщение об ошибке). Если вы собирались указать управляющий символ с помощью этой последовательности, вам нужно использовать другой способ указания.
- Последовательность (? неполна в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Регулярное выражение закончилось неполным расширением (?). <-- HERE показывает, где в регулярном выражении была обнаружена проблема. См. perlre.
- Последовательность (?%c...) не реализована в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Предложенное расширение регулярного выражения имеет зарезервированный символ, но еще не реализовано. <-- HERE показывает, где в регулярном выражении была обнаружена проблема. См. perlre.
- Последовательность (?%s...) не распознана в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы использовали расширение регулярного выражения, которое не имеет смысла. <-- HERE показывает, где в регулярном выражении была обнаружена проблема. Это может произойти при использовании конструкции
(?^...), чтобы сказать Perl использовать стандартные модификаторы регулярных выражений, и вы избыточно указываете стандартный модификатор. Для других причин см. perlre. - Последовательность (?#... не завершена в регулярном выражении m/%s/
-
(F) Комментарий к регулярному выражению должен заканчиваться закрывающей скобкой. Вложенные скобки не допускаются. См. perlre.
- Последовательность (?&... не завершена в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Имя ссылки в формате
(?&...)отсутствовала заключительная скобка после имени. <-- HERE показывает, где в регулярном выражении была обнаружена проблема. - Последовательность (?%c... не завершена в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Отсутствовала конечная заключительная кавычка или угловая скобка для именованной группы в формате
(?'...')или(?<...>). <-- HERE показывает, где в регулярном выражении была обнаружена проблема. - Последовательность (?(%c... не завершена в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Отсутствовала конечная заключительная кавычка или угловая скобка для именованной ссылки в формате
(?('...')...)или(?(<...>)...). <-- HERE показывает, где в регулярном выражении была обнаружена проблема. - Последовательность (...) не завершена в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Не было соответствующей закрывающей скобки для '('. <-- HERE показывает, где в регулярном выражении была обнаружена проблема.
- Последовательность \%s... не завершена в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Регулярное выражение ожидает обязательный аргумент после последовательности экранирования, который был опущен или неправильно написан.
- Последовательность (?{...}) не завершена символом ')'
-
(F) Конец кода Perl внутри {...} должен быть немедленно после ')'.
- Последовательность (?P>... не завершена в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Имя ссылки в формате
(?P>...)отсутствовала заключительная скобка после имени. <-- HERE показывает, где в регулярном выражении была обнаружена проблема. - Последовательность (?P<... не завершена в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Отсутствовала конечная заключительная угловая скобка для именованной группы в формате
(?P<...>'). <-- HERE показывает, где в регулярном выражении была обнаружена проблема. - Последовательность ?P=... не завершена в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Имя ссылки в формате
(?P=...)отсутствовала заключительная скобка после имени. <-- HERE показывает, где в регулярном выражении была обнаружена проблема. - Последовательность (?R) не завершена в регулярном выражении m/%s/
-
(F) Последовательность
(?R)или(?0)в регулярном выражении отсутствовала заключительная скобка. - Ошибка сервера 500
-
(A) Это сообщение об ошибке, которое обычно отображается в окне браузера при попытке выполнить CGI-программу (включая SSI) через веб. Фактический текст ошибки сильно варьируется от сервера к серверу. Наиболее часто встречающиеся варианты: "Ошибка сервера 500", "Метод (что-то) запрещен", "Документ не содержит данных", "Преждевременный конец заголовков скрипта" и "Не удалось создать допустимый заголовок".
Это ошибка CGI, а не Perl.
Вам необходимо убедиться, что ваш скрипт исполняемый, доступен пользователю, под которым CGI выполняет скрипт (вероятно, это не пользовательская учетная запись, под которой вы его тестировали), не зависит от каких-либо переменных среды (например, PATH) пользователя, под которым он не выполняется, и не находится в месте, где сервер CGI не может его найти, в основном, более или менее. Дополнительную информацию см. по следующим ссылкам:
https://www.perl.org/CGI_MetaFAQ.html http://www.htmlhelp.org/faq/cgifaq.html http://www.w3.org/Security/Faq/Также следует ознакомиться со статьёй perlfaq9.
- setegid() не реализовано
-
(F) Вы пытались присвоить
$), но ваша операционная система не поддерживает системный вызов setegid() (или эквивалент), или, по крайней мере, Configure так не считает. - seteuid() не реализовано
-
(F) Вы пытались присвоить
$>, но ваша операционная система не поддерживает системный вызов seteuid() (или эквивалент), или, по крайней мере, Configure так не считает. - setpgrp не принимает аргументы
-
(F) Ваша система имеет setpgrp() из BSD 4.2, который не принимает аргументы, в отличие от POSIX setpgid(), который принимает идентификатор процесса и идентификатор группы процессов.
- setrgid() не реализовано
-
(F) Вы пытались присвоить
$(, но ваша операционная система не поддерживает системный вызов setrgid() (или эквивалент), или, по крайней мере, Configure так не считает. - setruid() не реализовано
-
(F) Вы пытались присвоить
$<, но ваша операционная система не поддерживает системный вызов setruid() (или эквивалент), или, по крайней мере, Configure так не считает. - setsockopt() на закрытом сокете %s
-
(W закрыто) Вы пытались установить опцию сокета на закрытом сокете. Не забыли ли вы проверить возвращаемое значение вызова socket()? См. "setsockopt" в perlfunc.
- Запрещено назначение $/ ссылке на %s
-
(F) Вы присвоили ссылку на скаляр
$/, где ссылка не является положительным целым числом. В старых версиях Perl это **казалось** работало так же, как присвоение егоundef, но на самом деле было внутренне другим, менее эффективным и, с очень большой вероятностью, могло привести к разбиению вашего файла строковой формой ссылки.В Perl 5.20.0 это было изменено, чтобы оно было **точно** таким же, как присвоение
$/значению undef, за исключением того, что это предупреждение будет выброшено.Рекомендуется изменить код на явное присвоение
$/значениюundef, если вы хотите прочитать весь файл. Начиная с Perl 5.28, присвоение$/ссылке на целое число, которое не является положительным, является фатальной ошибкой. - Запрещено назначение $/ ссылке на %s
-
(F) Вы пытались присвоить ссылку на нецелое значение
$/. В старых версиях Perl это вело себя аналогично присвоению ссылки на положительное целое число, где целое число было адресом ссылки. Начиная с Perl 5.20.0 это фатальная ошибка, чтобы позволить будущим версиям Perl использовать ссылки на нецелые числа для более интересных целей. - shm%s не реализовано
-
(F) В вашей системе отсутствует IPC общей памяти System V.
- !=~ должно быть !~
-
(W синтаксис) Оператор несовпадения — это !~, а не !=~. !=~ будет интерпретироваться как операторы != (не равно численно) и ~ (дополнение по модулю 2): вероятно, это не то, что вы имели в виду.
- /%s/ следует, вероятно, записать как "%s"
-
(W синтаксис) Вы использовали шаблон, где Perl ожидал найти строку, как в первом аргументе
join. Perl будет обрабатывать результат совпадения шаблона с $_ как строку, что, вероятно, не то, что вы имели в виду. - shutdown() на закрытом сокете %s
-
(W закрыто) Вы пытались выполнить shutdown на закрытом сокете. Кажется немного избыточным.
- Обработчик сигнала SIG%s "%s" не определен
-
(W сигнал) Обработчик сигнала, указанный в %SIG, фактически не существует. Возможно, вы поместили его в неправильный пакет?
- Утечка Slab из cv %p
-
(S) Если вы видите это сообщение, значит, что-то серьезно не так с внутренней бухгалтерией деревьев операций. Дерево операций необходимо было освободить после ошибки компиляции, но его не удалось найти, поэтому оно вместо этого утекло.
- sleep(%u) слишком большой
-
(W переполнение) Вы вызвали
sleepс числом, которое превышает возможности надёжной обработки, иsleep, вероятно, проспал меньше времени, чем требуется. - Параметр slurpy не последний
-
(F) В сигнатуре подпрограммы вы поместили что-то после параметра slurpy (массива или хэша). Параметр slurpy принимает все доступные аргументы, поэтому не может быть оставшихся для заполнения последующих параметров.
- Умное сопоставление с неопределённым объектом нарушает инкапсуляцию
-
(F) Не следует использовать оператор
~~на объекте, который его не перегружает: Perl отказывается использовать внутреннюю структуру объекта для умного сопоставления. - Smartmatch экспериментальная функция
-
(S experimental::smartmatch) Это предупреждение выводится, если вы используете оператор smartmatch (
~~). В настоящее время это экспериментальная функция, и её детали могут измениться в будущих выпусках Perl. В частности, её текущее поведение отмечается как излишне сложное и неинтуитивное, и очень вероятно, что оно будет пересмотрено. - Ключи хэша должны быть меньше 2**31 байта
-
(F) Вы пытались создать хэш, содержащий очень большой ключ, где «очень большой» означает, что для его хранения требуется как минимум 2 гигабайта. К сожалению, Perl пока не обрабатывает такие большие ключи хэша. Вы должны пересмотреть свой дизайн, чтобы избежать прямого хеширования такой длинной строки.
- sort теперь зарезервированное слово
-
(F) Старое сообщение об ошибке, с которым почти никто больше не сталкивается. Но до того, как sort стал ключевым словом, люди иногда использовали его в качестве имени файлового дескриптора.
- Фильтры источника применяются только к потокам байтов
-
(F) Вы пытались активировать фильтр источника (обычно путем загрузки модуля фильтра источника) внутри строки, переданной
eval. Это запрещено в рамках функцииunicode_eval. Рассмотрите использованиеevalbytesвместо этого. См. feature. - splice() смещение за пределами массива
-
(W прочее) Вы попытались указать смещение, которое было за пределами массива, переданного splice(). Вместо этого, splice() начнётся в конце массива, а не за его пределами. Если это не то, что вы хотите, попробуйте явным образом предварительно расширить массив, присвоив $#array = $offset. См. "splice" в perlfunc.
- Цикл split
-
(P) Цикл split зациклился бесконечно. (Очевидно, цикл split не должен повторяться больше раз, чем количество символов ввода, что и произошло.) См. "split" в perlfunc.
- Маловероятное выполнение оператора
-
(W exec) Вы выполнили exec() с оператором после него, отличным от die(). Это почти всегда ошибка, так как exec() никогда не возвращает значение, кроме случаев ошибки. Вероятно, вы хотели использовать system() вместо этого, который возвращает значение. Чтобы подавить это предупреждение, поместите exec() в отдельный блок.
- Подпрограмма «state» %s не может быть в пакете
-
(F) Подпрограммы с лексической областью видимости не находятся в пакете, поэтому бессмысленно пытаться объявить одну с квалификатором пакета впереди.
- «state %s» используется в сортировке
-
(W синтаксис) Переменные пакета $a и $b используются для сравнения при сортировке. Вы использовали $a или $b в качестве операнда для оператора
<=>илиcmpвнутри блока сравнения при сортировке, и ранее переменная была объявлена как лексическая переменная. Либо укажите имя пакета для переменной сортировки, либо переименуйте лексическую переменную. - Переменная «state» %s не может быть в пакете
-
(F) Лексические переменные не находятся в пакете, поэтому бессмысленно пытаться объявить одну с квалификатором пакета впереди. Используйте local(), если хотите локализовать переменную пакета.
- stat() на неописанном файловом дескрипторе %s
-
(W неописано) Вы пытались использовать функцию stat() на файловом дескрипторе, который либо никогда не был открыт, либо с тех пор был закрыт.
- Строки с кодовыми точками больше 0xFF могут не быть отображены в файловых дескрипторах памяти
-
(W utf8) Вы пытались открыть ссылку на скаляр для чтения или добавления, где скаляр содержал кодовые точки больше 0xFF. Файлы в памяти моделируют файлы на диске и могут содержать только байты.
- Найден псевдоним при разрешении метода "%s" перегрузки "%s" в пакете "%s"
-
(P) Разрешение перегрузки по дереву @ISA может быть нарушено импортированными псевдонимами. Псевдонимы никогда не должны создаваться неявно, но явные вызовы
canмогут нарушить это. - Атрибуты подпрограммы должны предшествовать сигнатуре
-
(F) При включенных сигнатурах подпрограммы, атрибуты подпрограммы должны предшествовать сигнатуре. Обратите внимание, что этот порядок был обратным в версиях 5.22..5.26. Таким образом:
sub foo :lvalue ($a, $b) { ... } # 5.20 and 5.28 + sub foo ($a, $b) :lvalue { ... } # 5.22 .. 5.26 - Подпрограмма "&%s" недоступна
-
(W закрытие) Во время компиляции внутренняя именованная подпрограмма или eval пытается захватить внешнюю лексическую подпрограмму, которая в данный момент недоступна. Это может произойти по одной из двух причин. Во-первых, лексическая подпрограмма может быть объявлена во внешней анонимной подпрограмме, которая еще не была создана. (Помните, что именованные подпрограммы создаются во время компиляции, а анонимные — во время выполнения.) Например,
sub { my sub a {...} sub f { \&a } }В момент создания f она не может захватить текущую подпрограмму "a", так как анонимная подпрограмма еще не создана. И наоборот, следующее предупреждение не выведет, поскольку анонимная подпрограмма к этому моменту уже была создана и активна:
sub { my sub a {...} eval 'sub f { \&a }' }->();Вторая ситуация возникает, когда eval обращается к лексической подпрограмме, которая вышла из области видимости, например,
sub f { my sub a {...} sub { eval '\&a' } } f()->();Здесь, когда в eval компилируется '\&a', f() в данный момент не выполняется, поэтому её &a недоступна для захвата.
- "%s" подпрограмма &%s маскирует предыдущее объявление в том же %s
-
(W тень) Подпрограмма "my" или "state" была повторно объявлена в текущей области видимости или операторе, что фактически устраняет весь доступ к предыдущей экземпляру. Это почти всегда ошибка ввода. Обратите внимание, что предыдущая подпрограмма всё ещё будет существовать до конца области видимости или пока не будут уничтожены все ссылки на неё из области закрытия.
- Подпрограмма %s переопределена
-
(W переопределение) Вы переопределили подпрограмму. Чтобы подавить это предупреждение, используйте
{ no warnings 'redefine'; eval "sub name { ... }"; } - Подпрограмма "%s" не будет оставаться совместно используемой
-
(W закрытие) Внутренняя (вложенная) именованная подпрограмма ссылается на подпрограмму "my", определённую во внешней именованной подпрограмме.
Когда вызывается внутренняя подпрограмма, она увидит значение лексической подпрограммы внешней подпрограммы, как оно было до и во время *первого* вызова внешней подпрограммы; в этом случае, после завершения первого вызова внешней подпрограммы, внутренняя и внешняя подпрограммы больше не будут разделять общее значение лексической подпрограммы. Другими словами, она больше не будет совместно используемой. Это особенно важно, если лексические подпрограммы обращаются к лексическим переменным, объявленным в окружающей области видимости.
Эту проблему обычно можно решить, сделав внутреннюю подпрограмму анонимной, используя синтаксис
sub {}. Когда создаются внутренние анонимные подпрограммы, которые ссылаются на лексические подпрограммы во внешних подпрограммах, они автоматически привязываются к текущим значениям таких лексических подпрограмм. - Цикл подстановки
-
(P) Подстановка бесконечно циклилась. (Очевидно, что подстановка не должна итерироваться больше раз, чем есть символов ввода, что и произошло.) См. обсуждение подстановки в "Regexp Quote-Like Operators" в perlop.
- Шаблон подстановки не завершён
-
(F) Лексер не смог найти внутренний разделитель конструкции s/// или s{}{}. Помните, что разделители в скобках учитывают уровень вложенности. Отсутствие ведущего
$из переменной$sможет вызвать эту ошибку. - Замена не завершена
-
(F) Лексер не смог найти конечный разделитель конструкции s/// или s{}{} . Помните, что разделители в скобках учитывают уровень вложенности. Отсутствие ведущего
$из переменной$sможет вызвать эту ошибку. - substr вне строки
-
(W substr)(F) Вы попытались обратиться к substr(), который указывает на позицию вне строки. То есть, абсолютное значение смещения было больше длины строки. См. "substr" в perlfunc. Это предупреждение является фатальным, если substr используется в контексте левого операнда (как левая часть присваивания или как аргумент подпрограммы, например).
- sv_upgrade из типа %d вниз до типа %d
-
(P) Perl пытался принудительно повысить тип SV до типа, который на самом деле был хуже, чем его текущий тип.
- Переключатель (?(условие)... содержит слишком много ветвей в регулярном выражении; отмечено знаком <-- ЗДЕСЬ в m/%s/
-
(F) Конструкция (?(условие)если-часть|иначе-часть) может иметь не более двух ветвей (часть если и часть иначе). Если вы хотите, чтобы одна или обе содержали альтернации, например, используя
this|that|other, заключите её в скобки группировки:(?(condition)(?:this|that|other)|else-clause)Знак <-- ЗДЕСЬ показывает, где в регулярном выражении была обнаружена проблема. См. perlre.
- Условие переключателя не распознано в регулярном выражении; отмечено знаком <-- ЗДЕСЬ в m/%s/
-
(F) Часть условия конструкции (?(условие)если-часть|иначе-часть) неизвестна. Условие должно быть одним из следующих:
(1) (2) ... true if 1st, 2nd, etc., capture matched (<NAME>) ('NAME') true if named capture matched (?=...) (?<=...) true if subpattern matches (?!...) (?<!...) true if subpattern fails to match (?{ CODE }) true if code returns a true value (R) true if evaluating inside recursion (R1) (R2) ... true if directly inside capture group 1, 2, etc. (R&NAME) true if directly inside named capture (DEFINE) always false; for defining named subpatternsЗнак <-- ЗДЕСЬ показывает, где в регулярном выражении была обнаружена проблема. См. perlre.
- Переключатель (?(условие)... не завершен в регулярном выражении; отмечено знаком <-- ЗДЕСЬ в m/%s/
-
(F) Вы забыли закрыть блок (?(условие)... где-то в шаблоне. Добавьте закрывающую скобку в соответствующее положение. См. perlre.
- переключение эффективного %s не реализовано
-
(F) В то время как под управлением директивы
use filetest, мы не можем переключать реальные и эффективные uid или gid. - синтаксическая ошибка
-
(F) Вероятно, означает синтаксическую ошибку. Частые причины включают:
A keyword is misspelled. A semicolon is missing. A comma is missing. An opening or closing parenthesis is missing. An opening or closing brace is missing. A closing quote is missing.Зачастую будет другое сообщение об ошибке, связанное с синтаксической ошибкой, предоставляющее дополнительную информацию. (Иногда помогает включить -w.) Само сообщение об ошибке часто указывает место в строке, где оно отказалось от дальнейшего анализа. Иногда фактическая ошибка происходит на несколько токенов раньше, поскольку Perl хорошо понимает случайный ввод. В редких случаях номер строки может быть вводящим в заблуждение, и иногда единственный способ понять, что вызывает ошибку, — это многократно вызывать
perl -c, каждый раз отрезая половину программы, чтобы посмотреть, исчезла ли ошибка. Это своего рода кибернетическая версия 20 вопросов. - синтаксическая ошибка в строке %d: '%s' неожиданно
-
(A) Вы случайно запустили свою программу через оболочку Bourne, а не через Perl. Проверьте строку #!, или вручную передайте свою программу в Perl.
- синтаксическая ошибка в файле %s в строке %d, следующие 2 токена "%s"
-
(F) Эта ошибка, вероятно, возникнет, если вы запустите скрипт perl5 через интерпретатор perl4, особенно если следующие 2 токена — "use strict" или "my $var" или "our $var".
- Синтаксическая ошибка в (?[...]) в регулярном выражении; отмечено знаком <-- ЗДЕСЬ в m/%s/
-
(F) Perl не смог понять, что вы имели в виду внутри этой конструкции; это уведомляет вас о том, что он прекращает попытки.
- %s синтаксис OK
-
(F) Конечное сводное сообщение, когда
perl -cуспешно. - sysread() на закрытом файловом дескрипторе %s
-
(W закрыто) Вы попытались прочитать из закрытого файлового дескриптора.
- sysread() на неоткрытом файловом дескрипторе %s
-
(W не открыто) Вы попытались прочитать из файлового дескриптора, который никогда не открывался.
- Система V %s не реализована на этом компьютере
-
(F) Вы попытались сделать что-то с функцией, начинающейся с "sem", "shm" или "msg", но в вашей системе IPC системы V не реализована. В некоторых системах эта функциональность может существовать, но не быть настроена. Обратитесь к документации вашей системы.
- syswrite() на закрытом файловом дескрипторе %s
-
(W закрыто) Файловый дескриптор, в который вы пытаетесь записать, был закрыт до этого момента. Проверьте свой поток управления.
-
-Tи-Bне реализованы для файловых дескрипторов -
(F) Perl не может просмотреть буфер stdio файловых дескрипторов, когда не знает о вашем типе stdio. Вам придётся использовать имя файла вместо этого.
- Целевая метка goto слишком глубоко вложена
-
(F) Вы попытались использовать
gotoдля достижения метки, которая была слишком глубоко вложена для Perl. Perl делает вам одолжение, отказав в этом. - telldir() попытка на недействительном дескрипторе каталога %s
-
(W io) Дескриптор каталога, для которого вы попытались использовать telldir(), либо закрыт, либо не является дескриптором каталога. Проверьте свой поток управления.
- tell() на неоткрытом файловом дескрипторе
-
(W не открыто) Вы пытались использовать функцию tell() на файловом дескрипторе, который либо никогда не открывался, либо с тех пор был закрыт.
- Функция crypt() не реализована из-за чрезмерной паранойи.
-
(F) Configure не смог найти функцию crypt() на вашей машине, вероятно, потому, что ваш поставщик не предоставил её, вероятно, потому, что они думают, что правительство США считает это секретом, или, по крайней мере, что они будут продолжать притворяться, что это так. И если вы цитируете меня по этому поводу, я буду отрицать это.
- Экспериментальная функция declared_refs не включена
-
(F) Чтобы объявить ссылки на переменные, как в
my \%x, вы должны сначала включить эту функцию:no warnings "experimental::declared_refs"; use feature "declared_refs"; - Функция %s не реализована
-
(F) Функция, указанная, не реализована на этой архитектуре, согласно проверкам Configure.
- Функция private_use экспериментальная
-
(S experimental::private_use) Эта функция фактически служит меткой для будущего использования.
- Функция regex_sets экспериментальная
-
(S experimental::regex_sets) Это предупреждение выводится, если вы используете синтаксис
(?[ ])в регулярном выражении. Подробности этой функции могут измениться. Если вы хотите её использовать, но понимаете, что делаете это, рискуя использовать экспериментальную функцию, которая может измениться в будущей версии Perl, вы можете сделать следующее, чтобы заглушить предупреждение:no warnings "experimental::regex_sets"; - Функция signatures экспериментальная
-
(S experimental::signatures) Это предупреждение выводится, если вы разворачиваете аргументы подпрограммы с помощью подписи. Просто подавите предупреждение, если хотите использовать эту функцию, но знайте, что при этом вы рискуете использовать экспериментальную функцию, которая может измениться или быть удалена в будущей версии Perl:
no warnings "experimental::signatures"; use feature "signatures"; sub foo ($left, $right) { ... } - Ошибка stat перед %s не была lstat
-
(F) Нет смысла проверять текущий буфер stat на наличие символической ссылки, если последний stat, который записал в буфер stat, уже прошел через символическую ссылку, чтобы добраться до реального файла. Используйте вместо этого фактическое имя файла.
- Функция подстановок свойств Юникода экспериментальная
-
(S experimental::uniprop_wildcards) Эта функция экспериментальная, и ее поведение может измениться в будущих версиях Perl. См. "Подстановки в значениях свойств" в perlunicode.
- Атрибут 'unique' может применяться только к переменным 'our'
-
(F) Этот атрибут никогда не поддерживался для
myилиsubобъявлений. - Этот Perl не может сбросить элементы среды CRTL (%s)
- Этот Perl не может установить элементы среды CRTL (%s=%s)
-
(W internal) Предупреждения, характерные для VMS. Вы пытались изменить или удалить элемент внутреннего массива среды CRTL, но ваша копия Perl не была скомпилирована с CRTL, содержащим функцию setenv(). Вам нужно перекомпилировать Perl с CRTL, который содержит эту функцию, или переопределить PERL_ENV_TABLES (см. perlvms), чтобы массив среды не был целью изменения %ENV, которая привела к предупреждению.
- Этот Perl не был скомпилирован с поддержкой случайного обхода ключей хеша, но что-то под названием Perl_hv_rand_set().
-
(F) Что-то попыталось использовать внутренний API-вызов, который зависит от компиляции Perl с поддержкой случайного обхода ключей хеша по умолчанию, но этот Perl скомпилирован без неё. Вам следует сообщить об этом предупреждении соответствующей стороне, или перекомпилировать perl с параметрами по умолчанию.
- Использование my() в ложном условии больше не разрешено
-
(F) Вы использовали объявление, подобное
my $x if 0. В Perl есть давняя ошибка, из-за которой лексическая переменная не очищается при выходе из области видимости, если её объявление включает ложное условие. Некоторые люди использовали эту ошибку для достижения эффекта статической переменной. Поскольку мы намерены исправить эту ошибку, мы не хотим, чтобы люди полагались на это поведение. Аналогичный статический эффект можно получить, объявив переменную в отдельном блоке за пределами функции, например:sub f { my $x if 0; return $x++ }становится
{ my $x; sub f { return $x++ } }Начиная с perl 5.10.0, вы также можете использовать
stateпеременные, чтобы лексические переменные инициализировались только один раз (см. feature):sub f { state $x; return $x++ }Это использование
my()в ложном условии было устаревшим, начиная с Perl 5.10, и стало фатальной ошибкой в Perl 5.30. - Таймаут ожидания определения другим потоком \p{%s}
-
(F) В первый раз, когда используется пользовательское свойство ("Пользовательские свойства символов" в perlunicode), его определение ищется и преобразуется во внутреннюю форму для более эффективной обработки при последующих использованиях. Может возникнуть гонка, если два или более потока попытаются выполнить эту обработку почти одновременно. Вместо этого создается критическая секция для этой задачи, блокируя все, кроме одного потока, от выполнения этой задачи. Это сообщение указывает, что поток, выполняющий преобразование, занимает непредвиденно много времени. Таймаут существует только для предотвращения тупика; он достаточно большой, чтобы система, вероятно, испытывала чрезмерную нагрузку и вот-вот должна была выйти из строя. Нет реального способа исправить это, кроме перезагрузки.
- Функция times не реализована
-
(F) Ваша версия C-библиотеки, по-видимому, не поддерживает times(). Я предполагаю, что вы не работаете в Unix-подобной системе.
- "-T" указан в строке #!, он также должен быть использован в командной строке
-
(X) Строка #! (или локальный эквивалент) в скрипте Perl содержит опцию -T (или опцию -t), но Perl не был вызван с опцией -T в командной строке. Это ошибка, потому что, к тому времени, когда Perl обнаруживает -T в скрипте, уже слишком поздно правильно затаить всё из среды. Поэтому Perl отказывается.
Если скрипт Perl выполняется как команда с помощью механизма #! (или его локального эквивалента), эту ошибку обычно можно исправить, отредактировав строку #!, чтобы опция -%c была частью первого аргумента Perl: например, замените
perl -n -%cнаperl -%c -n.Если скрипт Perl выполняется как
perl scriptname, то опция -%c должна появиться в командной строке:perl -%c scriptname. - Для %s: незаконное отображение '%s'
-
(F) Вы пытались определить пользовательское отображение для lc(), lcfirst, uc(), или ucfirst() (или их строковых версий), но указали незаконное отображение. См. "Пользовательские свойства символов" в perlunicode.
- Слишком глубоко вложенные ()-группы
-
(F) Ваш шаблон содержит ()-группы с нелепо глубоким уровнем вложенности.
- Слишком мало аргументов для syscall
-
(F) Для syscall() должен быть по крайней мере один аргумент, чтобы указать системный вызов для вызова.
- Слишком мало аргументов для подпрограммы '%s' (получено %d; ожидалось %d)
-
(F) Подпрограмма, использующая подпись, получила меньше аргументов, чем требуется подписью. Виновником, вероятно, является вызывающая подпрограмму.
Сообщение пытается включить имя вызываемой подпрограммы. Если подпрограмма была переименована, будет показано оригинальное имя подпрограммы, независимо от того, какое имя использовал вызывающий. Также будет указано количество переданных аргументов и ожидаемое количество.
- Слишком мало аргументов для подпрограммы '%s' (получено %d; ожидалось по крайней мере %d)
-
Аналогично предыдущему сообщению, но для подпрограмм, которые принимают переменное количество аргументов.
- Слишком поздно для опции "-%s"
-
(X) Строка #! (или локальный эквивалент) в скрипте Perl содержит опцию -M, -m или -C.
В случае -M и -m, это ошибка, потому что эти опции не предназначены для использования внутри скриптов. Используйте
useпсевдоним вместо этого.Опция -C работает только в том случае, если она указана также в командной строке (с той же последовательностью букв или цифр). Либо укажите эту опцию в командной строке, или, если ваша система её поддерживает, сделайте скрипт исполняемым и запустите его напрямую вместо передачи его в perl.
- Слишком поздно для выполнения блока %s
-
(W void) Блок CHECK или INIT определяется во время выполнения, когда возможность их выполнения уже упущена. Возможно, вы загружаете файл с
requireилиdo, когда должны использоватьuseвместо этого. Или, возможно, вы должны поместитьrequireилиdoвнутри блока BEGIN. - Слишком много аргументов для syscall
-
(F) Perl поддерживает максимум только 14 аргументов для syscall().
- Слишком много аргументов для %s
-
(F) Функция требует меньше аргументов, чем вы указали.
- Слишком много аргументов для подпрограммы '%s' (получено %d; ожидалось %d)
-
(F) Подпрограмма, использующая подпись, получила больше аргументов, чем разрешено подписью. Виновником, вероятно, является вызывающая подпрограмму.
Сообщение пытается включить имя вызываемой подпрограммы. Если подпрограмма была переименована, будет показано оригинальное имя подпрограммы, независимо от того, какое имя использовал вызывающий. Также будет указано количество переданных аргументов и ожидаемое количество.
- Слишком много аргументов для подпрограммы '%s' (получено %d; ожидалось не более %d)
-
Аналогично предыдущему сообщению, но для подпрограмм, которые принимают переменное количество аргументов.
- Слишком много вложенных открывающих скобок в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы превысили количество открывающих
"("скобок, которые не были закрыты соответствующими закрывающими. Этот лимит предотвращает чрезмерное потребление памяти. Он первоначально установлен в 1000, но может быть изменён установкой${^RE_COMPILE_RECURSION_LIMIT}в другое значение. Это может потребоваться сделать в блоке BEGIN до компиляции шаблона регулярного выражения. - Слишком много )
-
(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.
- try/catch — экспериментальная функция
-
(S experimental::try) Это предупреждение выводится, если вы используете синтаксис
tryиcatch. Этот синтаксис в настоящее время экспериментальный, и его поведение может измениться в будущих версиях Perl. - Тип аргумента %d для &CORE::%s должен быть %s
-
(F) Подпрограмма в пакете CORE требует, чтобы её аргумент был жёсткой ссылкой на данные указанного типа. Перегрузка игнорируется, поэтому ссылка на объект, который не является указанного типа, но тем не менее имеет перегрузку для его обработки, всё равно не будет принята.
- Тип аргумента %d для %s должен быть %s (а не %s)
-
(F) Эта функция требует, чтобы аргумент в этой позиции был определённого типа. Массивы должны быть @ИМЯ или
@{EXPR}. Хэши должны быть %ИМЯ или%{EXPR}. Не допускается неявное разыменование — используйте формы {ВЫРАЖЕНИЕ} для явного разыменования. См. perlref. - umask не реализован
-
(F) Ваша машина не реализует функцию umask, и вы попытались использовать её для ограничения прав для себя (EXPR & 0700).
- Несбалансированный контекст: %d больше PUSH, чем POP
-
(S internal) Код выхода обнаружил внутреннее несоответствие в количестве входов и выходов контекстов выполнения.
- Несбалансированные сохранения: %d больше сохранений, чем восстановлений
-
(S internal) Код выхода обнаружил внутреннее несоответствие в количестве временно локализованных значений.
- Несбалансированные области: %d больше ENTER, чем LEAVE
-
(S internal) Код выхода обнаружил внутреннее несоответствие в количестве входов и выходов блоков.
- Несбалансированный счётчик ссылок таблицы строк: (%d) для "%s"
-
(S internal) При выходе Perl обнаружил оставшиеся в общей таблице строк (используемой для копирования при записи и для ключей хешей) некоторые строки. Записи должны были быть освобождены, поэтому это указывает на ошибку где-то.
- Несбалансированные временные переменные: %d больше выделений, чем освобождений
-
(S internal) Код выхода обнаружил внутреннее несоответствие в количестве выделенных и освобождённых смертных скаляров.
- Вызван неопределённый формат "%s"
-
(F) Похоже, указанного формата не существует. Возможно, он находится в другом пакете? См. perlform.
- Вызван неопределённый подпрограмму сортировки "%s"
-
(F) Указанная подпрограмма сравнения сортировки, похоже, не существует. Возможно, она находится в другом пакете? См. "sort" в perlfunc.
- Вызвана неопределённая подпрограмма &%s
-
(F) Указанная подпрограмма не определена или, если она была определена, она с тех пор была удалена.
- Вызвана неопределённая подпрограмма
-
(F) Анонимная подпрограмма, которую вы пытаетесь вызвать, не определена или, если она была определена, она с тех пор была удалена.
- Неопределённая подпрограмма в сортировке
-
(F) Указанная подпрограмма сравнения сортировки объявлена, но, похоже, ещё не определена. См. "sort" в perlfunc.
- Вызван неопределённый верхний формат "%s"
-
(F) Похоже, указанного формата не существует. Возможно, он находится в другом пакете? См. perlform.
- Неопределённое значение присвоено typeglob
-
(W misc) Неопределённое значение было присвоено typeglob, аналогично
*foo = undef. Это ничего не делает. Возможно, вы имели в видуundef *foo. - %s: Неопределённая переменная
-
(A) Вы случайно выполнили свой скрипт через csh вместо Perl. Проверьте строку #!, или введите свой скрипт вручную в Perl.
- Неэкранированная левая фигурная скобка в регулярном выражении недопустима здесь в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) Простое правило, которое нужно запомнить, если вы хотите сопоставить литеральную
"{"(U+007BLEFT CURLY BRACKET) в шаблоне регулярного выражения, заключается в том, чтобы каким-то образом экранировать каждую литеральную её инстанцию. Обычно проще всего предварять её обратной косой чертой, как"\{"или заключить её в квадратные скобки ("[{]"). Если разделители шаблона также фигурные скобки, то соответствующую правую фигурную скобку ("}") также следует экранировать, чтобы избежать путаницы в анализаторе, например,qr{abc\{def\}ghi}Принудительное экранирование литеральных
"{"позволяет в будущих выпусках расширять язык Perl различными способами. Чтобы не ломать существующий код впустую, это ограничение не применяется в контекстах, где вряд ли будут какие-либо расширения, которые могут конфликтовать с использованием там"{"в качестве литерала. Те, которые не потенциально неоднозначны, не предупреждают; те, которые неоднозначны, выдают предупреждение о не устаревании.Контексты, где не генерируются предупреждения или ошибки:
-
как первый символ в шаблоне или после
"^"для привязки сопоставления к началу строки. -
как первый символ после
"|", указывающего на альтернативу. -
как первый символ в скобочном группировании, например
/foo({bar)/ /foo(?:{bar)/ -
как первый символ после квантификатора
/\s*{/
-
- Неэкранированная левая фигурная скобка в регулярном выражении передаётся в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(W regexp) Простое правило, которое нужно запомнить, если вы хотите сопоставить литеральную
"{"(U+007BLEFT CURLY BRACKET) в шаблоне регулярного выражения, заключается в том, чтобы каким-то образом экранировать каждую литеральную её инстанцию. Обычно проще всего предварять её обратной косой чертой, как"\{"или заключить её в квадратные скобки ("[{]"). Если разделители шаблона также фигурные скобки, то соответствующую правую фигурную скобку ("}") также следует экранировать, чтобы избежать путаницы в анализаторе, например,qr{abc\{def\}ghi}Принудительное экранирование литеральных
"{"позволяет в будущих выпусках расширять язык Perl различными способами. Чтобы не ломать существующий код впустую, это ограничение не применяется в контекстах, где вряд ли будут какие-либо расширения, которые могут конфликтовать с использованием там"{"в качестве литерала. Те, которые не потенциально неоднозначны, не предупреждают; те, которые неоднозначны, выдают это предупреждение. Это гарантирует, что случайная ошибка не приведёт к нежелательной компиляции шаблона.Контексты, где не генерируются предупреждения или ошибки:
-
как первый символ в шаблоне или после
"^"для привязки сопоставления к началу строки. -
как первый символ после
"|", указывающего на альтернативу. -
как первый символ в скобочном группировании, например
/foo({bar)/ /foo(?:{bar)/ -
как первый символ после квантификатора
/\s*{/
-
- Неэкранированный литерал '%c' в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(W regexp) (только при
use re 'strict')В рамках
use re 'strict'в шаблоне регулярного выражения вы включили неэкранированный}или], который был интерпретирован буквально. Эти два символа иногда являются метасимволами, а иногда литералами, в зависимости от того, что им предшествует в шаблоне. Это отличается от аналогичного), который всегда является метасимволом, если не экранирован.Это действие на расстоянии, возможно, большое расстояние, может привести к тому, что Perl проигнорирует то, что вы имели в виду. Поэтому, когда вы хотите, чтобы Perl проверил дополнительную проверку
use re 'strict', генерируется это предупреждение. Если вы имели в виду символ как литерал, просто подтвердите это Perl, поставив перед символом обратную косую черту или поместив его в скобочную группу символов (например,[}]). Если вы имели в виду закрытие соответствующего[или{, вам нужно будет вернуться назад по шаблону, чтобы понять, почему это не происходит. - Ошибка unexec %s в %s!
-
(F) Произошла ошибка в подпрограмме unexec(). Обратитесь к вашему местному представителю FSF, который, вероятно, её туда и поместил.
- Неожиданный бинарный оператор '%c' без предшествующего операнда в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) У вас было что-то вроде этого:
(?[ | \p{Digit} ])где
"|"— бинарный оператор с операндом справа, но без операнда слева. - Неожиданный символ в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) У вас было что-то вроде этого:
(?[ z ])Внутри
(?[ ]), не допускаются литеральные символы, если они не находятся внутри внутренней пары квадратных скобок, например:(?[ [ z ] ])Другой вариант — вы забыли обратную косую черту. Perl недостаточно умён, чтобы понять, что вы имели в виду.
- Неожиданное константное lvalue входа в подпрограмму через тип/targ %d:%d
-
(P) При компиляции вызова подпрограммы в контексте lvalue Perl не прошёл внутреннюю проверку согласованности. Он столкнулся с некорректным деревом операций.
- Неожиданный выход %u
-
(S) exit() был вызван или скрипт иначе завершился успешно, когда
PERL_EXIT_WARNбыл установлен вPL_exit_flags. - Неожиданная ошибка выхода %d
-
(S) Был вызван uncaught die(), когда
PERL_EXIT_WARNбыл установлен вPL_exit_flags. - Неожиданная ')' в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) У вас было что-то вроде этого:
(?[ ( \p{Digit} + ) ])Это
")"находится не на своём месте. Похоже, что что-то должно было быть объединено с цифрами, или это"+"не должно было быть там, или что-то в этом роде. Perl не может понять, что вы имели в виду. - Неожиданный ']' без последующего ')' в (?[... в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) При разборе расширенной группы символов символ ']' был встречен в точке определения, где единственное законное использование ']' — это закрытие определения группы символов в качестве части '])'. Возможно, вы забыли закрывающую скобку или иначе сбили с толку анализатор.
- Неожиданная '(' без предшествующего оператора в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) У вас было что-то вроде этого:
(?[ \p{Digit} ( \p{Lao} + \p{Thai} ) ])До
"("должен быть оператор, так как нет указаний на то, как цифры должны быть объединены с символами в лаосском и тайском алфавитах. - Не рекомендуется использовать непечатный символ Юникода U+%X для открытого обмена
-
(S nonchar) Некоторые кодовые точки, такие как U+FFFE и U+FFFF, согласно стандарту Юникода, являются непечатными символами. Это допустимые кодовые точки, но зарезервированы для внутреннего использования; поэтому приложения не должны пытаться обмениваться ими. Приложение может вообще не ожидать таких символов, и их получение может привести к ошибкам. Если вы точно знаете, что делаете, вы можете отключить это предупреждение, используя
no warnings 'nonchar';.Это не очень «серьёзная» ошибка, но она должна подниматься по умолчанию, даже если предупреждения не включены, и в настоящее время единственный способ сделать это в Perl — отметить её как серьёзную.
- Незавершенный универсальный символ свойства Юникода
-
(F) Универсальный символ свойства Юникода выглядит как ограниченное регулярное выражение (всё в фигурных скобках окружающего
\p{...}). Закрывающая разделитель для соответствия открывающей не найдена. Если открывающая разделитель экранирована, поставив перед ней обратный слэш, закрывающая также должна быть экранирована. - Свойства строк Юникода не реализованы в (?[...]) в регулярных выражениях; отмечено <-- HERE в m/%s/
-
(F) Свойство строки Юникода — это свойство, которое расширяется до последовательности нескольких символов. Пример —
\p{name=KATAKANA LETTER AINU P}, который состоит из последовательности\N{KATAKANA LETTER SMALL H}и\N{COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK}. Расширенные классы символов,(?[...])в настоящее время не могут обработать их. - Супплементный символ Юникода U+%X недопустим в UTF-8
-
(S surrogate) У вас был супплементный символ UTF-16 в контексте, где они не считаются приемлемыми. Эти кодовые точки, от U+D800 до U+DFFF (включительно), используются Юникодом только для UTF-16. Однако Perl внутренне допускает все целые числа кодовых точек без знака (до предела размера, доступного на вашей платформе), включая супплементы. Но они могут вызвать проблемы при вводе или выводе, что, вероятно, и привело к этому сообщению. Если вы действительно точно знаете, что делаете, вы можете отключить это предупреждение, используя
no warnings 'surrogate';. - Неизвестное имя символа '%s'
-
(F) Имя, которое вы использовали внутри
\N{}, неизвестно Perl. Проверьте написание. Вы можете указатьuse charnames ":loose", чтобы не нужно было быть столь точным в отношении пробелов, дефисов и регистров в стандартных именах Юникода. (Любые пользовательские псевдонимы, которые были созданы, должны быть указаны точно, независимо от того, используется:looseили нет.) Эта ошибка также может произойти, если\N{}не находится в области действия соответствующегоuse charnames. - Неизвестная конструкция '(*...)' '%s' в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) За
(*последовало что-то, что компилятор регулярных выражений не распознаёт. Проверьте написание. - Неизвестная ошибка
-
(P) Perl собирался вывести сообщение об ошибке в
$@, но переменная$@не существовала, даже после попытки её создания. - Неизвестная категория локали %d; не удаётся установить её на %s
-
(W locale) Вы использовали категорию локали, которую perl не распознаёт, поэтому не может выполнить ваш запрос. Проверьте, что вы используете допустимую категорию. Если так, см. "Многопоточная обработка" в perllocale, чтобы получить рекомендации по сообщению об этой ошибке в качестве ошибки и по модификации perl локально для удовлетворения ваших потребностей.
- Неизвестный режим open() '%s'
-
(F) Второй аргумент 3-аргументного open() не входит в список допустимых режимов:
<,>,>>,+<,+>,+>>,-|,|-,<&,>&. - Неизвестный слой PerlIO "%s"
-
(W layer) Была предпринята попытка добавить неизвестный слой в систему ввода-вывода 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) Часть условия конструкции (?(condition)if-clause|else-clause) неизвестна. Условие должно быть одним из следующих:
(1) (2) ... true if 1st, 2nd, etc., capture matched (<NAME>) ('NAME') true if named capture matched (?=...) (?<=...) true if subpattern matches (*pla:...) (*plb:...) true if subpattern matches; also (*positive_lookahead:...) (*positive_lookbehind:...) (*nla:...) (*nlb:...) true if subpattern fails to match; also (*negative_lookahead:...) (*negative_lookbehind:...) (?{ CODE }) true if code returns a true value (R) true if evaluating inside recursion (R1) (R2) ... true if directly inside capture group 1, 2, etc. (R&NAME) true if directly inside named capture (DEFINE) always false; for defining named subpatternsЗначение <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.
- Неизвестная буква опции Юникода '%c'
-
(F) Вы указали неизвестную опцию Юникода. См. документацию по переключателю
-Cв perlrun для списка известных опций. - Неизвестное значение опции Юникода %d
-
(F) Вы указали неизвестную опцию Юникода. См. документацию по переключателю
-Cв perlrun для списка известных опций. - Неизвестное имя пользовательского свойства \p{%s}
-
(F) Вы указали свойство внутри
\p{...}, которое было синтаксически допустимым пользовательским свойством, но к моменту необходимости определения не было найдено. Проверьте написание. См. "Пользовательские свойства символов" в perlunicode. - Неизвестный шаблон глагола '%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 reserved) Вы использовали незамеченное слово, которое в будущем может быть зарезервированным. Лучше поместить такое слово в кавычки, изменить его регистр или вставить подчёркивание. Вы также можете объявить его как подпрограмму.
- Нераспознанный символ %s; отмечено <-- HERE после %s около столбца %d
-
(F) Парсер Perl не знает, что делать с указанным символом в вашем Perl-скрипте (или eval) около указанного столбца. Возможно, вы пытались запустить сжатый скрипт, бинарную программу или каталог как Perl-программу.
- Нераспознанный escape \%c в классе символов в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы использовали сочетание обратного слэша и символа, которое не распознаётся Perl внутри классов символов. Это фатальная ошибка, когда класс символов используется внутри
(?[ ]).
- Нераспознанный escape \%c в классе символов, переданный в регулярное выражение; отмечено <-- HERE в m/%s/
-
(W regexp) Вы использовали комбинацию обратной косой черты и символа, которая не распознаётся Perl внутри классов символов. Символ был понят буквально, но это может измениться в будущей версии Perl. <-- HERE показывает, где в регулярном выражении был обнаружен escape.
- Нераспознанный escape \%c передан
-
(W misc) Вы использовали комбинацию обратной косой черты и символа, которая не распознаётся Perl. Символ был понят буквально, но это может измениться в будущей версии Perl.
- Нераспознанный escape \%s передан в регулярное выражение; отмечено <-- HERE в m/%s/
-
(W regexp) Вы использовали комбинацию обратной косой черты и символа, которая не распознаётся Perl. Символ(ы) был(и) понят(ы) буквально, но это может измениться в будущей версии Perl. <-- HERE показывает, где в регулярном выражении был обнаружен escape.
- Нераспознанное имя сигнала "%s"
-
(F) Вы указали имя сигнала для функции kill(), которое не было распознано. Введите
kill -lв вашей оболочке, чтобы увидеть допустимые имена сигналов в вашей системе. - Нераспознанный ключ: -%s (-h отобразит допустимые ключи)
-
(F) Вы указали недопустимый ключ для Perl. Не делайте этого. (Если вы считаете, что не указали этот ключ, проверьте строку #! , чтобы увидеть, не предоставляет ли она этот неверный ключ от вашего имени.)
- Неудачная операция %s с именем файла, содержащим перевод строки
-
(W newline) Была попытка файловой операции с именем файла, и эта операция завершилась неудачей, ВЕРОЯТНО, потому что имя файла содержало перевод строки, ВЕРОЯТНО, потому что вы забыли использовать функцию chomp(). Обратитесь к "chomp" в perlfunc.
- Вызванная недопустимая функция каталога "%s"
-
(F) Ваша машина не поддерживает opendir() и readdir().
- Недопустимая функция %s
-
(F) Эта машина, по-видимому, не реализует указанную функцию. По крайней мере, Configure так считает.
- Недопустимая функция fork
-
(F) Ваша версия исполняемого файла не поддерживает виртуальное разветвление.
Обратите внимание, что в некоторых системах, таких как OS/2, могут быть разные варианты исполняемых файлов Perl, некоторые из которых могут поддерживать fork, а некоторые - нет. Попробуйте изменить имя, которое вы используете для вызова Perl, на
perl_,perl__, и так далее. - Недопустимое кодирование скрипта %s
-
(F) Ваш файл программы начинается с маркера порядка байтов Unicode (BOM), который объявляет его в кодировке Unicode, которую Perl не может прочитать.
- Вызванная недопустимая функция сокета "%s"
-
(F) Ваша машина не поддерживает механизм сокетов Berkeley, или, по крайней мере, Configure так подумал.
- Незавершённый аргумент '(*...' в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы использовали шаблон вида
(*...:...), но не завершили шаблон символом). Исправьте шаблон и повторите попытку. - Незавершенный список атрибутов
-
(F) Лексер обнаружил что-то кроме простого идентификатора в начале атрибута, и это не был точка с запятой или начало блока. Возможно, вы слишком рано завершили список параметров предыдущего атрибута. См. атрибуты.
- Незавершенный параметр атрибута в списке атрибутов
-
(F) При разборе списка атрибутов лексер увидел открывающую (левую) скобку, но соответствующая закрывающая (правая) скобка не была найдена. Возможно, вам нужно добавить (или удалить) обратную косую черту, чтобы скобки были сбалансированы. См. атрибуты.
- Незавершённое сжатое целое число
-
(F) Аргумент для unpack("w",...) был несовместим с форматом сжатых целых чисел BER и не смог быть преобразован в целое число. См. "pack" в perlfunc.
- Незавершённая конструкция '(*...' в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы использовали шаблон вида
(*...), но не завершили шаблон символом). Исправьте шаблон и повторите попытку. - Незавершенный разделитель для документа здесь
-
(F) Это сообщение появляется, когда метка документа здесь имеет начальную кавычку, но отсутствует конечная кавычка. Возможно, вы написали:
<<"fooвместо:
<<"foo" - Незавершенный шаблон \g... в регулярном выражении; отмечено <-- HERE в m/%s/
- Незавершенный шаблон \g{...} в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) В регулярном выражении у вас был
\g, за которым не последовал правильный номер группы. В случае\g{, отсутствует закрывающая фигурная скобка; в противном случае\gдолжен следовать за целым числом. Исправьте шаблон и повторите попытку. - Незавершенный оператор <>
-
(F) Лексер увидел открытую угловую скобку в месте, где ожидал термин, поэтому ищет соответствующую правую угловую скобку и не находит её. Скорее всего, вы пропустили необходимые скобки раньше в строке, и на самом деле имели в виду "меньше чем".
- Незавершенный аргумент шаблона глагола в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы использовали шаблон вида
(*VERB:ARG), но не завершили его символом). Исправьте шаблон и повторите попытку. - Незавершенный шаблон глагола в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы использовали шаблон вида
(*VERB), но не завершили его символом). Исправьте шаблон и повторите попытку. - Попытка untie, в то время как %d внутренних ссылок все ещё существуют
-
(W untie) Копия объекта, возвращенного из
tie(илиtied), все еще была действительной, когда был вызванuntie. - Использование: POSIX::%s(%s)
-
(F) Вы вызвали функцию POSIX с неправильными аргументами. См. "FUNCTIONS" в POSIX для получения дополнительной информации.
- Использование: Win32::%s(%s)
-
(F) Вы вызвали функцию Win32 с неправильными аргументами. См. Win32 для получения дополнительной информации.
- $[ используется в %s (вы имели в виду $]?)
-
(W syntax) Вы использовали
$[в сравнении, например:if ($[ > 5.006) { ... }Вероятно, вы имели в виду
$]вместо этого.$[является основой для индексирования массивов.$]- номер версии Perl в десятичной системе. - Используйте "%s" вместо "%s"
-
(F) Второй перечисленный конструкт больше не является допустимым. Используйте первый вместо него.
- Бесполезное присваивание временной переменной
-
(W misc) Вы присвоили значение подпрограмме lvalue, но возвращенное подпрограммой значение было временным скаляром, который собирался быть удален, поэтому присвоение не имело никакого эффекта.
- Бесполезный (?-%s) - не используйте модификатор /%s в регулярном выражении; отмечено <-- HERE в m/%s/
-
(W regexp) Вы использовали внутренний модификатор, такой как (?-o), который не имеет смысла, если его не удалить из всего регулярного выражения:
if ($string =~ /(?-o)$pattern/o) { ... }должно быть записано как
if ($string =~ /$pattern/) { ... }<-- HERE показывает, где в регулярном выражении была обнаружена проблема. См. perlre.
- Бесполезная локализация %s
-
(W syntax) Локализация 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 в контексте void
-
(W void) Вы что-то сделали без побочного эффекта в контексте, который не использует возвращаемое значение, например, оператор, который не возвращает значение из блока, или левую часть оператора запятой скаляра. Очень часто это указывает не на вашу глупость, а на ошибку Perl при разборе вашей программы так, как вы думали. Например, вы получите это, если перепутаете приоритеты C с приоритетами Python и напишите
$one, $two = 1, 2;вместо
($one, $two) = (1, 2);Ещё одна распространённая ошибка — использование обычных скобок для создания ссылки на список, когда следует использовать квадратные или фигурные скобки, например, если вы напишите
$array = (1,2);вместо
$array = [1,2];Квадратные скобки явно преобразуют значение списка в скалярное значение, в то время как скобки — нет. Поэтому при оценке списка в скобках в скалярном контексте запятая обрабатывается как оператор запятой языка C, который отбрасывает левый аргумент, что вам не нужно. Смотрите perlref для получения дополнительной информации об этом.
Это предупреждение не будет выведено для числовых констант, равных 0 или 1, так как они часто используются в операторах, подобных
1 while sub_with_side_effects();О строковых константах, которые в обычных случаях оцениваются как 0 или 1, предупреждается.
- Бесполезное использование (?-p) в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(W regexp) Модификатор
pне может быть выключен после установки. Попытка сделать это бесполезна. - Бесполезное использование псевдонима "re"
-
(W) Вы сделали
use re;без каких-либо аргументов. Это не очень полезно. - Бесполезное использование sort в скалярном контексте
-
(W void) Вы использовали sort в скалярном контексте, как в :
my $x = sort @y;Это не очень полезно, и Perl в настоящее время оптимизирует это.
- Бесполезное использование %s без значений
-
(W syntax) Вы использовали функцию push() или unshift() без аргументов, кроме массива, например
push(@x)илиunshift(@foo). Это обычно не повлияет на массив, поэтому совершенно бесполезно. В принципе, push(@tied_array) может оказать какое-то влияние, если массив связан с классом, который реализует метод PUSH. В таком случае вы можете написатьpush(@tied_array,()), чтобы избежать этого предупреждения. - "use" не разрешен в выражении
-
(F) Ключевое слово "use" распознаётся и выполняется во время компиляции и не возвращает полезного значения. См. perlmod.
- Использование неявного << вместо <<"" запрещено
-
(F) Теперь вам необходимо использовать явно указанную форму, если вы хотите использовать пустую строку в качестве разделителя документа.
Использование неявного разделителя было устаревшим в Perl 5.000 и является фатальной ошибкой с версии Perl 5.28.
- Использование модификатора /c бессмысленно в s///
-
(W regexp) Вы использовали модификатор /c в подстановке. Модификатор /c в настоящее время не имеет смысла в подстановках.
- Использование модификатора /c бессмысленно без /g
-
(W regexp) Вы использовали модификатор /c с операндом регулярного выражения, но не использовали модификатор /g. В настоящее время /c имеет смысл только при использовании /g. (В будущем это может измениться.)
- Использование кодовой точки 0x%s не разрешено; максимальная допустимая кодовая точка 0x%X
- Использование кодовой точки 0x%s не разрешено; максимальная допустимая кодовая точка 0x%X в регулярном выражении; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) Вы использовали кодовую точку, которая недопустима, поскольку она слишком велика. Unicode допускает только кодовые точки до 0x10FFFF, но Perl допускает гораздо большие.
Предыдущие версии Perl допускали кодовые точки выше IV_MAX (0x7FFFFFF на 32-битных платформах, 0x7FFFFFFFFFFFFFFF на 64-битных платформах), однако это могло привести к сбою интерпретатора Perl в некоторых конструкциях, в том числе к зависанию в некоторых случаях.
Если ваш код должен работать на различных платформах, имейте в виду, что верхняя граница зависит от платформы. Она намного больше на 64-битных системах, чем на 32-битных.
Использование кодовых точек вне диапазона стало устаревшим в Perl 5.24 и стало фатальной ошибкой в Perl 5.28.
- Использование each() на хэше после вставки без сброса итератора хэша приводит к неопределённому поведению
-
(S internal) Поведение
each()после вставки является неопределённым; это может пропускать элементы или посещать их более одного раза. Рассмотрите использованиеkeys()вместоeach(). - Использование := для пустого списка атрибутов не разрешено
-
(F) Конструкция
my $x := 42интерпретировалась как эквивалентmy $x : = 42(применение пустого списка атрибутов к$x). Эта конструкция была устаревшей в 5.12.0 и теперь стала синтаксической ошибкой, поэтому:=может быть использована в качестве нового оператора в будущем.Если вам нужен пустой список атрибутов, например, в генераторе кода, добавьте пробел перед
=. - Использование %s для локали, отличной от UTF-8, неверно. Предполагается UTF-8 локаль
-
(W locale) Вы сопоставляете регулярное выражение с правилами локали, и была встречена указанная конструкция. Эта конструкция допустима только для UTF-8 локалей, а текущая локаль не является таковой. Это не имеет смысла. Perl продолжит работу, предполагая локаль Unicode (UTF-8), но результаты, скорее всего, будут неверными.
- Использование освобожденного значения в итерации
-
(F) Возможно, вы изменили итерируемый массив внутри цикла? Эта ошибка обычно вызвана кодом, похожим на следующий:
@a = (3,4); @a = () for (1,2,@a);Не следует изменять массивы во время итерации по ним. По соображениям скорости и эффективности Perl не выполняет полное подсчёт ссылок для итерируемых элементов, поэтому удаление такого элемента в середине итерации приводит к тому, что Perl видит освобожденное значение.
- Использование модификатора /g бессмысленно в split
-
(W regexp) Вы использовали модификатор /g для шаблона в операторе
split. Поскольку операторsplitвсегда пытается соответствовать шаблону повторно, модификатор/gне оказывает никакого эффекта. - Использование "goto" для перехода внутрь конструкции устарело
-
(D deprecated) Использование
gotoдля перехода из внешнего контекста во внутренний устарело и следует избегать.Это было устаревшим в Perl 5.12.
- Использование '%s' в \p{} или \P{} устарело, потому что: %s
-
(D deprecated) Некоторые свойства устарели в Unicode и в конечном итоге могут быть удалены из стандарта, после чего Perl последует этому. В то же время это сообщение выводится, чтобы уведомить вас.
- Использование наследования AUTOLOAD для неметода %s::%s() больше не разрешено
-
(F) По случайности, подпрограммы
AUTOLOADрассматривались как методы (используя иерархию@ISA), даже когда подпрограммы для автоматической загрузки вызывались как обычные функции (например,Foo::bar()), а не как методы (например,Foo->bar()или$obj->bar()).Это было устаревшим в Perl 5.004 и стало фатальной ошибкой в Perl 5.28.
- Использование %s в формате printf не поддерживается
-
(F) Вы пытались использовать функцию printf, доступную только из C. Обычно это означает, что в Perl есть лучший способ сделать это.
- Использование %s не разрешено в подмассивах регулярного выражения с дикими картами свойств Unicode; отмечено <-- ЗДЕСЬ в m/%s/
-
(F) Вы использовали подмассив с диким символом в значении свойства Unicode, и он содержал недопустимое значение. Не все возможности регулярных выражений допустимы в таких подмассивах, и это одна из них. Перепишите свой подмассив, чтобы не использовать спорную конструкцию. См. "Дикие карты в значениях свойств" в perlunicode.
- Использование -l для файлового дескриптора%s
-
(W io) Файловый дескриптор представляет собой открытый файл, и при открытии файла он уже прошёл любой символическую ссылку, которую вы, предположительно, пытались найти. Операция вернула
undef. Используйте имя файла вместо этого. - Использование ссылки "%s" в качестве индекса массива
-
(W misc) Вы пытались использовать ссылку в качестве индекса массива; это, вероятно, не то, что вы имели в виду, потому что ссылки в числовом контексте обычно представляют собой огромные числа, а значит, это обычно указывает на ошибку программиста.
Если вы действительно имели это в виду, явно преобразуйте ссылку в число, например:
$array[0+$ref]. Это предупреждение не выдаётся для перегруженных объектов, однако, потому что вы можете перегрузить операторы преобразования в числа и строки, и, предположительно, вы знаете, что делаете. - Использование строк с кодовыми точками больше 0xFF в качестве аргументов оператора %s запрещено
-
(F) Вы попытались использовать один из строковых побитовых операторов (
&или|или^или~) со строкой, содержащей кодовую точку больше 0xFF. Строковые побитовые операторы обрабатывают свои операнды как строки байтов, а значения свыше 0xFF бессмысленны в этом контексте.Некоторые случаи стали фатальными в Perl 5.28; другие — в Perl 5.32.
- Использование строк с кодовыми точками больше 0xFF в качестве аргументов к vec запрещено
-
(F) Вы пытались использовать
vecсо строкой, содержащей кодовую точку больше 0xFF, что здесь бессмысленно.Это стало фатальной ошибкой в Perl 5.32.
- Использование заражённых аргументов в %s устарело
-
(W taint, deprecated) Вы предоставили
system()илиexec()с несколькими аргументами, и по крайней мере один из них заражён. Раньше это допускалось, но в будущих версиях Perl это станет фатальной ошибкой. Очистите свои аргументы. Смотрите perlsec.
- Использование незаписанного кодового пункта или несамостоятельного графема в качестве разделителя запрещено
-
(F) Графем — это то, что носитель языка воспринимает как символ. В Юникоде (и, следовательно, в Perl) графем может фактически представлять собой несколько смежных символов, вместе образующих полный графем. Например, может быть базовый символ, такой как "R", и диакритический знак, например, «^», которые при отображении выглядят как один символ, где диакритический знак находится над "R". Perl в настоящее время разрешает использование таких диакритических знаков в качестве разделителей строк, шаблонов и т.д. При отображении диакритический знак будет выглядеть так, как будто он принадлежит символу, расположенному слева от него. Чтобы язык смог принимать графемы в качестве разделителей, мы не можем разрешить использование разделителей, которые сами по себе не являются графемами. Кроме того, разделитель должен быть уже назначен (или известно, что он никогда не будет назначен), чтобы защитить код от будущих изменений, так как иначе код, который работает сегодня, не будет компилироваться, если текущий незаписанный разделитель окажется чем-то, что не является самостоятельным графемом. Поскольку Юникод никогда не будет назначать несимвольные кодовые точки, ни кодовые точки, которые превышают допустимый максимум Юникода, они могут быть разделителями, и их использование является законным.
- Использование неинициализированного значения%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 будет правильно сопоставлять всю последовательность, за исключением случаев, когда класс инвертирован ([^...]), или escape-последовательность находится в начале или конце диапазона. В этих случаях, то, что должно произойти, совершенно не ясно. В этих обстоятельствах Perl отбрасывает все, кроме первого символа возвращаемой последовательности, что, скорее всего, не то, что вы хотите. - Использование только одиночных символов, возвращаемых \p{} в (?[...]) в регулярном выражении; отмечено <-- HERE в m/%s/
-
(W regexp) Расширенные классы символов в настоящее время не могут обрабатывать операнды, которые оцениваются более чем в один символ. Эти операнды удаляются из результатов расширения
\p{}.Эта ситуация может возникнуть, например, в
(?[ \p{name=/KATAKANA/} ])"KATAKANA LETTER AINU P" — это законное имя символа Юникода (технически «имя последовательности»), но на самом деле это два символа. Вышеприведённое выражение будет соответствовать только именам Юникода, содержащим KATAKANA, которые представляют одиночные символы.
- Использование /u для '%s' вместо /%s в регулярном выражении; отмечено <-- HERE в m/%s/
-
(W regexp) Вы использовали границу Юникода (
\b{...}или\B{...}) в части регулярного выражения, где действуют модификаторы набора символов/aили/aa. Эти два модификатора указывают на интерпретацию ASCII, и это не имеет смысла для определения Юникода. Сгенерированное регулярное выражение будет скомпилировано таким образом, что граница будет использовать весь Юникод. Никакая другая часть регулярного выражения не затронута. - Использование !~ с %s не имеет смысла
-
(F) Использование оператора
!~сs///r,tr///rилиy///rв настоящее время зарезервировано для будущего использования, так как точное поведение ещё не определено. (Простое возвращение логически противоположного значения изменённой строки обычно не очень полезно.) - Супплемент UTF-16 U+%X
-
(S surrogate) У вас был супплемент UTF-16 в контексте, где они не считаются допустимыми. Эти кодовые точки, между U+D800 и U+DFFF (включительно), используются Юникодом только для UTF-16. Однако Perl внутренне разрешает все целые кодовые точки без знака (до предела, доступного на вашей платформе), включая супплементы. Но это может вызвать проблемы при вводе или выводе, откуда, скорее всего, и появилось это сообщение. Если вы действительно понимаете, что делаете, вы можете отключить это предупреждение, используя
no warnings 'surrogate';. - Значение %s может быть "0"; проверьте с помощью defined()
-
(W misc) В условном выражении вы использовали <HANDLE>, <*> (glob),
each(), илиreaddir()в качестве булевого значения. Каждый из этих конструкций может возвращать значение "0"; это сделало бы условное выражение ложным, что, вероятно, не было вашим намерением. При использовании этих конструкций в условных выражениях проверьте их значения с помощью оператораdefined. - Значение символа CLI "%s" слишком длинное
-
(W misc) Предупреждение, специфичное для VMS. Perl попытался прочитать значение элемента %ENV из таблицы символов CLI и обнаружил результирующую строку длиной более 1024 символов. Возвращаемое значение было усечено до 1024 символов.
- Переменная "%s" недоступна
-
(W closure) Во время компиляции вложенная именованная подпрограмма или eval пытается захватить внешнюю лексическую переменную, которая в данный момент недоступна. Это может произойти по двум причинам. Во-первых, внешняя лексическая переменная может быть объявлена во внешней анонимной подпрограмме, которая ещё не была создана. (Помните, что именованные подпрограммы создаются во время компиляции, а анонимные подпрограммы — во время выполнения.) Например,
sub { my $a; sub f { $a } }В момент создания f она не может захватить текущее значение $a, так как анонимная подпрограмма ещё не была создана. И наоборот, следующее предупреждение не выведет, так как анонимная подпрограмма к этому моменту была создана и активна:
sub { my $a; eval 'sub f { $a }' }->();Вторая ситуация вызвана тем, что eval пытается получить доступ к переменной, которая вышла из области видимости, например,
sub f { my $a; sub { eval '$a' } } f()->();Здесь, когда $a в eval компилируется, f() не выполняется, поэтому её $a недоступен для захвата.
- Переменная "%s" не импортирована%s
-
(S misc) При включённом "use strict" вы обратились к глобальной переменной, которую, по-видимому, пытались импортировать из другого модуля, потому что что-то с таким же именем (обычно подпрограмма) экспортируется этим модулем. Обычно это означает, что вы использовали неправильный префикс перед именем переменной. Также возможно, что вы использовали переменную "our", область видимости которой закончилась.
- Обратный просмотр переменной длины не реализован в регулярном выражении m/%s/
-
(F) Это сообщение больше не должно отображаться начиная с Perl 5.30. Оно сохраняется в этом документе для удобства использования людьми, использующими более раннюю версию Perl.
В Perl 5.30 и ранее обратный просмотр разрешен только для подвыражений, длина которых фиксирована и известна во время компиляции. Для положительного обратного просмотра можно использовать конструкцию регулярного выражения
\Kдля достижения эквивалентной функциональности. См. (?<=pattern) и \K в perlre.Начиная с Perl 5.18, существуют неявные правила Юникода под
/iкоторые могут сопоставляться переменным образом, но вы можете не предполагать, что это возможно. Например, подстрока"ss"может сопоставляться с одиночным символом LATIN SMALL LETTER SHARP S. Вот полный список текущих правил, затрагивающих символы ASCII:ASCII sequence Matches single letter under /i FF U+FB00 LATIN SMALL LIGATURE FF FFI U+FB03 LATIN SMALL LIGATURE FFI FFL U+FB04 LATIN SMALL LIGATURE FFL FI U+FB01 LATIN SMALL LIGATURE FI FL U+FB02 LATIN SMALL LIGATURE FL SS U+00DF LATIN SMALL LETTER SHARP S U+1E9E LATIN CAPITAL LETTER SHARP S ST U+FB06 LATIN SMALL LIGATURE ST U+FB05 LATIN SMALL LIGATURE LONG S TЭтот список может измениться, но это маловероятно. Каждая последовательность ASCII может быть любой комбинацией заглавных и строчных букв.
Вы можете избежать этого, используя в утверждении обратного просмотра квадратные скобки, подобно
(?<![sS]t) (?<![fF]f[iI])Это заставляет Perl не сопоставлять лигатуры.
Другой вариант для Perl, начиная с 5.16, если вы заботитесь только об соответствиях ASCII, — добавить модификатор
/aaк регулярному выражению. Это исключит все эти неявные соответствия, таким образом, устранив это сообщение. Вы также можете сказатьuse if $] ge 5.016, re => '/aa';для применения
/aaко всем регулярным выражениям, скомпилированным в его области видимости. См. re. - Переменная "%s" %s маскирует предыдущее объявление в том же %s
-
(W shadow) Переменная "my", "our" или "state" была повторно объявлена в текущей области видимости или операторе, фактически устраняя весь доступ к предыдущему экземпляру. Это почти всегда типографическая ошибка. Обратите внимание, что предыдущая переменная будет существовать до конца области видимости или до уничтожения всех ссылок на неё.
- Синтаксис переменных
-
(A) Вы случайно выполнили скрипт через csh вместо Perl. Проверьте строку #!, или введите скрипт в Perl вручную.
-
(W closure) Внутренняя (вложенная) именная подпрограмма ссылается на лексическую переменную, определённую во внешней именованной подпрограмме.
Когда вызывается внутренняя подпрограмма, она увидит значение переменной внешней подпрограммы в том виде, в котором оно было до и во время *первого* вызова внешней подпрограммы; в этом случае, после завершения первого вызова внешней подпрограммы, внутренняя и внешняя подпрограммы больше не будут совместно использовать общее значение переменной. Другими словами, переменная больше не будет совместно использоваться.
Эту проблему обычно можно решить, сделав внутреннюю подпрограмму анонимной, используя синтаксис
sub {}. Когда создаются анонимные внутренние подпрограммы, которые ссылаются на переменные во внешних подпрограммах, они автоматически привязываются к текущим значениям таких переменных. - векторный аргумент не поддерживается в альфа-версиях
-
(S printf) Формат %vd (s)printf не поддерживает объекты версии с альфа-частями.
- Шаблон глагола '%s' имеет обязательный аргумент в регулярном выражении; отмечен <-- HERE в m/%s/
-
(F) Вы использовали шаблон глагола, который требует аргумент. Укажите аргумент или проверьте, что используете правильный глагол.
- Шаблон глагола '%s' не может иметь аргумент в регулярном выражении; отмечен <-- HERE в m/%s/
-
(F) Вы использовали шаблон глагола, которому не разрешается аргумент. Удалите аргумент или проверьте, что используете правильный глагол.
- Маркер конфликта системы управления версиями
-
(F) Парсер обнаружил строку, начинающуюся с
<<<<<<<,>>>>>>>, или=======. Эти строки могут быть оставлены системой управления версиями для обозначения конфликтов после неудачной операции слияния. - Номер версии должен быть константным числом
-
(P) Попытка перевести инструкцию
use Module n.n LISTв эквивалентный блокBEGINобнаружила внутреннее противоречие в номере версии. - Строка версии '%s' содержит недопустимые данные; игнорирование: '%s'
-
(W misc) Строка версии содержит недопустимые символы в конце, которые игнорируются.
- Предупреждение: что-то не так
-
(W) Вы передали warn() пустую строку (эквивалент
warn "") или вызвали её без аргументов, и$@было пустым. - Предупреждение: невозможно корректно закрыть дескриптор файла %s
-
(S) Неявное закрытие, выполненное open(), получило ошибку при закрытии. Это обычно указывает на то, что у вашей файловой системы закончилось место на диске.
- Предупреждение: невозможно корректно закрыть дескриптор файла: %s
- Предупреждение: невозможно корректно закрыть дескриптор файла %s: %s
-
(S io) Во время неявного закрытия дескриптора файла, когда счётчик ссылок достиг нуля, произошли ошибки, например:
{ open my $fh, '>', $file or die "open: '$file': $!\n"; print $fh $data or die "print: $!"; } # implicit close hereПоскольку различные ошибки могут быть обнаружены только 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 рассматривает этот символ как указанный код Unicode. Сочетание кодировок не UTF-8 и Unicode опасно. Практически наверняка у некоторых символов будут два разных представления. Например, в кодировке ISO 8859-7 (греческий) код 0xC3 представляет заглавную Гамму. Но также и 0x393. Это сделает сравнение строк ненадежным.
Вероятно, вам нужно выяснить, как этот многобайтовый символ смешался с вашей однобайтовой кодировкой (или, возможно, вы думали, что у вас UTF-8 кодировка, но Perl не согласен).
- Внутри []-длина '%c' не допускается
-
(F) Счётчик в шаблоне (un)pack может быть заменён на
[TEMPLATE]только еслиTEMPLATEвсегда соответствует тому же количеству упакованных байтов, которое может быть определено из самого шаблона. Это невозможно, если он содержит какие-либо из кодов @, /, U, u, w или *-длину. Переделайте шаблон. - При попытке разрешить вызов метода %s->%s() не удаётся найти пакет "%s", хотя он указан в @%s::ISA (возможно, вы забыли загрузить "%s"?)
-
(W syntax) Возможно, в
@ISAуказано неверное или не загруженное имя пакета, что может привести к выбору Perl неожиданного метода родительского класса для разрешения вызова метода. Если это сделано намеренно, вы можете сделать что-то вроде@Missing::Package::ISA = ();чтобы отключить предупреждения, в противном случае необходимо исправить имя пакета или убедиться, что пакет загружен перед вызовом метода.
- %s() с отрицательным аргументом
-
(S misc) Некоторые операции не имеют смысла с отрицательными аргументами. Выдаётся предупреждение, и операция не выполняется.
- write() на закрытом дескрипторе файла %s
-
(W closed) Дескриптор файла, в который вы записываете, был закрыт до этого момента. Проверьте свой поток управления.
- %s "\x%X" не отображается в Unicode
-
(S utf8) При чтении в разных кодировках Perl пытается отобразить всё в символы Unicode. Прочитанные байты не являются допустимыми в данной кодировке. Например
utf8 "\xE4" does not map to Unicodeесли вы пытаетесь прочитать a-diaereses Latin-1 как UTF-8.
- 'X' за пределами строки
-
(F) У вас был шаблон (un)pack, который указал относительную позицию до начала строки, которая должна была быть (un)упакована. См. "pack" в perlfunc.
- 'x' за пределами строки в unpack
-
(F) У вас был шаблон pack, который указал относительную позицию после конца строки, которая должна была быть распакована. См. "pack" в perlfunc.
- ВЫ ЕЩЁ НЕ ОТКЛЮЧИЛИ СКРИПТЫ SET-ID В ЯДРЕ!
-
(F) И, скорее всего, вы никогда этого не сделаете, потому что, вероятно, у вас нет исходных кодов вашего ядра, а ваш поставщик, вероятно, не заботится о том, чего вы хотите. Существует уязвимость в любом месте, где у вас есть скрипт set-id, и для её устранения необходимо удалить бит set-id из скрипта, который вы пытаетесь запустить. Для фактического запуска скрипта set-id лучшим вариантом является создание обёртки set-id на C вокруг вашего скрипта.
- Необходимо привести в кавычки "%s"
-
(W syntax) Вы присвоили имя голого слова обработчику сигналов. К сожалению, у вас уже есть подпрограмма с таким именем, что означает, что Perl 5 попытается вызвать подпрограмму при выполнении присваивания, что, скорее всего, не то, что вы хотите. (Если это именно то, что вы хотите, поставьте & перед ним.)
- Ваши случайные числа не так уж случайны
-
(F) При попытке инициализации случайного генератора для хешей Perl не смог получить случайность от вашей системы. Это обычно указывает на серьёзную проблему.
- Нулевая длина \N{} в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Экранированные обозначения символов Unicode (
\N{...}) могут возвращать последовательность нулевой длины. Такое обозначение использовано в расширенном классе символов, т.е.(?[...]), или вuse re 'strict', что запрещено. Проверьте, что используется правильное обозначение и правильный обработчик charnames. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема.
СМОТРИТЕ ТАКЖЕ
© 1993–2021 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.34.0/perldiag