perldiag
СОДЕРЖАНИЕ
ИМЯ
perldiag - различные диагностические сообщения Perl
ОПИСАНИЕ
Эти сообщения классифицированы следующим образом (в порядке возрастания отчаяния):
(W) A warning (optional).
(D) A deprecation (enabled by default).
(S) A severe warning (enabled by default).
(F) A fatal error (trappable).
(P) An internal error you should never see (trappable).
(X) A very fatal error (nontrappable).
(A) An alien error message (not generated by Perl). Большинство сообщений из первых трёх категорий выше (W, D & S) могут быть контролируемы с помощью прагмы warnings.
Если сообщение может быть контролируемо с помощью прагмы warnings, его категория предупреждений включена в классификацию с буквенным обозначением в описании ниже. Например, (W closed) означает предупреждение в категории closed.
Дополнительные предупреждения включаются с помощью прагмы warnings или переключателей -w и -W. Предупреждения могут быть перехвачены, установив $SIG{__WARN__} в ссылку на процедуру, которая будет вызвана при каждом предупреждении вместо его вывода. См. perlvar.
Серьезные предупреждения всегда включены, если они не отключены явно с помощью прагмы warnings или переключателя -X.
Ловимые ошибки могут быть перехвачены с помощью оператора eval. См. "eval" в perlfunc. Почти во всех случаях предупреждения могут быть выборочно отключены или повышены до фатальных ошибок с помощью прагмы warnings. См. warnings.
Сообщения отсортированы по алфавиту без учёта регистра. Некоторые сообщения являются общими. Места, которые различаются, обозначены %s или другим эскейпом в стиле printf. Эти эскейпы игнорируются сортировкой по алфавиту, как и все символы, кроме букв. Чтобы найти ваше сообщение, просто проигнорируйте все, что не является буквой.
- accept() на закрытом сокете %s
-
(W closed) Вы пытались выполнить accept на закрытом сокете. Вы забыли проверить значение возврата вызова socket()? См. "accept" в perlfunc.
- Использование алиасов через ссылку — экспериментальная функция
-
(S experimental::refaliasing) Это предупреждение выводится, если вы используете конструктор ссылок в левой части присваивания для создания алиаса одной переменной на другую. Просто заглушите предупреждение, если вы хотите использовать эту функцию, но знайте, что при этом вы рискуете использовать экспериментальную функцию, которая может измениться или быть удалена в будущих версиях Perl:
no warnings "experimental::refaliasing"; use feature "refaliasing"; \$x = \$y; - Выделение памяти слишком велико: %x
-
(X) Вы не можете выделить более 64 КБ на компьютере с MS-DOS.
- '%c' разрешен только после типов %s в %s
-
(F) Модификаторы '!', '<' и '>' разрешены в pack() или unpack() только после определённых типов. См. "pack" в perlfunc.
- alpha->numify() — с потерей информации
-
(W numeric) Значение типа alpha не может быть преобразовано в числовой тип без потери информации.
- Неоднозначный вызов разрешён как CORE::%s(), укажите или используйте &
-
(W ambiguous) Вы объявили подпрограмму с тем же именем, что и ключевое слово 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 ambiguous) Вы написали что-то, что может интерпретироваться не так, как вы думали. Обычно его легко устранить, добавив пропущенную кавычку, оператор, пару скобок или объявление.
- Неоднозначное использование -%s разрешено как -&%s()
-
(S ambiguous) Вы написали что-то вроде
-foo, что может быть строкой"-foo"или вызовом функцииfooс отрицанием. Если вы имели в виду строку, просто напишите"-foo". Если вы имели в виду вызов функции, напишите-foo(). - Неоднозначное использование %c интерпретировано как оператор %c
-
(S ambiguous)
%,&и*являются как инфиксными операторами (остаток, побитовое И и умножение), так и начальными специальными символами (обозначающими хэши, подпрограммы и типглобы), и вы написали что-то вроде*foo * foo, что может быть интерпретировано как одно из них. Мы предположили, что вы имели в виду инфиксный оператор, но, пожалуйста, попробуйте сделать это более ясным — в приведённом примере вы можете написать*foo * foo(), если действительно хотели умножить глоб на результат вызова функции. - Неоднозначное использование %c{%s} разрешено как %c%s
-
(W ambiguous) Вы написали что-то вроде
@{foo}, что может означать обращение к переменной@fooили вызов функции с именем foo и её разыменование как ссылки на массив. Если вы хотели переменную, вы можете просто написать@foo. Если вы хотели вызвать функцию, напишите@{foo()}... или вы могли бы просто не иметь переменной и функции с одинаковым именем и сэкономить себе массу проблем. - Неоднозначное использование %c{%s[...]} разрешено как %c%s[...]
- Неоднозначное использование %c{%s{...}} разрешено как %c%s{...}
-
(W ambiguous) Вы написали что-то вроде
${foo[2]}(где foo представляет собой имя ключевого слова Perl), что может означать поиск элемента с номером 2 в массиве с именем@foo, в этом случае, пожалуйста, напишите$foo[2], или вы могли иметь в виду передачу безымянного массива в функцию с именем foo, а затем выполнить скалярное разыменование значения, которое она возвращает. Если вы имели в виду это, напишите${foo([2])}.В регулярных выражениях синтаксис
${foo[2]}иногда необходим для различения индексов массивов и классов символов./$length[2345]/, например, будет интерпретирован как$length, за которым следует класс символов[2345]. Если вам нужен индекс массива, вы можете избежать предупреждения, изменив/${length[2345]}/на громоздкое/${\$length[2345]}/, переименовав свой массив на что-то, что не совпадает с встроенным ключевым словом, или просто отключив предупреждения с помощьюno warnings 'ambiguous';. - '|' и '<' не могут быть одновременно указаны в командной строке
-
(F) Ошибка, характерная для VMS. Perl выполняет перенаправление командной строки самостоятельно и обнаружил, что STDIN является конвейером, и вы также пытались перенаправить STDIN с помощью '<'. Только один поток STDIN для клиента, пожалуйста.
- '|' и '>' не могут быть одновременно указаны в командной строке
-
(F) Ошибка, характерная для VMS. Perl выполняет перенаправление командной строки самостоятельно и считает, что вы пытаетесь перенаправить вывод в файл и в конвейер в другую команду. Вам нужно выбрать одно или другое, хотя ничего не мешает вам перенаправить в программу или скрипт Perl, который "разбивает" вывод на два потока, например
open(OUT,">$ARGV[0]") or die "Can't write to $ARGV[0]: $!"; while (<STDIN>) { print; print OUT; } close OUT; - Применение %s к %s будет действовать на скаляр(%s)
-
(W misc) Операторы совпадения с образцом (
//), подстановки (s///) и транслитерации (tr///) работают со скалярными значениями. Если вы примените один из них к массиву или хэшу, он преобразует массив или хэш в скалярное значение (длина массива или информация о населении хэша) и затем работает с этим скалярным значением. Вероятно, это не то, что вы имели в виду. См. "grep" в perlfunc и "map" в perlfunc для альтернатив. - Аргумент слишком короткий для msgsnd
-
(F) msgsnd() требует строки длиной не менее sizeof(long).
- Аргумент "%s" не является числовым%s
-
(W numeric) Указанная строка была подана в качестве аргумента оператору, который ожидал числового значения вместо этого. Если вам повезёт, сообщение укажет, какой оператор так неудачно поступил.
Обратите внимание, что для
InfиNaN(бесконечность и не число) определение "числового" значения несколько необычно: сами строки (например, "Inf") считаются числовыми, а всё, что следует за ними, — не числовым. - Список аргументов не закрыт для слоя PerlIO "%s"
-
(W layer) При добавлении слоя с аргументами в систему ввода/вывода Perl вы забыли закрывающую скобку ) для списка аргументов. (Слои занимаются преобразованием данных между внешними и внутренними представлениями.) Perl прекратил разбор списка слоёв на этом этапе и не попытался добавить этот слой. Если ваша программа не явно запросила неисправную операцию, это может быть результатом значения переменной среды PERLIO.
- Аргумент "%s" обработан как 0 в инкременте (++)
-
(W numeric) Указанная строка была подана в качестве аргумента оператору
++, который ожидает либо число, либо строку, соответствующую/^[a-zA-Z]*[0-9]*\z/. См. "Автоинкремент и автодекремент" в perlop для получения подробной информации. - Массив, переданный в stat, будет преобразован в скаляр%s
-
(W syntax) Вы вызвали stat() для массива, но массив будет преобразован в скаляр — количество элементов в массиве.
- Параметр подписи должен начинаться с '$', '@' или '%'
-
(F) Каждое объявление параметра подписи подпрограммы должно начинаться со знака; например:
sub foo ($a, $, $b = 1, @c) {} - Параметр "slurpy" не может иметь значение по умолчанию
-
(F) Только скалярные параметры подписи подпрограммы могут иметь значение по умолчанию; например:
sub foo ($a = 1) {} # legal sub foo (@a = (1)) {} # invalid sub foo (%a = (a => b)) {} # invalid - Ошибка утверждения: %s
-
(X) В пакете malloc, который идёт с Perl, произошла внутренняя ошибка.
- Ошибка утверждения %s: файл "%s", строка %d
-
(X) Произошла общая ошибка утверждения. Необходимо изучить соответствующий файл.
- Присвоенное значение не является ссылкой
-
(F) Вы пытались присвоить что-то, что не является ссылкой, ссылке-назначению (например,
\$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() освободит неиспользуемый скаляр, когда попытается его освободить.
- Попытка освободить неиспользуемые указатели на глобальные переменные
-
(S внутреннее) Счётчики ссылок были повреждены для псевдонимов символов.
- Попытка освободить неиспользуемый скаляр: SV 0x%x
-
(S внутреннее) Perl пытался уменьшить счётчик ссылок скаляра, чтобы проверить, достигнет ли он 0, и обнаружил, что он уже достиг 0 ранее, и должен был быть освобождён, и, по сути, вероятно, был освобождён. Это может указывать на то, что SvREFCNT_dec() был вызван слишком много раз, или SvREFCNT_inc() был вызван слишком мало раз, или SV был помечен как уничтожаемый, когда это не нужно было делать, или память повреждена.
- Попытка упаковать указатель на временное значение
-
(W pack) Вы попытались передать временное значение (например, результат функции или вычисленного выражения) в шаблон "p" pack(). Это означает, что результат содержит указатель на местоположение, которое может стать недоступным в любое время, даже до конца текущего оператора. Используйте литералы или глобальные значения в качестве аргументов для шаблона "p" pack(), чтобы избежать этого предупреждения.
- Попытка перезагрузки %s прервана.
-
(F) Вы попытались загрузить файл с
useилиrequire, который уже не удалось скомпилировать. Perl не будет пытаться скомпилировать этот файл снова, пока вы не удалите его запись из %INC. См. "require" в perlfunc и "%INC" в perlvar. - Попытка установить длину освобождённого массива
-
(W misc) Вы попытались установить длину массива, который был освобождён. Вы можете сделать это, сохранив ссылку на скаляр, представляющий последний индекс массива, и позднее присвоив значение через эту ссылку. Например
$r = do {my @a; \$#a}; $$r = 503 - Попытка использования ссылки как lvalue в substr
-
(W substr) Вы предоставили ссылку в качестве первого аргумента для substr() в качестве lvalue, что довольно необычно. Возможно, вы забыли сначала разыменовать её. См. "substr" в perlfunc.
- Атрибут прототипа (%s) отбрасывает более ранние атрибуты прототипа в том же подпрограмме
-
(W misc) Подпрограмма была объявлена как sub foo : prototype(A) : prototype(B) {}, например. Поскольку каждая подпрограмма может иметь только один прототип, более ранние объявления отбрасываются, а последнее применяется.
- av_reify вызван для связанного массива
-
(S отладка) Это указывает на то, что что-то пошло не так, и Perl очень запутался в вопросе о
@_или@DB::args, которые были связаны. - Неправильная длина аргумента для %s, фактическое значение %u, ожидаемое %d
-
(F) Вы передали буфер неправильного размера одной из функций msgctl(), semctl() или shmctl(). В терминологии C правильные размеры соответственно равны sizeof(struct msqid_ds *), sizeof(struct semid_ds *) и sizeof(struct shmid_ds *).
- Неправильный шаблон подстановки, обработанный eval
-
(F) Вы использовали переключатель
/eдля оценки замены подстановки, но Perl обнаружил синтаксическую ошибку в коде для оценки, скорее всего, неожиданную правую фигурную скобку '}'. - Неверный дескриптор файла: %s
-
(F) Символ был передан чему-то, ожидающему дескриптор файла, но у символа нет ассоциированного дескриптора файла. Возможно, вы не выполняли open(), или это было сделано в другом пакете.
- Ошибка free() проигнорирована
-
(S malloc) Внутренняя процедура вызвала free() для чего-то, что никогда не было выделено с помощью malloc(). Обязательно, но может быть отключено установкой переменной окружения
PERL_BADFREEв 0.Это сообщение можно часто видеть с DB_File на системах с "жёсткой" динамической компоновкой, таких как
AIXиOS/2. Это ошибкаBerkeley DB, которая остаётся незамеченной, еслиDBиспользует снисходительный системный malloc(). - Неправильный массив
-
(P) Одна из внутренних процедур работы с массивами получила в качестве аргумента null-указатель на массив.
- Неправильно размещенные скобки
-
(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::, но компилятор не обнаружил других использований этого пространства имён до этого момента. Возможно, вам нужно предварительно объявить пакет? - BEGIN завершился ошибкой — компиляция прервана
-
(F) При выполнении подпрограммы BEGIN возникло непреобразованное исключение. Компиляция немедленно останавливается, и интерпретатор завершается.
- BEGIN небезопасен после ошибок — компиляция прервана
-
(F) Perl обнаружил подпрограмму
BEGIN {}(или директивуuse, что подразумеваетBEGIN {}) после одной или нескольких ошибок компиляции. Поскольку предполагаемая среда дляBEGIN {}не могла быть гарантирована (из-за ошибок), а последующий код, вероятно, зависит от её корректной работы, Perl просто отказался. - \%d лучше записать как $%d
-
(W syntax) Вне шаблонов обратные ссылки существуют как переменные. Использование обратных слешей сохраняется справа от подстановки, но стилистически лучше использовать форму переменной, так как другие программисты Perl будут её ожидать, и она лучше работает, если есть более 9 обратных ссылок.
- Двоичное число > 0b11111111111111111111111111111111 — непереносимо
-
(W portable) Заданное вами двоичное число больше, чем 2**32-1 (4294967295), и поэтому непереносимо между системами. См. perlport для получения дополнительной информации о проблемах переносимости.
- bind() на закрытом сокете %s
-
(W closed) Вы пытались выполнить bind на закрытом сокете. Вы забыли проверить значение возврата вызова socket()? См. "bind" в perlfunc.
- binmode() на закрытом файловом дескрипторе %s
-
(W unopened) Вы пытались выполнить binmode() на файловом дескрипторе, который никогда не открывался. Проверьте ваш поток управления и количество аргументов.
- Размер битового вектора > 32 — непереносимо
-
(W portable) Использование битовых векторов размером больше 32 непереносимо.
- Странная копия %s
-
(P) Perl обнаружил попытку копирования внутреннего значения, которое не может быть скопировано.
- Странный SvTYPE [%d]
-
(P) При запуске нового потока или возвращении значений из потока Perl обнаружил неверный тип данных.
- Оба или ни один край диапазона должны быть Unicode в регулярном выражении; отмечено <-- HERE в m/%s/
-
(W regexp) (только в
use re 'strict'или в(?[...]))В квадратной скобке в шаблоне регулярного выражения у вас был диапазон, в котором ровно один край был указан с помощью
\N{}, а другой край указан с помощью непереносимого механизма. Perl обрабатывает диапазон как диапазон Unicode, то есть все символы в нём считаются символами Unicode, и на некоторых платформах, на которых работает Perl, их кодовые точки могут быть разными. Например,[\N{U+06}-\x08]обрабатывается так, как будто вы сказали[\N{U+06}-\N{U+08}], то есть она соответствует символам, кодовые точки которых в Unicode равны 6, 7 и 8. Но это\x08может указывать на что-то другое, поэтому генерируется предупреждение. - Переполнение буфера в prime_env_iter: %s
-
(W internal) Предупреждение, специфичное для VMS. При подготовке Perl к итерации по %ENV он столкнулся с логическим именем или определением символа, которое было слишком длинным, поэтому оно было усечено до показанной строки.
- Вызов обратного вызова exit
-
(F) Подпрограмма, вызываемая из внешнего пакета с помощью call_sv(), завершила работу, вызвав exit.
- %s() вызван слишком рано для проверки прототипа
-
(W prototype) Вы вызвали функцию, у которой есть прототип, прежде чем анализатор увидел определение или объявление для неё, и Perl не смог проверить, соответствует ли вызов прототипу. Вам нужно либо добавить раннее объявление прототипа для интересующей вас подпрограммы, либо переместить определение подпрограммы перед вызовом для правильной проверки прототипа. В качестве альтернативы, если вы уверены, что вызываете функцию правильно, вы можете поставить амперсанд перед именем, чтобы избежать предупреждения. См. perlsub.
- Невозможно chr %f
-
(F) Вы передали неверное число (например, бесконечность или не число) в
chr. - Невозможно выполнить редактирование на месте %s: %s
-
(F) Похоже, ваш скрипт Perl изменил каталог во время выполнения редактирования на месте файла, указанного относительным путём, и ваша система не включает необходимые функции POSIX для работы с относительными каталогами.
- Невозможно сжать %f в pack
-
(F) Вы пытались сжать бесконечность или не число как целое без знака с помощью BER, что не имеет смысла.
- Невозможно сжать целое число в pack
-
(F) Аргумент для pack("w",...) был слишком большим для сжатия. Формат сжатого целого числа BER может использоваться только с положительными целыми числами, а вы пытались сжать очень большое число (> 1e308). См. "pack" в perlfunc.
- Невозможно сжать отрицательные числа в pack
-
(F) Аргумент для pack("w",...) был отрицательным. Формат сжатого целого числа BER может использоваться только с положительными целыми числами. См. "pack" в perlfunc.
- Невозможно преобразовать ссылку на %s в типглоб
-
(F) Вы напрямую манипулировали таблицей символов Perl, сохранили ссылку в ней, а затем попытались получить доступ к этому символу с помощью обычного синтаксиса Perl. Доступ заставляет Perl автоматизировать инициализацию этого типглоба, но нет законного преобразования из этого типа ссылки в типглоб.
- Невозможно скопировать в %s
-
(P) Perl обнаружил попытку копирования значения в внутренний тип, которому нельзя напрямую присвоить.
- Невозможно найти кодировку "%s"
-
(S io) Вы пытались применить несуществующую кодировку к файловому дескриптору, либо с помощью open(), либо binmode().
- Невозможно открыть %s как dirhandle: он уже открыт как filehandle
-
(F) Вы пытались использовать opendir() для привязки dirhandle к символу (глобу или скаляру), который уже содержит filehandle. Поскольку этот idiom может сделать ваш код запутанным, он был устаревшим в Perl 5.10. Начиная с Perl 5.28, это фатальная ошибка.
- Невозможно открыть %s как filehandle: он уже открыт как dirhandle
-
(F) Вы пытались использовать open() для привязки filehandle к символу (глобу или скаляру), который уже содержит dirhandle. Поскольку этот idiom может сделать ваш код запутанным, он был устаревшим в 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-стиля (va_list). Это в настоящее время не поддерживается. Авторы XS, желающие это сделать, должны вместо этого создать C-массивSV*скаляров, содержащих аргументы. - Можно сжимать только целые числа без знака в pack
-
(F) Аргумент для pack("w",...) не был целым числом. Формат сжатого целого числа BER может использоваться только с положительными целыми числами, а вы пытались сжать что-то другое. См. "pack" в perlfunc.
- Невозможно благословить значение без ссылки
-
(F) Благословлять можно только ссылки. Так Perl "принуждает" инкапсуляцию объектов. См. perlobj.
- Невозможно использовать «break» в итераторе цикла
-
(F) Вы вызвали
break, но находитесь в блокеforeach, а не в блокеgiven. Вероятно, вы имели в виду использоватьnextилиlast. - Невозможно использовать «break» вне заданного блока
-
(F) Вы вызвали
break, но не находитесь внутри блокаgiven. - Невозможно вызвать метод «%s» для неопределённого значения
-
(F) Вы использовали синтаксис вызова метода, но ячейка, заполненная ссылкой на объект или именем пакета, содержит неопределённое значение. Следующий код воспроизведёт ошибку:
$BADREF = undef; process $BADREF 1,2,3; $BADREF->process(1,2,3); - Невозможно вызвать метод «%s» для неблагословлённой ссылки
-
(F) Вызов метода должен знать, в каком пакете он должен выполняться. Обычно он узнаёт это из ссылки на объект, которую вы передаёте, но в данном случае вы не передали ссылку на объект. Ссылка не является ссылкой на объект, пока она не будет благословлена. См. perlobj.
- Невозможно вызвать метод «%s» без ссылки на пакет или объект
-
(F) Вы использовали синтаксис вызова метода, но слот, заполненный ссылкой на объект или именем пакета, содержит выражение, возвращающее определённое значение, которое не является ни ссылкой на объект, ни именем пакета. Ошибка может быть воспроизведена следующим примером:
$BADREF = 42; process $BADREF 1,2,3; $BADREF->process(1,2,3); - Невозможно вызвать mro_isa_changed_in() для анонимной таблицы символов
-
(P) Perl запутался, является ли хэш обычным хэшем или хэшем таблицы символов при попытке обновления кэшей @ISA.
- Невозможно вызвать mro_method_changed_in() для анонимной таблицы символов
-
(F) Модуль XS попытался вызвать
mro_method_changed_inдля хэша, который не был прикреплён к таблице символов. - Невозможно перейти в %s
-
(F) Вы вызвали
perl -x/foo/bar, но /foo/bar не является каталогом, в который можно перейти, возможно, потому что он не существует. - Невозможно проверить файловую систему скрипта "%s" на nosuid
-
(P) По какой-то причине невозможно проверить файловую систему скрипта на nosuid.
- Невозможно преобразовать %s в %s в %s
-
(F) Определённые типы SVs, в частности, реальные записи таблицы символов (typeglobs), не могут быть вынуждены перестать быть тем, чем они являются. Поэтому нельзя выполнить следующие действия:
*foo += 1;Можно выполнить
$foo = *foo; $foo += 1;но тогда $foo больше не содержит glob.
- Невозможно использовать "continue" вне блока when
-
(F) Вы вызвали
continue, но вы не находитесь внутри блокаwhenили блокаdefault. - Невозможно создать почтовый ящик канала
-
(P) Ошибка, специфичная для VMS. Процесс страдает от исчерпания квот или других проблем с подключением.
- Невозможно объявить %s в "%s"
-
(F) В качестве переменных "my", "our" или "state" могут быть объявлены только скалярные, массивы и хэши. Их имена должны быть обычными идентификаторами.
- Невозможно использовать "default" вне топикалайзера
-
(F) Вы использовали блок
default, который находится не внутри циклаforeachни в блокеgiven. (Обратите внимание, что эта ошибка выдаётся при выходе из блокаdefault, поэтому вы не получите ошибку, если используете явный блокcontinue.) - Невозможно определить класс оператора %s, предполагая BASEOP
-
(S) Это предупреждение указывает на ошибку во внутренних механизмах perl. Perl пытался определить класс (например, LISTOP) определённого оператора, но не смог. Это, вероятно, связано с ошибкой во внутренних механизмах perl или в коде XS, который манипулирует деревьями операторов perl.
- Невозможно выполнить inplace редактирование: %s не является обычным файлом
-
(S inplace) Вы попытались использовать переключатель -i со специальным файлом, например, файлом в /dev, FIFO или недопустимым каталогом. Файл был проигнорирован.
- Невозможно выполнить inplace редактирование в %s: %s
-
(S inplace) Создание нового файла не удалось по указанной причине.
- Невозможно выполнить inplace редактирование: %s не будет уникальным
-
(S inplace) Ваша файловая система не поддерживает имена файлов длиной более 14 символов, и Perl не смог создать уникальное имя файла во время inplace редактирования с переключателем -i. Файл был проигнорирован.
- Невозможно выполнить %s("%s") в локали без UTF-8; преобразовано в "%s".
-
(W locale) Вы 1) работаете в "
use locale"; 2) текущая локали не является UTF-8; 3) вы пытались выполнить операцию изменения регистра на указанном символе Юникода; и 4) результат этой операции смешивает правила Юникода и локали, что, вероятно, приводит к конфликту. Смешивание разных типов правил запрещено, поэтому операция не была выполнена; вместо этого результатом является указанное значение, которое использует исключительно правила Юникода. В большинстве случаев это исходный символ без изменений.В целом, не рекомендуется смешивать локали без UTF-8 и Юникод, и эта проблема одна из причин этого. Это предупреждение выводится, когда правила Юникода обычно приводят к тому, что результат этой операции содержит символ, находящийся в диапазоне, заданном локалью, 0..255, и, следовательно, он подчиняется правилам локали, а не Юникода.
Если вы используете локаль только для характеристик, связанных с числовым и временным форматом (и не
LC_CTYPE), рассмотрите использование ограниченной формы псевдонима локали (см. "Псевдоним "use locale" в perllocale) например, "use locale ':not_characters'".Обратите внимание, что неудачные операции изменения регистра, выполненные в результате сопоставления с регистронезависимым
/iрегулярным выражением, будут отображаться в этом предупреждении как операцияfc(так как это то, что движок регулярных выражений вызывает за кулисами). - Невозможно выполнить waitpid с флагами
-
(F) На этой машине отсутствуют либо waitpid(), либо wait4(), поэтому эмулируется только waitpid() без флагов.
- Невозможно эмулировать -%s в строке #!
-
(F) Строка #! указывает на переключатель, который не имеет смысла в данный момент. Например, было бы странно поместить -x в строку #!.
- Невозможно %s %s-endian %ss на этой платформе
-
(F) Порядок байтов вашей платформы не является ни big-endian, ни little-endian, или размер указателя очень странный. Упаковка и распаковка значений с плавающей точкой и указателей big- или little-endian может быть невозможна. См. "pack" в perlfunc.
- Невозможно выполнить exec "%s": %s
-
(W exec) Вызов system(), exec() или piped open не смог выполнить указанную программу по указанной причине. Типичные причины включают: неправильные разрешения на файл, файл не был найден в
$ENV{PATH}, исполняемый файл был скомпилирован для другой архитектуры или строка #! в скрипте указывает на интерпретатор, который не может быть запущен по аналогичным причинам. (Возможно, ваша система вообще не поддерживает #!). - Невозможно выполнить exec %s
-
(F) Perl пытался выполнить указанную программу за вас, так как это говорилось в строке #!. Если вы этого не хотели, вам может потребоваться указать "perl" в строке #!.
- Невозможно выполнить %s
-
(F) Вы использовали переключатель -S, но копии исполняемого скрипта в PATH не имели правильных разрешений.
- Невозможно найти opnumber для "%s"
-
(F) Строка вида
CORE::wordбыла передана в prototype(), но встроенная функция с именемwordотсутствует. - Невозможно найти метку %s
-
(F) Вы пытались перейти к метке, которая не определена. См. "goto" в perlfunc.
- Невозможно найти %s в PATH
-
(F) Вы использовали переключатель -S, но скрипт для выполнения не был найден в PATH.
- Невозможно найти %s в PATH, '.' не в PATH
-
(F) Вы использовали переключатель -S, но скрипт для выполнения не был найден в PATH или, по крайней мере, не с правильными разрешениями. Скрипт существует в текущем каталоге, но PATH запрещает его запуск.
- Невозможно найти символ завершения строки %s до конца файла
-
(F) Строки Perl могут занимать несколько строк. Это сообщение означает, что заключительный разделитель опущен. Из-за скобок в кавычках, учитывающих уровни вложенности, отсутствует закрывающая скобка:
print q(The character '(' starts a side comment.);Если вы получаете эту ошибку из документа здесь, возможно, вы включили невидимые пробелы перед или после закрывающего тега или отсутствует перевод строки после него. Хороший редактор кода предоставит способ найти эти символы (или их отсутствие). См. perlop для подробной информации о документах здесь.
- Невозможно найти определение свойства Юникода "%s"
- Невозможно найти определение свойства Юникода "%s" в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Указанное вами свойство, доступное через
\pили\P, неизвестно Perl. Возможно, вы неправильно написали имя? См. "Свойства, доступные через \p{} и \P{}" в perluniprops для полного списка доступных официальных свойств. Если это пользовательское свойство пользовательское свойство, оно должно быть определено к моменту сопоставления регулярного выражения.Если вы не имели в виду использовать свойство Юникода, экранируйте
\p, либо\\p(только\p) или\Q\p(остальная часть строки или до\E). - Невозможно создать дочерний процесс: %s
-
(F) При попытке создать дочерний процесс при открытии канала произошла критическая ошибка.
- Не удалось создать дочерний процесс, повторная попытка через 5 секунд
-
(W pipe) Создание дочернего процесса в канале завершилось с ошибкой EAGAIN и будет повторено через пять секунд.
- Невозможно получить имя файла - устаревший буфер stat?
-
(S) Предупреждение, специфичное для VMS. Оно возникает из-за различий в проверке доступа под VMS и в модели Unix, предполагаемой Perl. Под VMS проверки доступа выполняются по имени файла, а не по битам в буфере stat, так что можно учесть ACL и другие защиты. К сожалению, Perl предполагает, что буфер stat содержит всю необходимую информацию, и передаёт его, а не имя файла, в процедуру проверки доступа. Perl будет пытаться получить имя файла, используя имя устройства и FID, присутствующие в буфере stat, но это работает только если вы не сделали последующий вызов процедуры CRTL stat(), поскольку имя устройства перезаписывается при каждом вызове. Если появляется это предупреждение, поиск имени не удался, а процедура проверки доступа отказалась и вернула FALSE, просто для консервативности. (Примечание: процедура проверки доступа знает об операторе Perl
statи файловых тестах, поэтому вы никогда не увидите это предупреждение в ответ на команду Perl; оно возникает только в том случае, если какой-либо внутренний код ненадлежащим образом использует буферы stat.) - Невозможно получить имя устройства почтового ящика канала
-
(P) Ошибка, специфичная для VMS. После создания почтового ящика, функционирующего как канал, Perl не может получить его имя для последующего использования.
- Не удалось получить значение параметра SYSGEN для MAXBUF
-
(P) Ошибка, характерная для VMS. Perl запросил у $GETSYI размер буферов почтового ящика, но не получил ответа.
- Невозможно выполнить "goto" в двоичном или списочном выражении
-
(F) Был выполнен оператор "goto" для перехода в середину двоичного или списочного выражения. Перейти туда невозможно. Причина этого ограничения заключается в том, что интерпретатор запутается в количестве аргументов, что приведёт к повреждению стека или аварийному завершению. Эта ошибка возникает в таких случаях:
goto F; print do { F: }; # Can't jump into the arguments to print goto G; $x + do { G: $y }; # How is + supposed to get its first operand? - Невозможно выполнить "goto" в блок "given"
-
(F) Был выполнен оператор "goto" для перехода в середину блока
given. Перейти туда невозможно. См. "goto" в perlfunc. - Невозможно выполнить "goto" в середину цикла foreach
-
(F) Был выполнен оператор "goto" для перехода в середину цикла foreach. Перейти туда невозможно. См. "goto" в perlfunc.
- Невозможно выполнить "goto" за пределы псевдоблока
-
(F) Был выполнен оператор "goto" для перехода за пределы структуры, которая может выглядеть как блок, но таковым не является. Обычно это происходит при попытке перехода за пределы блока sort() или подпрограммы, что недопустимо. См. "goto" в perlfunc.
- Невозможно выполнить goto подпрограммы из eval-%s
-
(F) Вызов "goto subroutine" не может использоваться для перехода из eval "строка" или блока.
- Невозможно выполнить goto подпрограммы из подпрограммы сортировки (или подобного обратного вызова)
-
(F) Вызов "goto subroutine" не может использоваться для перехода из подпрограммы сравнения для sort(), или из подобного обратного вызова (например, функция reduce() в List::Util).
- Невозможно выполнить goto подпрограммы вне подпрограммы
-
(F) Глубоко магический вызов "goto subroutine" может только заменить один вызов подпрограммы другим. Он не может создать вызов подпрограммы из ничего. В общем случае вы должны вызывать его только из подпрограммы AUTOLOAD. См. "goto" в perlfunc.
- Невозможно проигнорировать сигнал CHLD, принудительно устанавливается значение по умолчанию
-
(W signal) Perl обнаружил, что он запущен с отключённым сигналом SIGCHLD (иногда известным как SIGCLD). Так как отключение этого сигнала повлияет на правильное определение статуса завершения дочерних процессов, Perl сбросил сигнал на его значение по умолчанию. Эта ситуация обычно указывает на то, что родительская программа, в которой может работать Perl (например, cron), очень небрежно работает.
- Невозможно убить процесс с нечисловым идентификатором
-
(F) Идентификаторы процессов должны быть целыми числами (со знаком). Попытка выполнить kill() с неопределённым, пустым строковым или иным нечисловым идентификатором процесса является фатальной ошибкой.
- Невозможно выполнить "last" вне блока цикла
-
(F) Был выполнен оператор "last" для выхода из текущего блока, но текущего блока нет. Обратите внимание, что блок "if" или "else" не считается блоком "цикла", как и блок, предоставленный для sort(), map() или grep(). Обычно можно добиться того же результата, удвоив фигурные скобки, так как внутренние фигурные скобки будут считаться блоком, который выполняется один раз. См. "last" в perlfunc.
- Невозможно линеаризовать анонимную таблицу символов
-
(F) Perl попытался вычислить порядок разрешения методов (MRO) пакета, но потерпел неудачу, так как в хранилище пакета нет имени.
- Не удаётся загрузить '%s' для модуля %s
-
(F) Модуль, который вы пытались загрузить, не смог загрузить динамическое расширение. Это может означать, что вы обновили версию perl до версии, несовместимой со старыми динамическими расширениями (что, как известно, происходит между основными версиями perl), или (более вероятно), что ваше динамическое расширение было скомпилировано с более ранней версией библиотеки, установленной на вашей системе. Возможно, вам потребуется перекомпилировать старые динамические расширения.
- Невозможно локализовать лексическую переменную %s
-
(F) Вы использовали local для имени переменной, которое ранее было объявлено как лексическая переменная с помощью "my" или "state". Это запрещено. Если вы хотите локализовать переменную пакета с таким же именем, укажите имя пакета.
- Невозможно локализовать через ссылку
-
(F) Вы сделали что-то вроде
local $$ref, что Perl в настоящее время не поддерживает, так как при восстановлении старого значения того, на что ссылается $ref, после завершения области действия local(), он не может быть уверен, что $ref по-прежнему будет ссылкой. - Не удаётся найти %s
-
(F) Вы сказали, чтобы
do(илиrequire, илиuse) файл, который не был найден. Perl ищет файл во всех местах, указанных в @INC, если имя файла не содержало полного пути к файлу. Возможно, вам нужно установить переменную среды PERL5LIB или PERL5OPT, чтобы указать, где находится дополнительная библиотека, или, возможно, скрипту нужно добавить имя библиотеки в @INC. Или, возможно, вы просто неправильно написали имя файла. См. "require" в perlfunc и lib. - Не удаётся найти auto/%s.al в @INC
-
(F) Функция (или метод) была вызвана в пакете, который допускает автозагрузку, но функции для автозагрузки нет. Наиболее вероятные причины - опечатка в имени функции/метода или неудача в
AutoSplitфайла, скажем, выполнениемmake install. - Не удаётся найти загружаемый объект для модуля %s в @INC
-
(F) Загруженный модуль пытается загрузить внешнюю библиотеку, например, foo.so или bar.dll, но модуль DynaLoader не смог найти эту библиотеку. См. DynaLoader.
- Не удаётся найти метод объекта "%s" через пакет "%s"
-
(F) Вы правильно вызвали метод, и он правильно указал пакет, работающий как класс, но этот пакет не определяет этот конкретный метод, ни его базовые классы. См. 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 к переменной только для чтения
-
(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) Для обычных вещественных чисел невозможно вычислить логарифм отрицательного числа или нуля. Однако в Perl есть стандартный пакет Math::Complex, если вы действительно хотите это сделать для отрицательных чисел.
- Невозможно вычислить квадратный корень из %g
-
(F) Для обычных вещественных чисел нельзя вычислить квадратный корень из отрицательного числа. В Perl есть стандартный пакет Math::Complex, если вы действительно хотите это сделать.
- Невозможно удалить активную подпрограмму
-
(F) Невозможно удалить подпрограмму, которая в настоящее время выполняется. Однако вы можете переопределить её во время выполнения, а также удалить переопределённую подпрограмму, пока выполняется старая подпрограмма. Интересно.
- Невозможно ослабить нессылку
-
(F) Вы попытались ослабить то, что не является ссылкой. Только ссылки могут быть ослаблены.
- Невозможно обновить %s (%d) до %d
-
(P) Внутренняя функция sv_upgrade добавляет "члены" к SV, превращая его в более специализированный тип SV. Однако несколько вершин типов SV настолько специализированы, что их невозможно преобразовать друг в друга. Это сообщение указывает, что такая попытка преобразования была предпринята.
- Невозможно использовать '%c' после -mname
-
(F) Вы попытались вызвать perl с ключом -m, но вы поместили что-то помимо "=" после имени модуля.
- Нельзя использовать хеш как ссылку
-
(F) Вы попытались использовать хеш как ссылку, как в
%foo->{"bar"}или%$ref->{"hello"}. Версии perl <= 5.22.0 позволяли использовать этот синтаксис, но это неверно. Это было устарело в perl 5.6.1. - Нельзя использовать массив как ссылку
-
(F) Вы попытались использовать массив как ссылку, как в
@foo->[23]или@$ref->[99]. Версии perl <= 5.22.0 позволяли использовать этот синтаксис, но это неверно. Это было устарело в perl 5.6.1. - Невозможно использовать анонимную таблицу символов для поиска метода
-
(F) Внутренняя функция поиска метода получила таблицу символов без имени. Например, таблицы символов могут стать анонимными при удалении стейков:
undef %Some::Package::. - Невозможно использовать неопределённое значение в качестве ссылки %s
-
(F) Значение, используемое в качестве жёсткой ссылки или символической ссылки, должно быть определённым значением. Это помогает обнаружить некоторые коварные ошибки.
- Невозможно использовать необработанное слово ("%s") в качестве ссылки %s, при включённом "strict refs"
-
(F) "strict refs" допускает только жёсткие ссылки. Символические ссылки запрещены. См. perlref.
- Невозможно использовать %! из-за отсутствия Errno.pm
-
(F) При первом использовании хеша
%!Perl автоматически загружает модуль Errno.pm. Модуль Errno ожидает привязки хеша %! для предоставления символических имён для значений$!errno. - Нельзя использовать '<' и '>' после типа '%c' в %s
-
(F) Для типа нельзя одновременно установить порядок байтов big-endian и little-endian, поэтому эта комбинация модификаторов не допускается. См. "pack" в perlfunc.
- Нельзя использовать 'defined(@array)' (Возможно, вам следует просто убрать defined()?)
-
(F) defined() не подходит для массивов, поскольку проверяет неопределённое скалярное значение. Если вы хотите проверить, пуст ли массив, просто используйте
if (@array) { # not empty }, например. - Нельзя использовать 'defined(%hash)' (Возможно, вам следует просто убрать defined()?)
-
(F)
defined()обычно не верен для хэшей.Хотя
defined %hashложно для обычного неиспользуемого хэша, оно становится истинным в нескольких неочевидных ситуациях, включая итераторы, слабые ссылки, имена стека, даже оставаясь истинным послеundef %hash. Эти вещи делаютdefined %hashпрактически бесполезным, поэтому теперь генерируется ошибка.Если вам нужно проверить, не пусто ли значение, то просто поместите его в булевый контекст (см. "Скалярные значения" в perldata):
if (%hash) { # not empty }Если вам нужно проверить, существует ли такая переменная пакета, то это никогда не было надёжным способом, и это не лучший способ узнать о функциях пакета или о том, загружен ли он и т. д.
- Нельзя использовать %s в качестве переменной цикла
-
(P) Парсер запутался при попытке разобрать цикл
foreach. - Нельзя использовать глобальную %s в "%s"
-
(F) Вы попытались объявить магическую переменную как лексическую переменную. Это запрещено, так как магия может быть связана только с одним местом (а именно, с глобальной переменной), и было бы крайне запутанно иметь в вашей программе переменные, выглядящие как магические, но ими не являющиеся.
- Нельзя использовать '%c' в группе с другим порядком байтов в %s
-
(F) Вы пытались принудительно установить другой порядок байтов для типа, который уже находится в группе с модификатором порядка байтов. Например, нельзя принудительно установить порядок байтов little-endian для типа, находящегося внутри группы big-endian.
- Нельзя использовать "my %s" в сравнении сортировки
-
(F) Глобальные переменные $a и $b зарезервированы для сравнения сортировки. Вы упомянули $a или $b в одной строке с оператором <=> или cmp, а переменная ранее была объявлена как лексическая переменная. Либо укажите переменную сортировки с именем пакета, либо переименуйте лексическую переменную.
- Нельзя использовать %s ссылку как %s ссылку
-
(F) Вы перепутали типы ссылок. Вам нужно разыменовать ссылку нужного типа. Вы можете использовать функцию ref(), чтобы проверить тип ссылки, если это необходимо.
- Нельзя использовать строку ("%s") как %s ссылку при включенном "strict refs"
- Нельзя использовать строку ("%s"...) как %s ссылку при включенном "strict refs"
-
(F) Вы сказали Perl разыменовать строку, что Perl блокирует для предотвращения случайного выполнения. См. "Символические ссылки" в perlref. Это может быть вызвано
@или$в строке с двойными кавычками непосредственно перед интерполяцией переменной, например, в"user @$twitter_id", которая говорит обработать содержимое$twitter_idкак ссылку на массив; используйте\для получения буквального@символа, за которым следует содержимое$twitter_id:"user \@$twitter_id". - Нельзя использовать индексацию для %s
-
(F) Компилятор пытался интерпретировать выражение в скобках как индекс. Но слева от скобок было выражение, которое не выглядело как ссылка на хэш или массив, или что-то еще индексируемое.
- Нельзя использовать \%c как $%c в выражении
-
(W синтаксис) В обычном выражении обратный слэш — это унарный оператор, который создаёт ссылку на свой аргумент. Использование обратного слэша для обозначения обратной ссылки на совпадающую подстроку допустимо только в рамках шаблона регулярного выражения. Попытка сделать это в обычном коде Perl даёт значение, которое выводится как SCALAR(0xdecaf). Используйте вместо этого форму $1.
- Нельзя ослабить нессылку
-
(F) Вы пытались ослабить что-то, что не было ссылкой. Только ссылки могут быть ослаблены.
- Нельзя использовать "when" вне топикалайзера
-
(F) Вы использовали блок when(), который не находится внутри цикла
foreachили блокаgiven. (Обратите внимание, что эта ошибка выдаётся при выходе из блокаwhen, поэтому вы не получите ошибку, если соответствие не найдено или если вы используете явныйcontinue.) - Нельзя использовать x= для значения только для чтения
-
(F) Вы попытались повторить константу (часто значение undefined) с оператором присваивания, что подразумевает изменение самого значения. Возможно, вам нужно скопировать значение во временную переменную и повторить это.
- Символ, следующий за "\c", должен быть печатаемым ASCII
-
(F) В
\cX, X должен быть печатаемым (не управляющим) ASCII-символом.Обратите внимание, что ASCII-символы, которые не отображаются как управляющие символы, не рекомендуется использовать, и они будут генерировать предупреждение (если оно включено) ""\c%c" можно более чётко записать как "%s"".
- Символ, следующий за \%c, должен быть '{' или односимвольным именем свойства Юникода в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) (В приведённом выше примере
%cзаменяется либоp, либоP.) Вы указали что-то, что не является допустимым именем свойства Юникода. Большинство свойств Юникода задаются\p{...}. Но если имя — односимвольное, фигурные скобки можно опустить. - Символ в формате 'C' внутри pack
-
(W pack) Вы сказали
pack("C", $x)где $x меньше 0 или больше 255; формат
"C"предназначен только для кодирования символов родной операционной системы (ASCII, EBCDIC и т. д.), а не для символов Юникода, поэтому Perl поступил так, как будто вы имели в видуpack("C", $x & 255)Если вам действительно нужно упаковать коды символов Юникода, используйте формат
"U". - Символ в формате 'c' внутри pack
-
(W pack) Вы сказали
pack("c", $x)где $x меньше -128 или больше 127; формат
"c"предназначен только для кодирования символов родной операционной системы (ASCII, EBCDIC и т. д.), а не для символов Юникода, поэтому Perl поступил так, как будто вы имели в видуpack("c", $x & 255);Если вам действительно нужно упаковать коды символов Юникода, используйте формат
"U". - Символ в формате '%c' внутри unpack
-
(W unpack) Вы попытались что-то вроде
unpack("H", "\x{2a1}")где формат ожидает обработки байта (символа со значением ниже 256), но вместо этого было предоставлено большее значение. Perl использует значение по модулю 256 вместо этого, как будто вы предоставили:
unpack("H", "\x{a1}") - Символ в формате 'W' внутри pack
-
(W pack) Вы сказали
pack("U0W", $x)где $x меньше 0 или больше 255. Однако,
U0-режим ожидает, что все значения будут в интервале [0, 255], поэтому Perl поступил так, как будто вы имели в виду:pack("U0W", $x & 255) - Символы в формате '%c' внутри pack
-
(W pack) Вы попытались что-то вроде
pack("u", "\x{1f3}b")где формат ожидает обработки последовательности байтов (символа со значением ниже 256), но некоторые символы имели большее значение. Perl использует значения символов по модулю 256 вместо этого, как будто вы предоставили:
pack("u", "\x{f3}b") - Символы в формате '%c' внутри unpack
-
(W unpack) Вы попытались что-то вроде
unpack("s", "\x{1f3}b")где формат ожидает обработки последовательности байтов (символа со значением ниже 256), но некоторые символы имели большее значение. Perl использует значения символов по модулю 256 вместо этого, как будто вы предоставили:
unpack("s", "\x{f3}b") - Определения псевдонимов charnames не должны содержать последовательность нескольких пробелов; отмечено <-- HERE в %s
-
(F) Вы определили имя символа, содержащее несколько пробелов подряд. Замените их на один пробел. Обычно эти имена определяются в аргументе импорта
:aliasк модулюuse charnames, но их может определить установленный в$^H{charnames}переводчик. См. "CUSTOM ALIASES" в charnames. - Определения псевдонимов charnames не должны содержать хвостовые пробелы; отмечено <-- HERE в %s
-
(F) Вы определили имя символа, которое заканчивалось пробелом. Удалите хвостовые пробелы. Обычно эти имена определяются в аргументе импорта
:aliasк модулюuse charnames, но их может определить установленный в$^H{charnames}переводчик. См. "CUSTOM ALIASES" в charnames. - chdir() на неоткрытом файловом дескрипторе %s
-
(W неоткрытый) Вы попытались выполнить chdir() на файловом дескрипторе, который никогда не открывался.
- "\c%c" можно более чётко записать как "%s"
-
(W синтаксис) Конструкция
\cXпредназначена для задания непечатаемых символов. Вы использовали её для печатаемого символа, что лучше записать просто как сам символ, возможно, с префиксом обратного слэша для небуквенных символов. Способ, которым вы это сделали, не является переносимым между платформами ASCII и EBCDIC. - Клонирование контекста подстановки не реализовано
-
(F) Создание новой потоковой задачи внутри оператора
s///не поддерживается. - closedir() используется для неверного дескриптора каталога %s
-
(W ввод/вывод) Дескриптор каталога, который вы пытались закрыть, либо закрыт, либо не является дескриптором каталога. Проверьте свой поток управления.
- close() на неоткрытом файловом дескрипторе %s
-
(W неоткрытый) Вы попытались закрыть файловый дескриптор, который никогда не открывался.
- Вызван прототип закрытия
-
(F) Если у закрытия есть атрибуты, подпрограмма, переданная обработчику атрибута, — это прототип, который клонируется при создании нового закрытия. Эту подпрограмму нельзя вызвать.
- \C больше не поддерживается в регулярных выражениях; отмечено <-- HERE в m/%s/
-
(F) Класс символов \C, используемый для сопоставления отдельного байта внутри многобайтового utf-8 символа, был удалён в версии 5.24, так как он нарушал инкапсуляцию и его реализация была чрезвычайно ошибочной. Если вам действительно нужно обработать отдельные байты, вам, вероятно, следует преобразовать строку в такую, где каждый базовый байт хранится как символ, с помощью utf8::encode().
- Пропущенный код после '/'
-
(F) У вас была (под-)шаблон, заканчивающаяся на '/'. После косой черты должен быть другой шаблон кода. Смотрите "pack" в perlfunc.
- Код символа 0x%X не является Unicode и не является переносимым
-
(S non_unicode) У вас был код символа, который никогда не встречался ни в одном стандарте, поэтому, скорее всего, языки, отличные от Perl, его не поймут. В определённый момент в некоторых стандартах было разрешено иметь коды символов до 0x7FFF_FFFF, но не выше, а этот код символа больше.
Принятие этих кодов символов является расширением Perl, и вы должны ожидать, что их сможет обработать только Perl; сам Perl на платформах EBCDIC до версии 5.24 их не обрабатывает.
Коды символов выше 0xFFFF_FFFF требуют больше, чем 32-битовое слово.
Perl также не гарантирует, что представление этих кодов символов не изменится в какой-то момент в будущем, скажем, когда появятся машины с более чем 64-битным словом. В таком случае файлы, написанные более старой версией Perl, потребуют преобразования для чтения новой версией Perl.
- Код символа 0x%X не является Unicode, может быть не переносимым
-
(S non_unicode) У вас был код символа, превышающий максимальное значение Unicode U+10FFFF.
Perl позволяет строкам содержать надмножество кодов Unicode, но они могут не приниматься другими языками/системами. Кроме того, даже если эти языки/системы принимают эти большие коды символов, они могут выбрать для них другое представление, отличное от похожего на UTF-8 представления, используемого Perl, что означает, что файлы не будут взаимозаменяемы между ними и Perl.
На платформах EBCDIC коды символов выше 0x3FFF_FFFF имеют другое представление в Perl 5.24, чем раньше, поэтому любые файлы, содержащие их и написанные до этой версии, потребуют преобразования для чтения более поздней версией Perl.
- %s: Команда не найдена
-
(A) Вы случайно запустили свой скрипт через csh или другую оболочку вместо Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl. Строка #! в начале вашего файла может выглядеть так
#!/usr/bin/perl - %s: команда не найдена
-
(A) Вы случайно запустили свой скрипт через bash или другую оболочку вместо Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl. Строка #! в начале вашего файла может выглядеть так
#!/usr/bin/perl - %s: команда не найдена: %s
-
(A) Вы случайно запустили свой скрипт через zsh или другую оболочку вместо Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl. Строка #! в начале вашего файла может выглядеть так
#!/usr/bin/perl - Компиляция завершилась ошибкой в require
-
(F) Perl не смог скомпилировать файл, указанный в
requireоператоре. Perl использует это сообщение в общем случае, когда ни одна из обнаруженных ошибок не была достаточно серьезной, чтобы остановить компиляцию немедленно. - Превышен лимит рекурсии сложных подвыражений регулярного выражения (%d)
-
(W regexp) Движок регулярных выражений использует рекурсию в сложных ситуациях, где требуется обратный отслеживания. Глубина рекурсии ограничена 32766, или, возможно, меньше на архитектурах, где стек не может неограниченно расти. («Простые» и «средние» ситуации обрабатываются без рекурсии и не подвержены ограничениям). Попробуйте сократить строку, проверяемую строку; реализовать циклы в коде Perl (например, с
while), а не в движке регулярных выражений; или переписать регулярное выражение так, чтобы оно было проще или обратный отслеживания в нем был меньше. (См. perlfaq2 для информации о Мастерстве регулярных выражений.) - connect() на закрытом сокете %s
-
(W closed) Вы пытались установить соединение на закрытом сокете. Не забыли ли вы проверить возвращаемое значение вызова 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. - Константы из лексических переменных, потенциально изменяемых в других местах, устарели. Они не будут разрешены в Perl 5.32
-
(D устарело) Вы написали что-то вроде
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 пragma? - :const является экспериментальным
-
(S experimental::const_attr) Атрибут "const" является экспериментальным. Если вы хотите использовать эту функцию, отключите предупреждение с помощью
no warnings 'experimental::const_attr', но помните, что при этом вы рискуете тем, что ваш код может сломаться в будущей версии Perl. - :const не разрешено для именованных подпрограмм
-
(F) Атрибут "const" заставляет выполниться анонимную подпрограмму и захватить её значение в момент клонирования. Именованные подпрограммы не клонируются таким образом, поэтому этот атрибут не имеет смысла для них.
- Метод копирования не вернул ссылку
-
(F) Метод, перегружающий "=", имеет ошибку. См. "Copy Constructor" в overload.
- &CORE::%s не может быть вызван напрямую
-
(F) Вы пытались вызвать подпрограмму в пространстве имён
CORE::с помощью&fooсинтаксиса или через ссылку. Некоторые подпрограммы в этом пакете пока не могут быть вызваны таким образом, но должны вызываться как слова без префикса. Что-то вроде этого будет работать:BEGIN { *shove = \&CORE::push; } shove @array, 1,2,3; # pushes on to @array - CORE::%s не является ключевым словом
-
(F) Пространство имён CORE:: зарезервировано для ключевых слов Perl.
- Повреждённый код операции регулярного выражения %d -> %d
-
(P) Это либо ошибка в Perl, либо, если вы используете, ваш собственный движок регулярных выражений. Если не последнее, сообщите об этой проблеме на https://github.com/Perl/perl5/issues.
- Повреждённые указатели регулярного выражения
-
(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 и увлеклись.
- Died
-
(F) Вы передали die() пустую строку (эквивалент
die "") или вызвали ее без аргументов, и$@было пустым. - Документ не содержит данных
-
См. "500 Ошибка сервера".
- %s не определяет %s::VERSION--проверка версии завершилась неудачей
-
(F) Вы сказали что-то вроде "use Module 42", но модуль не определил
$VERSION. - '/' не принимает количество повторений
-
(F) Вы не можете поместить количество повторений любого типа сразу после кода '/'. См. "pack" в perlfunc.
- do "%s" завершился неудачей, '.' больше не в @INC; вы имели в виду do "./%s"?
-
(D устаревшее) Раньше
do "somefile";искал указанный файл в текущем каталоге. Так как с perl v5.26.0, . был удалён из@INCпо умолчанию, это больше неверно. Чтобы искать в текущем каталоге (и только в текущем каталоге), вы можете написатьdo "./somefile";. - Не знаю, как получить имя файла
-
(P)
PerlIO_getname, внутренняя функция ввода-вывода perl, специфичная для VMS, была как-то вызвана на другой платформе. Этого не должно происходить. - Не знаю, как обработать магию типа \%o
-
(P) Внутренняя обработка магических переменных была испорчена.
- do_study: не хватает памяти
-
(P) Это должно было быть поймано safemalloc() вместо этого.
- (Нужно ли предварительно объявить %s?)
-
(S синтаксис) Это обоснованное предположение, сделанное в сочетании с сообщением "%s найден там, где ожидался оператор". Часто это означает, что подпрограмма или имя модуля ссылаются на то, что еще не объявлено. Это может быть из-за проблем с порядком в вашем файле или из-за отсутствия оператора "sub", "package", "require" или "use". Если вы ссылаетесь на что-то, что еще не определено, вам не нужно фактически определять подпрограмму или пакет до текущей позиции. Вы можете использовать пустое "sub foo;" или "package FOO;" для ввода "прямого" объявления.
- dump() должно быть написано как CORE::dump() начиная с 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'и расширяется до символа NUL. - Пустое (?) без каких-либо модификаторов в регулярном выражении; помечено <-- HERE в m/%s/
-
(W regexp) (только под
use re 'strict')(?)ничего не делает, поэтому, возможно, это опечатка. - ${^ENCODING} больше не поддерживается
-
(F) Специальная переменная
${^ENCODING}, ранее использовавшаяся для реализации псевдонимаencoding, больше не поддерживается начиная с Perl 5.26.0.Установка ее на значение отличное от
undefявляется фатальной ошибкой начиная с Perl 5.28. - Ошибка входа в эффективное %s
-
(F) При использовании псевдонима
use filetest, переключение реальных и эффективных идентификаторов пользователя или группы пользователей завершилось неудачей. - %ENV проинициализирован как %s
-
(F) Вы выполняете программу в режиме контроля, и переменная
%ENVбыла проинициализирована другим хешем, поэтому она больше не отражает состояние среды выполнения программы. Это потенциально небезопасно. - Ошибка преобразования спецификации файла %s
-
(F) Ошибка, специфичная для VMS. Так как Perl может иметь дело с указаниями на файлы в формате VMS или Unix, он преобразует их в единый формат, когда должен напрямую работать с ними. Либо вы передали недействительное указание на файл Perl, либо вы нашли случай, с которым не справляются средства преобразования. Уф.
- Группа Eval в небезопасном регулярном выражении
-
(F) Perl обнаружил загрязнённые данные при попытке компиляции регулярного выражения, содержащего
(?{ ... })утверждение нулевой ширины, что небезопасно. См. "(?{ code })" в perlre и perlsec. - Группа Eval не разрешена во время выполнения, используйте re 'eval' в регулярном выражении m/%s/
-
(F) Perl пытался скомпилировать регулярное выражение, содержащее
(?{ ... })утверждение нулевой ширины во время выполнения, так как это происходит, когда шаблон содержит интерполированные значения. Поскольку это представляет собой риск для безопасности, это не разрешено. Если вы настаиваете, вы всё ещё можете сделать это, используя псевдонимre 'eval'или явным образом создав шаблон из интерполированной строки во время выполнения и используя его в eval(). См. "(?{ code })" в perlre.
- Eval-group запрещен, используйте re 'eval' в regex m/%s/
-
(F) Регулярное выражение содержало
(?{ ... })утверждение нулевой ширины, но такая конструкция разрешена только при включенномuse re 'eval'псевдониме. См. "(?{ code })" в perlre. - EVAL без изменения pos превысил лимит в regex; отмечено <-- HERE в m/%s/
-
(F) Вы использовали шаблон, в котором вложены слишком много вызовов EVAL без потребления текста. Перестройте шаблон так, чтобы потреблялся текст.
Маркер <-- HERE указывает место в регулярном выражении, где была обнаружена проблема.
- Слишком длинный оператор <>
-
(F) Содержимое оператора <> не должно превышать максимальный размер идентификатора Perl. Если вы пытаетесь просто выполнить поиск по списку длинных имён файлов, используйте оператор glob() или поместите имена файлов в переменную и выполните поиск по ней.
- exec? Я не такой операционная система
-
(F) Функция
execне реализована на некоторых системах, например, Symbian OS. См. perlport. - %sВыполнение %s прервано из-за ошибок компиляции.
-
(F) Конечное сообщение об ошибке при сбое компиляции Perl.
- Аргумент exists не является элементом HASH или ARRAY или подпрограммой
-
(F) Аргумент для
existsдолжен быть элементом хеша или массива или подпрограммой с амперсандом, например:$foo{$bar} $ref->{"susie"}[12] &do_something - Аргумент exists не является именем подпрограммы
-
(F) Аргумент для
existsдляexists &subдолжен быть именем подпрограммы, а не вызовом подпрограммы.exists &sub()сгенерирует эту ошибку. - Выход из eval через %s
-
(W exiting) Вы выходите из eval нестандартным способом, например, с помощью оператора goto или операторов управления циклом.
- Выход из формата через %s
-
(W exiting) Вы выходите из формата нестандартным способом, например, с помощью оператора goto или операторов управления циклом.
- Выход из псевдоблока через %s
-
(W exiting) Вы выходите из специальной конструкции блока (например, блока сортировки или подпрограммы) нестандартным способом, например, с помощью оператора goto или операторов управления циклом. См. "sort" в perlfunc.
- Выход из подпрограммы через %s
-
(W exiting) Вы выходите из подпрограммы нестандартным способом, например, с помощью оператора goto или операторов управления циклом.
- Выход из подстановки через %s
-
(W exiting) Вы выходите из подстановки нестандартным способом, например, с помощью оператора return, goto или операторов управления циклом.
- Ожидается закрывающая скобка в regex; отмечено <-- HERE в m/%s/
-
(F) Вы написали что-то вроде
(?13для обозначения группы захвата вида
(?PARNO), но опустили")". - Ожидается закрывающая скобка для вложенного расширенного класса символов в regex; отмечено <-- HERE в m/%s/
-
(F) При разборе вложенного расширенного класса символов, например:
(?[ ... (?flags:(?[ ... ])) ... ]) ^мы ожидали увидеть закрывающую скобку ')' (отмечено ^), но её не было.
- Ожидается закрывающая скобка для обертки вложенного расширенного класса символов в regex; отмечено <-- HERE в m/%s/
-
(F) При разборе вложенного расширенного класса символов, например:
(?[ ... (?flags:(?[ ... ])) ... ]) ^мы ожидали увидеть закрывающую скобку ')' (отмечено ^), но её не было.
- Ожидается '(?flags:(?[...' в regex; отмечено <-- HERE в m/%s/
-
(F)
(?[...])Конструкция расширенного класса символов регулярного выражения допускает только классы символов (включая escapes классов символов, например,\d), операторы и скобки. Исключение составляет(?flags:...), содержащий как минимум один флаг и ровно одну(?[...])конструкцию. Это позволяет интерполировать регулярное выражение, содержащее только(?[...]). Если вы видите это сообщение об ошибке, то, вероятно, у вас есть другая(?...)конструкция внутри вашего класса символов. См. "Расширенные скобочные классы символов" в perlrecharclass. - Экспериментальное алиасирование через ссылку не включено
-
(F) Чтобы выполнить алиасирование через ссылки, необходимо сначала включить эту функцию:
no warnings "experimental::refaliasing"; use feature "refaliasing"; \$x = \$y; - Экспериментальная функция %s для скаляра больше не разрешена
-
(F) Экспериментальная функция, добавленная в Perl 5.14, позволяла вызывать
each,keys,push,pop,shift,splice,unshiftиvaluesсо скалярным аргументом. Этот эксперимент считается неудачным и был удалён. Функцияpostderefможет лучше удовлетворить ваши потребности. - Экспериментальные подписи подпрограмм не включены
-
(F) Чтобы использовать подписи подпрограмм, необходимо сначала включить их:
no warnings "experimental::signatures"; use feature "signatures"; sub foo ($left, $right) { ... } - Явное благословение для '' (предполагая пакет main)
-
(W misc) Вы благословляете ссылку на строку нулевой длины. Это приводит к благословению ссылки в пакет main. Это обычно не то, что вы хотите. Укажите целевой пакет по умолчанию, например, bless($ref, $p || 'MyPackage');
- %s: Синтаксис выражения
-
(A) Вы случайно запустили свой скрипт через csh, а не через Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl.
- %s не удался--очередь вызовов прервана
-
(F) Во время выполнения подпрограмм UNITCHECK, CHECK, INIT или END было вызвано необработанное исключение. Обработка оставшейся очереди таких подпрограмм была преждевременно завершена.
- Не удалось закрыть файл временной работы %s: %s
-
(F) Не удалось закрыть выходной файл при редактировании на месте, как с флагом командной строки
-i. - Ложный диапазон [] "%s" в regex; отмечено <-- HERE в m/%s/
-
(W regexp)(F) Диапазон в классе символов должен начинаться и заканчиваться буквальным символом, а не другим классом символов, например,
\dили[:alpha:]. Символ "-" в вашем ложном диапазоне интерпретируется как буквальный "-". В конструкции(?[...])это ошибка, а не предупреждение. Рассмотрите возможность экранирования "-", "\-". Маркер <-- HERE указывает место в регулярном выражении, где была обнаружена проблема. См. perlre. - Критическая ошибка VMS (статус=%d) в %s, строка %d
-
(P) Ошибка, специфичная для VMS. Произошло что-то непредвиденное в системной службе или RTL-процедуре VMS; подробности должны быть предоставлены статусом выхода Perl. Имя файла в "at %s" и номер строки в "line %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.
- Конечный $ должен быть \$ или $name
-
(F) Теперь вам нужно решить, предназначен ли final $ в строке для обозначения буквального знака доллара или же он должен был ввести имя переменной, которая отсутствует. Поэтому вы должны указать либо обратную косую черту, либо имя.
- flock() на закрытом файловом дескрипторе %s
-
(W закрыт) Файловый дескриптор, который вы пытаетесь заблокировать (flock()), был закрыт некоторое время назад. Проверьте свой поток управления. flock() работает с файловыми дескрипторами. Вы пытаетесь вызвать flock() на dirhandle с тем же именем?
- Формат не завершен
-
(F) Формат должен быть завершен строкой с единственной точкой. Perl достиг конца вашего файла, не найдя такой строки.
- Формат %s переопределен
-
(W переопределение) Вы переопределили формат. Чтобы подавить это предупреждение, используйте
{ no warnings 'redefine'; eval "format NAME =..."; } - Найден = в условном операторе, должно быть ==
-
(W синтаксис) Вы написали
if ($foo = 123)вместо
if ($foo == 123)(или что-то подобное).
- %s найден там, где ожидался оператор
-
(S синтаксис) Perl-лексер знает, ожидать ли ему термин или оператор. Если он видит то, что распознаёт как термин, в то время как ожидал оператор, он выводит это предупреждение. Обычно это указывает на пропущенный оператор или разделитель, например, точку с запятой.
- gdbm store вернул %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. См. объяснение в "Экспериментальные подробности о given и when" в perlsyn. - Глобальная переменная "%s" требует явного имени пакета (вы забыли объявить "my %s"?)
-
(F) Вы использовали "use strict" или "use strict vars", что означает, что все переменные должны быть либо лексически ограничены (с использованием "my" или "state"), предварительно объявлены с использованием "our", либо явно квалифицированы, чтобы указать, в каком пакете находится глобальная переменная (с использованием "::").
- glob не удалась (%s)
-
(S glob) Что-то пошло не так с внешними программами, используемыми для
globи<*.c>. Обычно это означает, что вы предоставили шаблонglob, который привел к ошибке внешней программы и завершению её с ненулевым кодом возврата. Если сообщение указывает, что аномальное завершение привело к сбою ядра (coredump), это также может означать, что ваша csh (оболочка C) повреждена. В этом случае вы должны изменить все связанные с csh переменные в config.sh: Если у вас tcsh, сделайте переменные, как если бы это была csh (например,full_csh='/usr/bin/tcsh'); в противном случае сделайте их пустыми (за исключением того, чтоd_cshдолжно быть'undef'), чтобы Perl думал, что csh отсутствует. В любом случае, после редактирования config.sh, запустите./Configure -Sи перестройте Perl. - Glob не завершена
-
(F) Лексер увидел левую угловую скобку в месте, где ожидал термин, поэтому ищет соответствующую правую угловую скобку, но не находит её. Скорее всего, вы пропустили необходимые скобки ранее в строке, и вы действительно имели в виду знак "меньше".
- gmtime(%f) не удалось
-
(W переполнение) Вы вызвали
gmtimeс числом, которое не могла обработать: слишком большое, слишком маленькое или NaN. Возвращаемое значение —undef. - gmtime(%f) слишком большое
-
(W переполнение) Вы вызвали
gmtimeс числом, которое было больше, чем может надёжно обработатьgmtime, возможно, возвратив неверную дату. Это предупреждение также срабатывает при NaN (специальном значении «не число»). - gmtime(%f) слишком мало
-
(W переполнение) Вы вызвали
gmtimeс числом, которое было меньше, чем может надёжно обработатьgmtime, возможно, возвратив неверную дату. - Возникла ошибка DosAllocMem
-
(P) Ошибка, специфичная для OS/2. Вероятно, вы используете устаревшую версию Perl, и это вообще не должно происходить.
- goto должен иметь метку
-
(F) В отличие от "next" или "last", вам не разрешено использовать goto к неопределённому пункту назначения. См. "goto" в perlfunc.
- Goto неопределённой подпрограммы%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-символ и соответствующая обработка имени символа находится в области действия. - Недопустимая двоичная цифра '%c'
-
(F) Вы использовали цифру, отличную от 0 или 1, в двоичном числе.
- Недопустимая двоичная цифра %s проигнорирована
-
(W цифра) Возможно, вы попытались использовать цифру, отличную от 0 или 1, в двоичном числе. Интерпретация двоичного числа остановилась перед нарушающей цифрой.
- Недопустимый символ после '_' в прототипе для %s : %s
-
(W illegalproto) В объявлении прототипа был найден недопустимый символ. Символ '_' в прототипе должен следовать за точкой с запятой, указывающей, что остальные параметры необязательны, или за одним из символов '@' или '%', так как эти два символа принимают 0 или более конечных параметров.
- Недопустимый символ \%o (возврат каретки)
-
(F) Perl обычно обрабатывает возврат каретки в тексте программы как любой другой пробел, а это означает, что вы никогда не должны видеть эту ошибку, если Perl был скомпилирован с использованием стандартных параметров. По какой-то причине ваша версия Perl, похоже, была скомпилирована без этой поддержки. Обратитесь к вашему администратору Perl.
- Недопустимый символ после символа в сигнатуре подпрограммы
-
(F) В параметре подписи подпрограммы после символа
$,@или%обнаружен неожиданный символ. Обычно после символа должен следовать имя переменной или=и т. д. Возможно, вы пытаетесь использовать прототип в области видимостиuse feature 'signatures'? Например:sub foo ($$) {} # legal - a prototype use feature 'signatures; sub foo ($$) {} # illegal - was expecting a signature sub foo ($a, $b) :prototype($$) {} # legal - Недопустимый символ в прототипе для %s : %s
-
(W illegalproto) В объявлении прототипа обнаружен недопустимый символ. Допустимые символы в прототипах: $, @, %, *, ;, [, ], &, \, и +. Возможно, вы пытались написать подпись подпрограммы, но не активировали эту функцию сначала (
use feature 'signatures'), поэтому ваша подпись была интерпретирована как неверный прототип. - Недопустимое объявление анонимной подпрограммы
-
(F) При использовании ключевого слова
subдля создания анонимной подпрограммы всегда необходимо указывать блок кода. См. perlsub. - Недопустимое объявление подпрограммы %s
-
(F) Подпрограмма объявлена некорректно. См. perlsub.
- Недопустимое деление на ноль
-
(F) Вы пытались разделить число на 0. Либо в вашей логике была ошибка, либо вам необходимо добавить условное выражение для защиты от бессмысленного входного значения.
- Недопустимая шестнадцатеричная цифра %s проигнорирована
-
(W digit) Возможно, вы попытались использовать символ, отличный от 0–9 или A–F, a–f в шестнадцатеричном числе. Интерпретация шестнадцатеричного числа была прекращена перед недопустимым символом.
- Недопустимый модуль нуля
-
(F) Вы пытались разделить число на 0, чтобы получить остаток. Большинство чисел к этому не склонны.
- Недопустимое число битов в vec
-
(F) Количество битов в vec() (третий аргумент) должно быть степенью двойки от 1 до 32 (или 64, если ваша платформа поддерживает это).
- Недопустимая восьмеричная цифра '%c'
-
(F) Вы использовали 8 или 9 в восьмеричном числе.
- Недопустимая восьмеричная цифра %s проигнорирована
-
(W digit) Возможно, вы попытались использовать 8 или 9 в восьмеричном числе. Интерпретация восьмеричного числа была прекращена перед 8 или 9.
- Недопустимый оператор после параметра в подписи подпрограммы
-
(F) Параметр в подписи подпрограммы следовал за чем-то иным, чем
=, вводящим значение по умолчанию,,или).use feature 'signatures'; sub foo ($=1) {} # legal sub foo ($a = 1) {} # legal sub foo ($a += 1) {} # illegal sub foo ($a == 1) {} # illegal - Недопустимый шаблон в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы написали что-то вроде
(?+foo)"+"допустимо только в том случае, если за ним следуют цифры, указывающие на захватывающую группу. См.(?PARNO). - Недопустимый скрипт suid
-
(F) Скрипт, запущенный под suidperl, был каким-то образом некорректным.
- Недопустимый переключатель в PERL5OPT: -%c
-
(X) Переменная среды PERL5OPT может использоваться только для установки следующих переключателей: -[CDIMUdmtw].
- Недопустимое имя пользовательского свойства
-
(F) Вы указали имя свойства, похожее на Юникод, в шаблоне регулярного выражения (используя
\p{}или\P{}), которое Perl не признаёт официальным свойством Юникода, и, скорее всего, имело в виду имя пользовательского свойства, но оно не может им быть, так как должно начинаться сInилиIs. Проверьте написание. См. также "Невозможно найти определение свойства Юникода "%s"". - Неправильно сформированное значение среды CRTL "%s"
-
(W internal) Предупреждение, специфичное для VMS. Perl попытался прочитать внутренний массив среды CRTL и столкнулся с элементом без разделителя
=, используемого для разделения ключей и значений. Элемент проигнорирован. - Неправильно сформированное сообщение в prime_env_iter: |%s|
-
(W internal) Предупреждение, специфичное для VMS. Perl пытался прочитать логическое имя или определение символа CLI при подготовке к итерации по %ENV и не обнаружил ожидаемого разделителя между ключом и значением, поэтому строка была проигнорирована.
- (при очистке) %s
-
(W misc) Этот префикс обычно указывает на то, что метод DESTROY() вызвал указанное исключение. Поскольку деструкторы обычно вызываются системой в произвольные моменты выполнения и часто огромное количество раз, предупреждение выдаётся только один раз для любого количества сбоев, которые в противном случае привели бы к повторению того же сообщения.
Сбой пользовательских обратных вызовов, отправленных с использованием флага
G_KEEPERR, также может привести к этому предупреждению. См. "G_KEEPERR" в perlcall. - Неполное выражение внутри '(?[ ])' в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) В
(?[ ])была синтаксическая ошибка. Это может произойти, если выражение внутри конструкции было полностью пустым или если для количества операторов было слишком много или слишком мало операндов. Perl недостаточно умён, чтобы дать вам более точное указание на ошибку. - Несогласованная иерархия при слиянии класса '%s' по методу C3: слияние завершилось неудачно для родительского класса '%s'
-
(F) Порядок разрешения методов (MRO) заданного класса не соответствует спецификации C3, и вы включили MRO C3 для этого класса. См. документацию по C3 в mro для получения дополнительной информации.
- Отступ в строке %d файла here-doc не соответствует разделителю
-
(F) У вас есть отформатированный файл here-doc, где одна или несколько строк имеют пробелы в начале, которые не совпадают с закрывающим разделителем.
Например, строка 2 ниже неправильная, потому что в ней нет как минимум 2 пробелов, но строки 1 и 3 в порядке, потому что в них есть как минимум 2 пробела:
if ($something) { print <<~EOF; Line 1 Line 2 not Line 3 EOF }Обратите внимание, что табуляции и пробелы сравниваются строго, то есть 1 табуляция не будет соответствовать 8 пробелам.
- Бесконечная рекурсия в регулярном выражении
-
(F) Вы использовали шаблон, который ссылается на себя, не потребляя никакого входного текста. Вам следует проверить шаблон, чтобы убедиться, что рекурсивные шаблоны либо потребляют текст, либо терпят неудачу.
- Бесконечная рекурсия с пустым шаблоном
-
(F) Вы попытались использовать пустой шаблон внутри блока кода регулярного выражения, например
/(?{ s!!! })/, что привело к повторному выполнению того же шаблона, что является бесконечным циклом, который прерывается путём выброса исключения. - Инициализация переменных состояния в списке в настоящее время запрещена
-
(F)
stateразрешает только инициализацию одной переменной, указанной без скобок. Таким образом,state $a = 42иstate @a = qw(a b c)разрешены, но неstate ($a) = 42или(state $a) = 42. Чтобы инициализировать более однойstateпеременной, инициализируйте их по одной. - %%s[%s] в скалярном контексте лучше переписать как $%s[%s]
-
(W syntax) В скалярном контексте вы использовали индекс/срез массива (обозначенный %), чтобы выбрать один элемент массива. Обычно лучше запрашивать скалярное значение (обозначенное $). Разница в том, что
$foo[&bar]всегда ведёт себя как скаляр, как в возвращаемом значении, так и при оценке своего аргумента, в то время как%foo[&bar]предоставляет контекст списка своему индексу, что может привести к странному поведению, если вы ожидаете только один индекс. При вызове в контексте списка он также возвращает индекс (что возвращает&bar) помимо значения. - %%s{%s} в скалярном контексте лучше переписать как $%s{%s}
-
(W syntax) В скалярном контексте вы использовали ключ/срез хэша (обозначенный %), чтобы выбрать один элемент хэша. Обычно лучше запрашивать скалярное значение (обозначенное $). Разница в том, что
$foo{&bar}всегда ведёт себя как скаляр, как в возвращаемом значении, так и при оценке своего аргумента, в то время как@foo{&bar}предоставляет контекст списка своему индексу, что может привести к странному поведению, если вы ожидаете только один индекс. При вызове в контексте списка он также возвращает ключ помимо значения. - Небезопасная зависимость в %s
-
(F) Вы попытались выполнить действие, которое не понравилось механизму маркировки. Механизм маркировки включается при запуске setuid или setgid, или при явном включении с помощью -T. Механизм маркировки помечает все данные, полученные напрямую или косвенно от пользователя, которому не доверяют. Если такие данные используются в «опасной» операции, возникает эта ошибка. См. perlsec для получения дополнительной информации.
- Небезопасный каталог в %s
-
(F) Вы не можете использовать system(), exec() или открытие с использованием канала в скрипте setuid или setgid, если
$ENV{PATH}содержит каталог, доступный для записи всем пользователям. Также переменная PATH не должна содержать относительных каталогов. См. perlsec. - Небезопасное $ENV{%s} при выполнении %s
-
(F) Вы не можете использовать system(), exec() или открытие с использованием канала в скрипте setuid или setgid, если какое-либо из
$ENV{PATH},$ENV{IFS},$ENV{CDPATH},$ENV{ENV},$ENV{BASH_ENV}или$ENV{TERM}получено из данных, предоставленных (или потенциально предоставленных) пользователем. Скрипт должен установить путь к известному значению, используя надёжные данные. См. perlsec. - Небезопасное пользовательское свойство %s
-
(F) Perl обнаружил данные с маркировкой при попытке скомпилировать регулярное выражение, содержащее вызов функции пользовательского свойства символа, т. е.
\p{IsFoo}или\p{InFoo}. См. "Пользовательские свойства символов" в perlunicode и perlsec. - Переполнение целого числа в строке формата для %s
-
(F) Индексы и ширины, указанные в строке формата
printf()илиsprintf(), слишком велики. Числа не должны переполнять размер целых чисел для вашей архитектуры. - Переполнение целого числа в числе %s
-
(S переполнение) Указанное вами шестнадцатеричное, восьмеричное или двоичное число, либо как литерал, либо как аргумент к функциям hex() или oct(), слишком велико для вашей архитектуры и было преобразовано в число с плавающей запятой. В 32-битной архитектуре наибольшее шестнадцатеричное, восьмеричное или двоичное число, представимое без переполнения, составляет соответственно 0xFFFFFFFF, 037777777777 или 0b11111111111111111111111111111111. Обратите внимание, что Perl автоматически преобразует все числа во внутреннее представление с плавающей запятой, что может привести к ошибкам потери точности в последующих операциях.
- Переполнение целого числа в srand
-
(S переполнение) Переданное вами в srand число слишком велико для представления в целочисленном формате вашей архитектуры. Это число было заменено максимальным допустимым целым числом (0xFFFFFFFF в 32-битных архитектурах). Это может означать, что вы получите меньше случайности, чем ожидалось, так как разные случайные начальные значения, превышающие максимум, будут возвращать одну и ту же последовательность случайных чисел.
- Переполнение целого числа в версии
- Переполнение целого числа в версии %d
-
(W переполнение) Некоторые части инициализации версии слишком велики для размера целых чисел вашей архитектуры. Это не предупреждение, так как нет разумной причины для версии использовать элемент больше, чем, как правило, 2**32. Обычно это вызвано попыткой использовать какое-то странное математическое выражение в качестве версии, например, 100/9.
- Внутренняя ошибка в парсере регулярных выражений; отмечено <-- HERE в m/%s/
-
(P) Произошла серьезная ошибка в парсере регулярных выражений. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема.
- Внутреннее несоответствие в отслеживании vforks
-
(S) Предупреждение, характерное для VMS. Perl отслеживает количество раз, когда вы вызываете
forkиexec, чтобы определить, должно ли текущее обращение кexecповлиять на текущий сценарий или дочерний процесс (см. "exec LIST" в perlvms). По какой-то причине этот счетчик был нарушен, поэтому Perl делает предположение и рассматривает этоexecкак запрос на завершение скрипта Perl и выполнение указанной команды. - Внутреннее %<num>p может повлиять на будущие расширения printf
-
(S внутреннее) Внутренняя процедура Perl, обрабатывающая
printfиsprintfформатирование, следует немного другим правилам, когда вызывается из кода C или XS. В частности, форматы, состоящие из цифр, за которыми следует "p" (например, "%7p"), зарезервированы для будущего использования. Если вы видите это сообщение, значит, модуль XS попытался вызвать эту процедуру с одним из таких зарезервированных форматов. - Внутренняя urp в парсере регулярных выражений; отмечено <-- HERE в m/%s/
-
(P) Произошла серьезная ошибка в парсере регулярных выражений. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема.
- %s (...) интерпретируется как функция
-
(W синтаксис) Вы нарушили правило, согласно которому любой оператор списка, за которым следуют круглые скобки, превращается в функцию, а все аргументы оператора списка находятся внутри скобок. См. "Термины и операторы списка (Слева)" в perlop.
- В '(?...)', скобки '(' и '?' должны быть смежными в regex; отмечено <-- HERE в m/%s/
-
(F) Последовательность из двух символов
"(?"в данном контексте в шаблоне регулярного выражения должна быть неделимым токеном, без каких-либо пробелов между"("и"?", но вы их разделили пробелами. - В '(*...)', скобки '(' и '*' должны быть смежными в regex; отмечено <-- HERE в m/%s/
-
(F) Последовательность из двух символов
"(*"в данном контексте в шаблоне регулярного выражения должна быть неделимым токеном, без каких-либо пробелов между"("и"*", но вы их разделили. Исправьте шаблон и повторите попытку. - Неверный %s атрибут: %s
-
(F) Указанный атрибут для подпрограммы или переменной не был распознан Perl или пользовательским обработчиком. См. attributes.
- Неверные %s атрибуты: %s
-
(F) Указанные атрибуты для подпрограммы или переменной не были распознаны Perl или пользовательским обработчиком. См. attributes.
- Неверный символ в определении псевдонима charnames; отмечено <-- HERE в '%s
-
(F) Вы пытались создать пользовательский псевдоним для имени символа, с опцией
:aliasкuse charnames, и указанный символ в указанном имени не является допустимым. См. "CUSTOM ALIASES" в charnames. - Неверный \0 символ в %s для %s: %s\0%s
-
(W syscalls) Встроенные \0 символы в именах путей или других аргументах системных вызовов выдают предупреждение начиная с версии 5.20. Части после \0 ранее игнорировались системными вызовами.
- Неверный символ в \N{...}; отмечено <-- HERE в \N{%s}
-
(F) Допустимы только определенные символы для имен символов. Указанный символ не является допустимым. См. "CUSTOM ALIASES" в charnames.
- Неверное преобразование в %s: "%s"
-
(W printf) Perl не понимает указанное преобразование формата. См. "sprintf" в perlfunc.
- Неверный эскейп в указанной кодировке в regex; отмечено <-- HERE в m/%s/
-
(W regexp)(F) Числовой эскейп (например,
\xHH) со значением < 256 не соответствует одному символу при преобразовании из кодировки, указанной предикатом кодировки. Эскейп был заменен на ЗАМЕЩАЮЩИЙ СИМВОЛ (U+FFFD) вместо этого, за исключением(?[ ]), где это является фатальной ошибкой. <-- HERE показывает место в регулярном выражении, где был обнаружен эскейп. - Неверное шестнадцатеричное число в \N{U+...}
- Неверное шестнадцатеричное число в \N{U+...} в regex; отмечено <-- HERE в m/%s/
-
(F) Представленное символьное значение
...не является допустимым шестнадцатеричным числом. Либо оно пустое, либо вы попытались использовать символ, отличный от 0-9 или A-F, a-f в шестнадцатеричном числе. - Неверное имя модуля %s с опцией -%c: содержит одиночный двоеточие
-
(F) Аргумент модуля для командной строки perl с опциями -m и -M не может содержать одиночный двоеточие в имени модуля, а только в аргументах после "=". Другими словами, -MFoo::Bar=:baz допустимо, но -MFoo:Bar=baz нет.
- Неверное имя mro: '%s'
-
(F) Вы пытались
mro::set_mro("classname", "foo")илиuse mro 'foo', гдеfooне является допустимым порядком разрешения методов (MRO). В настоящее время единственными допустимыми являютсяdfsиc3, если вы не загрузили модуль, являющийся плагином MRO. См. mro и perlmroapi. - Неверное отрицательное число (%s) в chr
-
(W utf8) Вы передали отрицательное число в
chr. Отрицательные числа не являются допустимыми номерами символов, поэтому возвращается символ замены Юникода (U+FFFD). - Неверное число '%s' для опции -C.
-
(F) Вы указали число для опции -C, которое либо содержит дополнительные ведущие нули, либо превышает представление беззнакового целого числа Perl.
- неверная опция -D%c, используйте -D'' для просмотра вариантов
-
(S отладка) Perl был вызван с недопустимыми флагами отладчика. Вызовите perl с опцией -D без флагов, чтобы увидеть список допустимых значений. См. также "-Dletters" в perlrun.
- Неверный квантификатор в {,} в regex; отмечено <-- HERE в m/%s/
-
(F) Шаблон выглядит как квантификатор {min,max}, но min или max не могут быть распарсены как допустимые числа - либо он содержит ведущие нули, либо представляет слишком большое число. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.
- Неверный диапазон "%s" в классе символов; отмечено <-- HERE в m/%s/
-
(F) Диапазон, указанный в классе символов, имеет минимальный символ, больший, чем максимальный символ. Одна из возможностей заключается в том, что вы забыли
{}из вашего завершения\x{}-\xбез фигурных скобок может доходить только доff. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre. - Неверный диапазон "%s" в операторе транслитерации
-
(F) Диапазон, указанный в операторе tr/// или y///, имеет минимальный символ, больший, чем максимальный символ. См. perlop.
- Неверный разделитель символ %s в списке атрибутов
-
(F) Между элементами списка атрибутов обнаружен символ, отличный от двоеточия или пробела. Если предыдущий атрибут имел параметр в скобках, возможно, этот список был завершен преждевременно. См. attributes.
- Неверный разделитель символ %s в спецификации слоя PerlIO %s
-
(W слой) При добавлении слоёв в систему ввода-вывода Perl между элементами списка слоёв было обнаружено что-то кроме двоеточия или пробела. Возможно, список параметров в предыдущем атрибуте был завершён слишком рано.
- Неверный формат строгой версии (%s)
-
(F) Номер версии не соответствует критериям "строгой" версии. "Строгий" номер версии — это положительное десятичное число (целое или с дробной частью) без показательной записи или же строка с точками в формате "v" с ведущим символом 'v' и как минимум тремя компонентами. Текст в скобках указывает, какие критерии не были соблюдены. Дополнительную информацию об допустимых форматах версий см. в модуле version.
- Неверный тип '%s' в %s
-
(F) Указанный символ не является допустимым типом для pack или unpack. См. "pack" в perlfunc.
(W) Указанный символ не является допустимым типом для pack или unpack, но ранее игнорировался без сообщений об ошибке.
- Неверный формат версии (%s)
-
(F) Номер версии не соответствует критериям "свободного" формата версий. "Свободный" номер версии — это положительное десятичное число (целое или с дробной частью) без показательной записи или же строка с точками в формате "v". Если строка с точками имеет меньше трёх компонентов, она должна начинаться с символа 'v'. В противном случае ведущий символ 'v' необязателен. Как десятичные, так и с точками версии могут иметь заключительный компонент "alpha", отделённый символом подчёркивания от дробного или с точками компонента. Текст в скобках указывает, какие критерии не были соблюдены. Дополнительную информацию об допустимых форматах версий см. в модуле version.
- Неверный объект версии
-
(F) Внутренняя структура объекта версии была некорректной. Возможно, внутренние данные были изменены напрямую или произвольная ссылка была благословлена в класс "version".
- В '(*VERB...)' скобка '(' и звёздочка '*' должны быть смежными в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Последовательность из двух символов
"(*"в этом контексте в шаблоне регулярного выражения должна быть неделимым токеном, без чего-либо между"("и"*", но вы их разделили. - ioctl не реализован
-
(F) Похоже, ваша система не реализует ioctl(), что довольно странно для машины, поддерживающей C.
- ioctl() для неоткрытого %s
-
(W неоткрыто) Вы попытались использовать ioctl() с файловым дескриптором, который никогда не был открыт. Проверьте свой поток управления и количество аргументов.
-
(F) Ваш Perl не был сконфигурирован для использования PerlIO, поэтому вы не можете использовать слои ввода-вывода. Для использования PerlIO необходимо сконфигурировать Perl с параметром 'useperlio'.
- IO::Socket::atmark не реализован на данной архитектуре
-
(F) Ваша машина не реализует функцию sockatmark(), ни как системный вызов, ни как ioctl вызов (SIOCATMARK).
- '%s' — неизвестный тип границы в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы использовали
\b{...}или\B{...}, а...Perl не знает. Текущие допустимые типы приведены в "\b{}, \b, \B{}, \B" в perlrebackslash. - %s() не разрешено для дескрипторов :utf8
-
(F) Операторы sysread(), recv(), syswrite() и send() запрещены для дескрипторов, имеющих слой
:utf8, явно или неявно, например, с помощью слоя:encoding(UTF-16LE).Ранее sysread() и recv() использовали только флаг
:utf8для потока, игнорируя фактические слои. Поскольку sysread() и recv() не выполняли валидацию UTF-8, они могли создавать скаляры с недопустимым кодированием.Аналогично, syswrite() и send() использовали только флаг
:utf8, игнорируя другие слои. Если флаг установлен, оба писали значение в кодировке UTF-8, даже если слой использует другую кодировку, как в примере выше.В идеале, все эти операторы полностью игнорировали бы состояние
:utf8, работая только с байтами, но это привело бы к неявной поломке существующего кода. - "%s" более чётко записывается как "%s" в регулярном выражении; отмечено <-- HERE в m/%s/
-
(W regexp) (только при
use re 'strict'или внутри(?[...]))Вы указали символ, который имеет более простой способ записи и который также портативен для платформ с разными наборами символов.
- $* больше не поддерживается начиная с Perl 5.30
-
(F) Специальная переменная
$*, устаревшая в старых версиях Perl, была удалена в версии 5.10.0, больше не поддерживается и является фатальной ошибкой начиная с Perl 5.30. В предыдущих версиях Perl использование$*включало или отключало многострочное соответствие в строке.Вместо использования
$*следует использовать модификаторы регулярных выражений/m(и возможно/s). Вы можете включить/mдля лексической области (даже для всего файла) с помощьюuse re '/m'. (В старых версиях: когда$*было установлено в истинное значение, все регулярные выражения вели себя так, как будто они были написаны с использованием/m.)Использование этой переменной будет фатальной ошибкой в Perl 5.30.
- $# больше не поддерживается начиная с Perl 5.30
-
(F) Специальная переменная
$#, устаревшая в старых версиях Perl, была удалена с версии 5.10.0, больше не поддерживается и является фатальной ошибкой начиная с Perl 5.30. Вместо неё следует использовать функции printf/sprintf. - '%s' не является ссылкой на код
-
(W overload) Второй (четвёртый, шестой и т.д.) аргумент overload::constant должен быть ссылкой на код. Либо анонимная подпрограмма, либо ссылка на подпрограмму.
- '%s' — не тип, поддерживающий перегрузку
-
(W overload) Вы попытались перегрузить тип константы, о котором пакет overload ничего не знает.
- -i используется без имён файлов в командной строке, чтение из STDIN
-
(S на месте) Опция
-iбыла передана в командной строке, указывая, что скрипт предназначен для редактирования файлов на месте, но файлы не были указаны. Обычно это ошибка, так как редактирование STDIN на месте не имеет смысла и может быть запутанным, так как Perl может выглядеть зависшим, когда он действительно пытается прочитать STDIN. Вы должны либо передать имя файла для редактирования, либо удалить-iиз командной строки. Дополнительную информацию см. в perlrun. - Мусор в конце регулярного выражения в m/%s/
-
(P) Парсер регулярных выражений запутался.
- Метка не найдена для "last %s"
-
(F) Вы указали имя цикла для выхода, но вы не находитесь в цикле с этим именем, даже если учитывать вызовы извне. См. "last" в perlfunc.
- Метка не найдена для "next %s"
-
(F) Вы указали имя цикла для продолжения, но вы не находитесь в цикле с этим именем, даже если учитывать вызовы извне. См. "last" в perlfunc.
- Метка не найдена для "redo %s"
-
(F) Вы указали имя цикла для перезапуска, но вы не находитесь в цикле с этим именем, даже если учитывать вызовы извне. См. "last" в perlfunc.
- Изменение эффективных %s не удалось
-
(F) При использовании прагмы
use filetestпереключение реального и эффективного UID или GID не удалось. - длина/код после конца строки в unpack
-
(F) При распаковке буфер строки был исчерпан, когда комбинация длины/кода unpack попыталась получить больше данных. В результате значение длины является неопределённым. См. "pack" в perlfunc.
- length() используется на %s (вы имели в виду "scalar(%s")?)
-
(W синтаксис) Вы использовали length() на массиве или хэше, когда, вероятно, хотели количество элементов.
Размер массива можно получить, выполнив:
scalar(@array);Количество элементов в хэше можно получить, выполнив:
scalar(keys %hash); - Код лексического анализа попытался поместить символ, не являющийся Latin-1, в входной поток Latin-1
-
(F) Расширение пытается вставить текст в текущий разбор (с использованием lex_stuff_pvn или аналогичного), но пытается вставить символ, который не может быть частью текущего ввода. Это свойственная ловушка механизма вставки, и одна из причин избегать его. Где это необходимо, рекомендуется вставлять только обычные символы ASCII.
- Внутренняя ошибка кода лексического анализа (%s)
-
(F) Код лексического анализа, предоставленный расширением, нарушил API лексического анализатора каким-то обнаружимым способом.
- listen() для закрытого сокета %s
-
(W закрыто) Вы пытались выполнить listen на закрытом сокете. Не забыли ли вы проверить значение возврата вашего вызова socket()? См. "listen" в perlfunc.
- Формат списка для piped open не реализован
-
(F) На некоторых платформах, в частности Windows, трёхъ или более аргументная форма
openне поддерживает каналы, такие какopen($pipe, '|-', @args). Используйте двухаргументную формуopen($pipe, '|prog arg1 arg2...')вместо этого. - Литеральный вертикальный пробел в [] недопустим, за исключением /x в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) (только под
use re 'strict'или внутри(?[...]))Вероятно, вы забыли модификатор
/xили допущена опечатка в шаблоне. Например, вы действительно хотели сопоставить символ подачи формы? Если так, все управляющие символы вертикального пробела ASCII могут быть представлены последовательностями 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 locale) Вы используете именованную локаль UTF-8. Локали UTF-8 должны иметь очень специфическое поведение, и большинство из них им соответствует. Это сообщение появляется, когда Perl обнаружил некоторые отклонения от ожидаемого поведения и сообщает вам, что ожидаемое поведение перекрывает эти различия. В некоторых случаях различия вызваны некорректным определением локали, но наиболее распространёнными причинами этого предупреждения являются неоднозначности и конфликты при следовании стандарту, и локаль выбрала подход, отличающийся от подхода Perl.
Одна из таких причин заключается в том, что, вопреки утверждениям, Unicode не является полностью независимым от локали. Турецкий и некоторые родственные языки имеют два типа
"I"символов. Один имеет точки как в верхнем, так и в нижнем регистре, а другой — без точек в обоих случаях. Unicode позволяет локали использовать либо турецкие правила, либо правила, используемые во всех остальных случаях, где существует только один тип"I", который без точек в верхнем регистре и с точками в нижнем. Ядро Perl (ещё) не обрабатывает турецкий случай, и это сообщение предупреждает вас об этом. Вместо этого модуль Unicode::Casing позволяет вам в основном реализовать турецкие правила изменения регистра.Другой распространённой причиной являются символы
$ + < = > ^ ` | ~Они проблемны. Стандарт C указывает, что их следует считать пунктуацией в C локали (и стандарт POSIX ссылается на стандарт C), и Unicode обычно рассматривается как надмножество C локали. Но Unicode добавил дополнительную категорию «Символ» и классифицирует эти конкретные символы как символы. В большинстве локалей UTF-8 они рассматриваются как знаки препинания, поэтому ispunct(2) возвращает ненулевое значение для них. Но в некоторых локалях она возвращает 0. Perl использует первый подход, вообще не используя
ispunct()(см. примечание [5] в perlrecharclass), и это сообщение выводится для того, чтобы проинформировать вас о том, что вы получаете подход Perl, а не подход локали. - Локаль '%s' может работать некорректно.%s
-
(W locale) Вы используете именованную локаль, которая не является UTF-8, и Perl определил, что она не полностью совместима с тем, что он может обработать. Вторая
%sобъясняет причину.Самая распространённая причина — наличие в локали символов, представленных более чем одним байтом. Perl может обрабатывать только локали UTF-8. Вероятнее всего, указанная локаль — не UTF-8 и предназначена для восточноазиатских языков, таких как китайский или японский. Если локаль является надмножеством ASCII, то её ASCII часть может работать в Perl.
Некоторые практически устаревшие локали, которые не являются надмножествами ASCII, в основном локали ISO 646 или другие 7-битовые локали, такие как ASMO 449, также могут иметь проблемы, в зависимости от того, какие части набора символов ASCII изменяются локаль и используются программой. Предупреждающее сообщение перечисляет определяемые конфликтные символы.
Обратите внимание, что не все несовместимости обнаруживаются.
Если это произойдёт с вами, вы можете только переключиться на другую локаль или использовать Encode для преобразования локали в UTF-8; если это не представляется возможным, вас предупредили о том, что некоторые вещи могут сломаться.
Это сообщение выводится каждый раз, когда плохая локаль включается в рамках
use localeили при первом возможно затронутом действии, еслиuse localeнаследует плохую локаль. Оно не выводится для каких-либо операций из модуля POSIX. - localtime(%f) не удалось
-
(W overflow) Вы вызвали
localtimeс числом, которое он не смог обработать: слишком большим, слишком малым или NaN. Возвращённое значение —undef. - localtime(%f) слишком велико
-
(W overflow) Вы вызвали
localtimeс числом, которое было больше, чем он может надёжно обработать, иlocaltime, вероятно, вернуло неверную дату. Это предупреждение также срабатывает при NaN (специальном значении «не число»). - localtime(%f) слишком мало
-
(W overflow) Вы вызвали
localtimeс числом, которое было меньше, чем он может надёжно обработать, иlocaltime, вероятно, вернуло неверную дату. - Обратный просмотр длиной более %d не реализован в регулярном выражении m/%s/
-
(F) В настоящее время существует ограничение на длину строки, которую может обработать обратный просмотр. Это ограничение может быть снято в будущей версии.
- Потеря точности при %s %f на 1
-
(W imprecision) Значение, которое вы пытались увеличить или уменьшить на единицу, слишком велико для того, чтобы основополагающее представление с плавающей точкой могло хранить его точно, поэтому целевое значение
++или--не изменилось. Perl выводит это предупреждение, потому что уже переключился с целых чисел на числа с плавающей точкой, когда значения были слишком большими для целых чисел, и теперь даже чисел с плавающей точкой недостаточно. Возможно, вам следует явно использовать Math::BigInt. - lstat() для дескриптора файла%s
-
(W io) Вы пытались выполнить lstat для дескриптора файла. Что вы имели в виду? lstat() имеет смысл только для имён файлов. (Perl выполнил fstat() для дескриптора файла вместо этого.)
- Атрибут lvalue %s уже определён для подпрограммы
-
(W misc) Хотя attributes.pm разрешает это, включение или отключение атрибута lvalue для подпрограммы Perl, которая уже определена, не всегда работает корректно. Это может или не может сделать то, что вы хотите, в зависимости от кода внутри подпрограммы, с точными подробностями, меняющимися между версиями Perl. Делайте это только если вы действительно знаете, что делаете.
- Атрибут lvalue проигнорирован после определения подпрограммы
-
(W misc) Использование синтаксиса объявления
:lvalueдля превращения подпрограммы Perl в подпрограмму lvalue после её определения не разрешено. Чтобы сделать подпрограмму подпрограммой lvalue, добавьте атрибут lvalue к определению или поместите объявлениеsub foo :lvalue;перед определением.См. также attributes.pm.
- Магические константы списков не поддерживаются
-
(F) Вы присвоили магический массив элементу стека, а затем попытались использовать подпрограмму из того же слота. Вы просите Perl сделать то, что он не может, детали могут меняться между версиями Perl.
- Некорректное целое число в [] в pack
-
(F) Между скобками, окружающими числовой повторяющийся счётчик, разрешены только цифры. См. "pack" в perlfunc.
- Некорректное целое число в [] в unpack
-
(F) Между скобками, окружающими числовой повторяющийся счётчик, разрешены только цифры. См. "pack" в perlfunc.
- Некорректный PERLLIB_PREFIX
-
(F) Ошибка, специфичная для OS/2. PERLLIB_PREFIX должен иметь вид
prefix1;prefix2или prefix1 prefix2
с непустыми prefix1 и prefix2. Если
prefix1действительно является префиксом пути поиска встроенной библиотеки, prefix2 заменяется. Ошибка может возникнуть, если компоненты не найдены или слишком длинные. См. "PERLLIB_PREFIX" в perlos2. - Некорректный прототип для %s: %s
-
(F) Вы пытались использовать функцию с некорректным прототипом. Синтаксис прототипов функций проверяется на наличие очевидных ошибок, таких как недопустимые символы. Более строгая проверка выполняется при вызове функции. Возможно, автор функции пытался написать подпрограммную сигнатуру, но не включил эту функцию сначала (
use feature 'signatures'), поэтому вместо этого сигнатура была интерпретирована как некорректный прототип. - Некорректный символ UTF-8%s
-
(S utf8)(F) Perl обнаружил строку, которая должна быть в кодировке UTF-8, но она не соответствует правилам кодирования UTF-8 или представляет код символа, значение которого в виде целого числа не помещается в разрядную сетку текущей платформы (переполнение). Подробности о точной некорректности содержатся в переменной
%s, которая является частью сообщения.Возможной причиной является то, что вы установили флаг UTF8 для данных, которые вы считали данными UTF-8, но на самом деле это не так (например, данные были наследуемыми 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, но во время этого Perl столкнулся с некорректным суррогатом Юникода.
- Обязательный параметр следует за необязательным параметром
-
(F) В сигнатуре подпрограммы вы написали что-то вроде «$a = undef, $b», сделав более ранний параметр необязательным, а последующий — обязательным. Параметры заполняются слева направо, поэтому вызывающая сторона не может пропустить более ранний и передать последующий. Если вы хотите, чтобы параметры заполнялись справа налево, объявите самый правый параметр необязательным, а затем переставьте параметры в теле подпрограммы.
- Сопоставлен не-Unicode код 0x%X со свойством Юникода; возможно, не переносимо
-
(S non_unicode) Perl позволяет строкам содержать супермножество кодов Юникода; каждый код может быть таким же большим, как хранимый в знаковом целом числе на вашей системе, но эти коды могут не быть приняты другими языками/системами. Это сообщение появляется, когда вы сопоставляете строку, содержащую такой код, с шаблоном регулярного выражения, и код был сопоставлен со свойством Юникода,
\p{...}или\P{...}. Свойства Юникода определены только для кодов Юникода, поэтому результат этого сопоставления не определен Юникодом, но Perl (начиная с версии 5.20) обрабатывает не-Unicode коды, как если бы они были типичными незарезервированными кодами Юникода, и сопоставил их соответствующим образом. Указано, соответствует ли данное свойство этим кодам или нет, в "Свойства, доступные через \p{} и \P{}" в perluniprops.Это сообщение подавляется (если оно не было сделано фатальным), если оно не существенно для результатов сопоставления, если код является кодом Юникода или нет. Например, свойство
\p{ASCII_Hex_Digit}может соответствовать только 22 символам[0-9A-Fa-f], поэтому очевидно, что все остальные коды, Unicode или нет, не будут соответствовать ему. (И\P{ASCII_Hex_Digit}будет соответствовать каждому коду, за исключением этих 22.)Получение этого сообщения указывает на то, что результат сопоставления, по-видимому, должен был быть обратным тому, что на самом деле произошло. Если вы думаете, что это так, вы можете сделать категорию предупреждений
non_unicodeфатальной; если вы согласны с решением Perl, вы можете отключить эту категорию.Дополнительную информацию см. в "За пределами кодов Юникода" в perlunicode.
- %s соответствует пустой строке многократно в регулярном выражении; отмечено <-- HERE в m/%s/
-
(W regexp) Указанный вами шаблон будет бесконечным циклом, если движок регулярных выражений не проверит это специально. <-- HERE показывает, где в регулярном выражении была обнаружена проблема. См. 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{} в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Неправильный синтаксис литерала имени символа
\N{charname}в контексте двойных кавычек. Это также может произойти, когда есть пробел (или комментарий) между\Nи{в регулярном выражении с модификатором/x. Этот модификатор не изменяет требования, чтобы фигурная скобка следовал непосредственно за\N. - Отсутствуют фигурные скобки у \o{}
-
(F)
\oдолжно быть сразу после{в контексте двойных кавычек. - Отсутствует запятая после первого аргумента функции %s
-
(F) Хотя некоторые функции позволяют указать дескриптор файла или «косвенный объект» перед списком аргументов, эта функция не из их числа.
- Отсутствует команда в командном открытии
-
(W pipe) Вы использовали конструкцию
open(FH, "| command")илиopen(FH, "command |"), но команда отсутствовала или была пустой. - Отсутствует имя символа управления в \c
-
(F) Строка в двойных кавычках закончилась «\c», без необходимого имени символа управления.
- Отсутствует ']' в прототипе для %s : %s
-
(W illegalproto) Группировка началась с
[, но никогда не была закрыта]. - Отсутствует имя в "%s подпрограмма"
-
(F) Синтаксис лексически связанных подпрограмм требует, чтобы у них было имя, с помощью которого их можно найти.
- Отсутствует $ у переменной цикла
-
(F) Похоже, вы слишком много программируете на csh. В Perl переменные всегда указываются с $, в отличие от оболочек, где это может меняться от одной строки к другой.
- (Отсутствует оператор перед %s?)
-
(S syntax) Это обоснованное предположение, сделанное совместно с сообщением «%s найден там, где ожидается оператор». Часто пропущенным оператором является запятая.
- Отсутствующий или неопределенный аргумент для %s
-
(F) Вы пытались вызвать require или do без аргумента или с неопределенным значением в качестве аргумента. Require ожидает либо имя пакета, либо спецификацию файла в качестве аргумента; do ожидает имя файла. См. "require EXPR" в perlfunc и "do EXPR" в perlfunc.
- Отсутствует правая фигурная скобка у \%c{} в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Отсутствует правая фигурная скобка в
\x{...},\p{...},\P{...}или\N{...}. - Отсутствует правая фигурная скобка у \N{}
- Отсутствует правая фигурная скобка у \N{} или неэкранированная левая фигурная скобка после \N
-
(F)
\Nимеет два значения.Традиционное значение - это строка, после которой следует имя, заключенное в фигурные скобки, обозначающее символ (или последовательность символов), указанный этим именем. Таким образом,
\N{ASTERISK}— это другой способ записи*, допустимый как в строках в двойных кавычках, так и в шаблонах регулярных выражений. В шаблонах он не имеет значения, которое имеет неэкранированная*.Начиная с Perl 5.12.0,
\Nтакже может иметь дополнительное значение (только) в шаблонах, а именно соответствовать символу, не являющемуся переводом строки. (Это сокращение от[^\n], и похоже на., но не зависит от модификатора регулярных выражений/s.)Это может привести к некоторым неоднозначностям. Когда
\Nне следует сразу за левой фигурной скобкой, Perl предполагает значение[^\n]. Кроме того, если фигурные скобки образуют допустимый квантификатор, такой как\N{3}или\N{5,}, Perl предполагает, что это означает соответствие заданному количеству символов, отличных от перевода строки (в этих примерах 3; и 5 или более, соответственно). Во всех остальных случаях, где есть\N{и соответствующая}, Perl предполагает, что требуется имя символа.Однако, если нет соответствующей
}, Perl не знает, была ли она случайно опущена, или предполагалось значение[^\n]{, и выводит эту ошибку. Если вы имели в виду первое, добавьте правую фигурную скобку; если вы имели в виду второе, экранируйте фигурную скобку обратной косой чертой, например:\N\{ - Отсутствует правая фигурная или квадратная скобка
-
(F) Лексер подсчитал больше открывающих фигурных или квадратных скобок, чем закрывающих. Как правило, вы найдете ее неподалеку от места последнего редактирования.
- (Отсутствует точка с запятой в предыдущей строке?)
-
(S syntax) Это обоснованное предположение, сделанное совместно с сообщением «%s найден там, где ожидается оператор». Не ставьте автоматически точку с запятой в предыдущей строке только потому, что вы увидели это сообщение.
- Попытка изменения неизменяемого значения
-
(F) Вы пытались напрямую или косвенно изменить значение константы. Конечно, вы не пытались сделать "2 = 1", потому что компилятор это поймает. Но есть простой способ сделать то же самое:
sub mod { $_[0] = 1 } mod(2);Другой способ — присвоить значение методу substr(), выходящему за пределы строки.
Еще один способ — присвоить значение циклу
foreachVAR, когда VAR является псевдонимом константы в цикле LIST:$x = 1; foreach my $n ($x, 2) { $n *= 2; # modifies the $x, but fails on attempt to } # modify the 2 - Изменение недопустимого значения массива, %s
-
(F) Вы пытались создать значение массива, а индекс, вероятно, был отрицательным, даже считая от конца массива назад.
- Попытка изменения недопустимого значения хеша, %s
-
(P) Вы пытались создать значение хеша, но его невозможно было создать по какой-то причине.
- Имя модуля должно быть константой
-
(F) В качестве первого аргумента к "use" разрешается только имя модуля без параметров.
- Имя модуля необходимо с опцией -%c
-
(F) Опции
-Mили-mуказывают Perl на загрузку модуля, но вы опустили имя модуля. Подробную информацию об опциях-Mи-mсм. в perlrun. - Более одного аргумента для открытие '%s'
-
(F) Функция
openзапрошена для открытия нескольких файлов. Это может произойти, если вы пытаетесь открыть канал к команде, принимающей список аргументов, но забыли указать режим открытия через канал. Подробности см. в "open" в perlfunc. - mprotect для строки COW %p %u завершился ошибкой %d
-
(S) Вы скомпилировали perl с -DPERL_DEBUG_READONLY_COW (см. "Копирование при записи" в perlguts), но общий буфер строки не смог быть сделан только для чтения.
- mprotect для %p %u завершился ошибкой %d
-
(S) Вы скомпилировали perl с -DPERL_DEBUG_READONLY_OPS (см. perlhacktips), но дерево операций не смогло быть сделано только для чтения.
- mprotect RW для строки COW %p %u завершился ошибкой %d
-
(S) Вы скомпилировали perl с -DPERL_DEBUG_READONLY_COW (см. "Копирование при записи" в perlguts), но общий буфер строки только для чтения не смог быть сделан изменяемым.
- mprotect RW для %p %u завершился ошибкой %d
-
(S) Вы скомпилировали perl с -DPERL_DEBUG_READONLY_OPS (см. perlhacktips), но дерево операций только для чтения не смогло быть сделано изменяемым перед освобождением операций.
- msg%s не реализован
-
(F) На вашей системе отсутствует межпроцессный обмен сообщениями System V.
- Многомерный синтаксис %s не поддерживается
-
(W syntax) Многомерные массивы не пишутся как
$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 syntax) Переменные пакета $a и $b используются для сравнения сортировки. Вы использовали $a или $b в качестве операнда для оператора
<=>илиcmpвнутри блока сравнения сортировки, и переменная ранее была объявлена как лексическая переменная. Либо укажите имя пакета для переменной сортировки, либо переименуйте лексическую переменную. - "my" переменная %s не может быть в пакете
-
(F) Лексические переменные не находятся в пакете, поэтому нет смысла пытаться объявить их с указанием пакета. Используйте local(), если хотите локализовать переменную пакета.
- Имя "%s::%s" использовано только один раз: возможная опечатка
-
(W once) Опечатки часто проявляются в виде уникальных имён переменных. Если у вас есть веская причина для использования уникального имени, то просто упомяните его ещё раз каким-либо способом, чтобы подавить сообщение. Для этой цели также предоставлено объявление
our.ПРИМЕЧАНИЕ: Это предупреждение обнаруживает символы пакета, которые использовались только один раз. Это означает, что лексические переменные никогда не будут вызывать это предупреждение. Это также означает, что все переменные пакета $c, @c, %c, а также *c, &c, подпрограмма c{}, c(), и c (дескриптор файла или формат) считаются одинаковыми; если программа использует $c только один раз, но также использует любой из других, это предупреждение не будет выведено. Символы, начинающиеся с подчеркивания, и символы, использующие специальные идентификаторы (см. perldata), освобождены от этого предупреждения.
- Требуется ровно 3 восьмеричных цифры в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) В
(?[ ])все константы, интерпретируемые как восьмеричные, должны иметь ровно 3 цифры. Это помогает избежать неоднозначностей. Если ваша константа слишком короткая, добавьте ведущие нули, например(?[ [ \078 ] ]) # Syntax error! (?[ [ \0078 ] ]) # Works (?[ [ \007 8 ] ]) # ClearerМаксимальное значение, которое может выразить этот конструкт, —
\777. Если вам нужно большее значение, вам нужно использовать \o{} вместо него. Если вы имели в виду два отдельных значения, вам нужно разделить их:(?[ [ \7776 ] ]) # Syntax error! (?[ [ \o{7776} ] ]) # One meaning (?[ [ \777 6 ] ]) # Another meaning (?[ [ \777 \006 ] ]) # Still another - Отрицательный счёт '/' в unpack
-
(F) Длина, полученная из операции unpack с длиной/кодом, была отрицательной. См. "pack" в perlfunc.
- Отрицательная длина
-
(F) Вы пытались выполнить операцию чтения/записи/отправки/приёма с длиной буфера меньше 0. Это сложно представить.
- Отрицательный смещение для vec в контексте lvalue
-
(F) Когда
vecвызывается в контексте lvalue, второй аргумент должен быть больше или равен нулю. - Отрицательный счёт повторений ничего не делает
-
(W numeric) Вы пытались выполнить операцию повторения
xменее 0 раз, что бессмысленно. - Вложенные квантификаторы в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы не можете квантифицировать квантификатор без вложенных скобок. Таким образом, такие конструкции, как ** или +* или ?*, являются недопустимыми. <-- HERE показывает, где в регулярном выражении была обнаружена проблема.
Обратите внимание, что минимальные квантификаторы
*?,+?и??, кажется, являются вложенными квантификаторами, но таковыми не являются. См. perlre. - %s никогда не вводился
-
(S internal) Символ, о котором идёт речь, был объявлен, но как-то вышел из области видимости, прежде чем мог быть использован.
- next::method/next::can/maybe::next::method не может найти окружающий метод
-
(F)
next::methodдолжен вызываться в контексте реального метода в реальном пакете, и он не смог найти такой контекст. См. mro. - \N в классе символов должен быть именованным символом: \N{...} в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Новое (с Perl 5.12) значение
\Nкак[^\n]недействительно в скобках класса символов по той же причине, что и.в классе символов теряет свою специфичность: оно соответствует почти всему, что, вероятно, не является тем, что вы хотите. - \N{} в обращённом классе символов или в качестве конечной точки диапазона ограничено одним символом в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Именованные эскейпы Юникод-символов (
\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, которая должна вызываться в начале каждого обычного вызова подпрограммы. - Не указан каталог для -I
-
(F) Переключатель командной строки -I требует указания имени каталога в рамках того же аргумента. Используйте, например, -Ilib. -I lib не сработает.
- Файл ошибок отсутствует после 2> или 2>> в командной строке
-
(F) Ошибка, характерная для VMS. Perl обрабатывает перенаправление командной строки, и обнаружил «2>» или «2>>» в командной строке, но не может найти имя файла, в который нужно записать данные, предназначенные для stderr.
- Не найден символ окончания группы '%c' в шаблоне
-
(F) В шаблоне pack или unpack есть открывающая скобка '(' или '[' без соответствующей закрывающей. См. "pack" в perlfunc.
- Файл ввода отсутствует после < в командной строке
-
(F) Ошибка, характерная для VMS. Perl обрабатывает перенаправление командной строки, и обнаружил символ '<' в командной строке, но не может найти имя файла, из которого нужно читать данные для stdin.
- Метод next::'%s' не найден для %s
-
(F)
next::methodне обнаружил дальнейших экземпляров этого имени метода в оставшихся пакетах MRO этого класса. Если вы не хотите, чтобы он выбрасывал исключение, используйтеmaybe::next::methodилиnext::can. См. mro. - Неограниченное число повторений ничего не делает
-
(W numeric) Вы попытались выполнить оператор повторения
xInf(или-Inf) илиNaNраз, что не имеет смысла. - Недопустимый шестнадцатеричный символ в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) В регулярном выражении был недопустимый шестнадцатеричный символ, где ожидался шестнадцатеричный, например
(?[ [ \xDG ] ]) (?[ [ \x{DEKA} ] ]) - Недопустимый восьмеричный символ в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) В регулярном выражении был недопустимый восьмеричный символ, где ожидался восьмеричный, например
(?[ [ \o{1278} ] ]) - Недопустимый восьмеричный символ '%c'. Разрешено как "%s"
-
(W digit) При разборе восьмеричной числовой константы неожиданно был встречен символ, который не является восьмеричным. Результирующее значение указано.
- "no" недопустимо в выражении
-
(F) Ключевое слово "no" распознаётся и выполняется во время компиляции и не возвращает полезного значения. См. perlmod.
- Переданное значение не является строкой
-
(W misc) Число передано в качестве аргумента маски битов для select(). Используйте функцию vec() для построения масок битов дескрипторов файлов для select. См. "select" в perlfunc.
- Файл вывода отсутствует после > в командной строке
-
(F) Ошибка, характерная для VMS. Perl обрабатывает перенаправление командной строки и обнаружил одиночный символ '>' в конце командной строки, поэтому не знает, куда перенаправить stdout.
- Файл вывода отсутствует после > или >> в командной строке
-
(F) Ошибка, характерная для VMS. Perl обрабатывает перенаправление командной строки и обнаружил символ '>' или '>>' в командной строке, но не может найти имя файла, в который нужно записать данные, предназначенные для stdout.
- Не разрешено имя пакета для подпрограммы %s в "our"
- Не разрешено имя пакета для переменной %s в "our"
-
(F) Полностью квалифицированные имена подпрограмм и переменных недопустимы в объявлениях "our", так как это не имеет большого смысла в соответствии с существующими правилами. Такая синтаксическая конструкция зарезервирована для будущих расширений.
- Скрипт Perl не найден во вводе
-
(F) Вы вызвали
perl -x, но в файле не найдено строки, начинающейся с #! и содержащей слово "perl". - setregid недоступен
-
(F) Configure не обнаружил ничего, похожего на вызов setregid() для вашей системы.
- setreuid недоступен
-
(F) Configure не обнаружил ничего, похожего на вызов setreuid() для вашей системы.
- Класс %s не найден
-
(F) Вы указали квалификатор класса в объявлении "my", "our" или "state", но этот класс не существует на данном этапе вашей программы.
- Поле класса "%s" не найдено в переменной %s типа %s
-
(F) Вы попытались получить доступ к ключу из хеша через указанную типизированную переменную, но этот ключ не разрешён пакетом того же типа. Указанный пакет ограничил набор разрешённых ключей с помощью прагмы fields.
- Такой обработчик не найден: %s
-
(F) Вы указали обработчик сигнала, который не распознаётся Perl. В настоящее время Perl принимает
__DIE__и__WARN__в качестве допустимых обработчиков сигналов. - Такой канал не открыт
-
(P) Ошибка, характерная для VMS. Внутренняя процедура my_pclose() попыталась закрыть канал, который не был открыт. Это должно было быть обнаружено ранее как попытка закрыть неоткрытый дескриптор файла.
- Сигнал SIG%s не найден
-
(W signal) Вы указали имя сигнала как индекс к %SIG, которое не распознаётся. Введите
kill -lв вашей оболочке, чтобы увидеть допустимые имена сигналов на вашей системе. - Ни одно сопоставление по шаблону значения свойства Unicode не найдено:
-
(W regexp) Вы указали символ подстановки для значения свойства Unicode, но в текущей версии Unicode нет значения свойства, которое ему соответствует. Проверьте правильность написания.
- Это не ссылка на процедуру
-
(F) Perl пытался оценить ссылку на значение кода (то есть подпрограмму), но вместо этого обнаружил ссылку на что-то другое. Вы можете использовать функцию ref() для определения того, какой тип ссылки это на самом деле. См. также perlref.
- Это не ссылка на GLOB
-
(F) Perl пытался оценить ссылку на «typeglob» (то есть запись в таблице символов, которая выглядит как
*foo), но вместо этого обнаружил ссылку на что-то другое. Вы можете использовать функцию ref() для определения того, какой тип ссылки это на самом деле. См. perlref. - Это не ссылка на хеш
-
(F) Perl пытался оценить ссылку на значение хеша, но вместо этого обнаружил ссылку на что-то другое. Вы можете использовать функцию ref() для определения того, какой тип ссылки это на самом деле. См. perlref.
- Символ '#' не допускается непосредственно после сигила в сигнатуре подпрограммы
-
(F) В определении сигнатуры подпрограммы комментарий, следующий за сигилом (
$,@или%), должен быть отделён пробелами или запятыми и т. п., в частности, чтобы избежать путаницы с переменной$#. Например:# bad sub f ($# ignore first arg , $b) {} # good sub f ($, # ignore first arg $b) {} - Это не ссылка на массив
-
(F) Perl пытался оценить ссылку на значение массива, но вместо этого обнаружил ссылку на что-то другое. Вы можете использовать функцию ref() для определения того, какой тип ссылки это на самом деле. См. perlref.
- Это не ссылка на скаляр
-
(F) Perl пытался оценить ссылку на значение скаляра, но вместо этого обнаружил ссылку на что-то другое. Вы можете использовать функцию ref() для определения того, какой тип ссылки это на самом деле. См. perlref.
- Это не ссылка на подпрограмму
-
(F) Perl пытался оценить ссылку на значение кода (то есть подпрограмму), но вместо этого обнаружил ссылку на что-то другое. Вы можете использовать функцию ref() для определения того, какой тип ссылки это на самом деле. См. также perlref.
- Неверная ссылка на подпрограмму в таблице перегрузки
-
(F) Была предпринята попытка указать запись в таблице перегрузки, которая каким-то образом не указывает на действительную подпрограмму. См. overload.
- Недостаточно аргументов для %s
-
(F) Функция требует больше аргументов, чем вы указали.
- Недостаточно аргументов форматирования
-
(W синтаксис) Указанный формат содержит больше полей форматирования, чем следующая строка предоставила. См. perlform.
- %s: не найдено
-
(A) Вы случайно запустили свой скрипт через оболочку Bourne вместо Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl.
- Нет информации об UTC-смещении; предполагается, что местное время равно UTC
-
(S) Предупреждение, характерное для VMS. Perl не смог найти смещение местного часового пояса, поэтому предполагает, что местное системное время равно UTC. Если это не так, определите логическое имя SYS$TIMEZONE_DIFFERENTIAL, чтобы перевести в количество секунд, которое нужно добавить к UTC, чтобы получить местное время.
- NULL OP В RUN
-
(S отладка) Некоторая внутренняя процедура вызвала run() с указателем на нулевой код операции.
- Пустая картина в форме
-
(F) Первый аргумент для formline должен быть действительным форматом спецификации изображения. Он был найден пустым, что, вероятно, означает, что вы передали ему неинициализированное значение. См. perlform.
- Null realloc
-
(P) Была предпринята попытка realloc NULL.
- NULL аргумент регулярного выражения
-
(P) Внутренние процедуры сопоставления шаблонов сильно напортачили.
- NULL параметр регулярного выражения
-
(P) Внутренние процедуры сопоставления шаблонов сошли с ума.
- Число слишком длинное
-
(F) Perl ограничивает представление десятичных чисел в программах примерно 250 символами. Вы превысили эту длину. Будущие версии Perl, вероятно, устранят это произвольное ограничение. Тем временем, попробуйте использовать научную запись (например, "1e6" вместо "1_000_000").
- Число без цифр
-
(F) Perl искал число, но ничего, что выглядело как число, не нашел. Это происходит, например, с
\o{}, без числа между фигурными скобками. - Восьмеричное число > 037777777777 не переносимо
-
(W переносимость) Указанное вами восьмеричное число больше, чем 2**32-1 (4294967295), и поэтому не переносимо между системами. См. perlport для получения дополнительной информации о проблемах переносимости.
- Неправильное имя/значение аргумента для подпрограммы '%s'
-
(F) Подпрограмма, использующая параметр хэша со слиянием в своем сигнатуре, получила нечетное количество аргументов для заполнения хэша. Она требует, чтобы аргументы были спарены, с тем же количеством ключей, что и значений. Виновником, скорее всего, является вызывающая подпрограмма.
Сообщение пытается включить имя вызываемой подпрограммы. Если подпрограмма была алиасирована, будет показано оригинальное имя подпрограммы, независимо от того, какое имя использовал вызывающий.
- Нечетное число аргументов для overload::constant
-
(W перегрузка) Вызов overload::constant содержал нечетное количество аргументов. Аргументы должны идти парами.
- Нечетное число элементов в анонимном хэше
-
(W разное) Вы указали нечетное число элементов для инициализации хэша, что нечетно, поскольку хэши содержат пары ключ/значение.
- Нечетное число элементов в присваивании хэша
-
(W разное) Вы указали нечетное число элементов для инициализации хэша, что нечетно, поскольку хэши содержат пары ключ/значение.
- Смещение за пределами строки
-
(F)(W уровень) Вы пытались выполнить операцию чтения/записи/отправки/приема/позиционирования с смещением, указывающим за пределы буфера. Это сложно представить. Единственными исключениями являются нулевое заполнение при прохождении за конец строки при чтении файла или при позиционировании за конец скаляра, открытого для ввода-вывода (в ожидании будущих чтений и для имитации поведения с реальными файлами).
- Старый разделитель пакетов используется в строке
-
(W синтаксис) Вы использовали старый разделитель пакетов, "'", в имени переменной внутри двойной кавычки; например,
"In $name's house". Это эквивалентно"In $name::s house". Если вы имели в виду первое, поставьте обратный слэш перед апострофом ("In $name\'s house"). - %s() на неоткрытом %s
-
(W неоткрытый) Была предпринята операция ввода-вывода на дескрипторе файла, который никогда не был инициализирован. Вам необходимо выполнить вызов open(), sysopen() или socket(), или вызвать конструктор из пакета FileHandle.
- -%s на неоткрытом дескрипторе файла %s
-
(W неоткрытый) Вы попытались вызвать оператор проверки файла на дескрипторе файла, который не открыт. Проверьте свой поток управления. См. также "-X" в perlfunc.
- oops: oopsAV
-
(S внутренний) Внутреннее предупреждение о том, что грамматика испорчена.
- oops: oopsHV
-
(S внутренний) Внутреннее предупреждение о том, что грамматика испорчена.
- Операнд без предшествующего оператора в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) Вы написали что-то вроде
(?[ \p{Digit} \p{Thai} ])Есть два операнда, но нет оператора, определяющего, как их объединить.
- Операция "%s": метод не найден, %s
-
(F) Была предпринята попытка выполнить перегруженную операцию, для которой не было определено обработчика. Хотя некоторые обработчики могут быть сгенерированы автоматически в терминах других обработчиков, нет обработчика по умолчанию для любой операции, если только ключ
fallbackперегрузки не установлен в true. См. overload. - Операция "%s" возвращает свой аргумент для не-Unicode кодового пункта 0x%X
-
(S не_unicode) Вы выполнили операцию, требующую правил Unicode, для кодового пункта, который не входит в Unicode, поэтому то, что должно быть сделано, не определено. Perl выбрал для него ничего не делать и предупредить вас.
Если показанная операция — "ToFold", это означает, что сопоставление без учета регистра в регулярном выражении было выполнено для кодового пункта.
Если вы знаете, что делаете, вы можете отключить это предупреждение, используя
no warnings 'non_unicode';. - Операция "%s" возвращает свой аргумент для UTF-16 суррогата U+%X
-
(S суррогат) Вы выполнили операцию, требующую правил Unicode, для Unicode суррогата. Unicode осуждает использование суррогатов для чего-либо, кроме хранения строк в UTF-16, но правила (неохотно) определены для суррогатов, и они ничего не делают для этой операции. Поскольку использование суррогатов может быть опасным, Perl предупреждает.
Если показанная операция — "ToFold", это означает, что сопоставление без учета регистра в регулярном выражении было выполнено для кодового пункта.
Если вы знаете, что делаете, вы можете отключить это предупреждение, используя
no warnings 'surrogate';. - Оператор или точка с запятой отсутствуют перед %s
-
(S неоднозначность) Вы использовали переменную или вызов подпрограммы, где анализатор ожидал оператора. Анализатор предположил, что вы действительно имели в виду использовать оператор, но это, скорее всего, неверно. Например, если вы скажете "*foo *foo", это будет интерпретировано так, как будто вы сказали "*foo * 'foo'".
- Недостаток выражения по умолчанию для необязательного параметра
-
(F) В сигнатуре подпрограммы вы написали что-то вроде "$a =", создав именованный необязательный параметр без значения по умолчанию. Безымянный необязательный параметр может не иметь значения по умолчанию, но именованный должен иметь конкретное значение по умолчанию. Вероятно, вы хотели бы "$a = undef".
- Глобальная переменная %s с "our" объявлена повторно
-
(W тень) Похоже, вы уже объявляли ту же глобальную переменную ранее в текущей лексической области.
- Ошибка памяти!
-
(X) Функция malloc() вернула 0, что указывает на недостаток свободной памяти (или виртуальной памяти) для удовлетворения запроса. Perl не имеет выбора, кроме как немедленно завершить работу.
По крайней мере, в Unix вы можете обойти это, увеличив лимиты размера данных процесса: в csh/tcsh используйте
limitиlimit datasize n(гдеn- количество килобайт) для проверки текущих лимитов и изменения их, а в ksh/bash/zsh используйтеulimit -aиulimit -d nсоответственно. - Ошибка памяти во время расширения %s
-
(X) Была предпринята попытка расширить массив, список или строку за пределы максимального возможного выделения памяти.
- Ошибка памяти во время «большого» запроса для %s
-
(F) Функция malloc() вернула 0, что указывает на недостаток свободной памяти (или виртуальной памяти) для удовлетворения запроса. Однако запрос был признан достаточно большим (значение по умолчанию во время компиляции составляет 64 КБ), поэтому предоставлена возможность завершения работы, поймав эту ошибку.
- Ошибка памяти во время запроса для %s
-
(X)(F) Функция malloc() вернула 0, что указывает на недостаток свободной памяти (или виртуальной памяти) для удовлетворения запроса.
Запрос был признан небольшим, поэтому возможность перехвата зависит от способа компиляции perl. По умолчанию он не перехватывается. Однако, если он скомпилирован для этого, Perl может использовать содержимое
$^Mв качестве аварийного пула после завершения работы с помощью этого сообщения. В этом случае ошибка перехватывается *один раз*, и сообщение об ошибке будет включать строку и файл, где произошел неудачный запрос. - Ошибка памяти при чрезвычайно большом запросе
-
(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) Мы извлекли контекст из стека к контексту с указанной меткой, а затем обнаружили, что это не контекст, для которого мы знаем, как выполнить goto.
- Паника: gp_free не удалось освободить указатель на глобал
-
(P) Внутренняя функция, используемая для очистки элементов типаглоба, пыталась это сделать многократно, но каждый раз что-то вновь создавало элементы в глобле. Скорее всего, глобал содержит объект со ссылкой обратно на глобал и деструктором, который добавляет новый объект в глобал.
- Паника: INTERPCASEMOD, %s
-
(P) Лексер попал в плохое состояние в модификаторе случая.
- Паника: INTERPCONCAT, %s
-
(P) Лексер попал в плохое состояние при разборе строки с квадратными скобками.
- Паника: kid popen errno read
-
(F) Ветвь, созданная с помощью fork, вернула непонятное сообщение об errno.
- Паника: last, тип=%u
-
(P) Мы извлекли контекст из стека к контексту блока, а затем обнаружили, что это не контекст блока.
- Паника: leave_scope clearsv
-
(P) Изменяемая лексическая переменная каким-то образом стала неизменяемой внутри области видимости.
- Паника: leave_scope несоответствие %u
-
(P) Вероятно, стек сохранения вышел из синхронизации. По крайней мере, на его вершине был неверный перечисление.
- Паника: magic_killbackrefs
-
(P) Не удалось выполнить внутреннюю проверку целостности при попытке сбросить все слабые ссылки на объект.
- Паника: malloc, %s
-
(P) Что-то запросило отрицательное количество байт для malloc.
- Паника: переполнение памяти
-
(P) Что-то попыталось выделить либо больше памяти, чем возможно, либо отрицательное количество.
- Паника: pad_alloc, %p!=%p
-
(P) Компилятор запутался, какой буфер он выделял и освобождал временные и лексические переменные из.
- Паника: pad_free curpad, %p!=%p
-
(P) Компилятор запутался, какой буфер он выделял и освобождал временные и лексические переменные из.
- Паника: pad_free po
-
(P) Внутренне обнаружен нулевой смещение буфера. Была предпринята попытка освободить целевой объект, который изначально не был выделен.
- Паника: pad_reset curpad, %p!=%p
-
(P) Компилятор запутался, какой буфер он выделял и освобождал временные и лексические переменные из.
- Паника: pad_sv po
-
(P) Внутренне обнаружено нулевое смещение буфера. Вероятно, оператору требовалась цель, но эта цель не была выделена по какой-то причине.
- Паника: pad_swipe curpad, %p!=%p
-
(P) Компилятор запутался, какой буфер он выделял и освобождал временные и лексические переменные из.
- Паника: pad_swipe po
-
(P) Внутренне обнаружено недопустимое смещение буфера.
- Паника: pp_iter, тип=%u
-
(P) Итератор цикла foreach был вызван в контексте, не являющемся циклом.
- Паника: pp_match%s
-
(P) Внутренняя функция pp_match() была вызвана с недопустимыми операционными данными.
- Паника: realloc, %s
-
(P) Что-то запросило отрицательное количество байт для realloc.
- Паника: несоответствие счётчика ссылок на nsv в sv_replace() (%d != 1)
-
(P) Внутренняя функция sv_replace() получила новый SV с количеством ссылок, отличным от 1.
- Паника: restartop в %s
-
(P) Некоторая внутренняя функция запросила goto (или что-то подобное), но не указала место назначения.
- Паника: return, тип=%u
-
(P) Мы извлекли контекст из стека к контексту подпрограммы или eval, а затем обнаружили, что это не контекст подпрограммы или eval.
- Паника: scan_num, %s
-
(P) scan_num() была вызвана на объект, не являющийся числом.
- Паника: Последовательность (?{...}): не найден блок кода в регулярном выражении m/%s/
-
(P) При компиляции шаблона с вложенными блоками кода (?{}) или (??{}), Perl не смог найти блок кода, который должен был быть уже обработан и скомпилирован Perl до того, как управление перешло к компилятору регулярных выражений.
- Паника: strxfrm() возвращает нелепый результат — a => %u, ab => %u
-
(P) Проверка целостности интерпретатора для функции C strxfrm() завершилась ошибкой. В текущей локали преобразованное значение строки "ab" короче, чем строки "a", что бессмысленно.
- Паника: sv_chop %s
-
(P) Функция sv_chop() получила позицию, которая не находится внутри буфера строки скаляра.
- Паника: sv_insert, midend=%p, bigend=%p
-
(P) Функция sv_insert() получила запрос на удаление большего количества символов, чем их существует в строке.
- Паника: top_env
-
(P) Компилятор попытался выполнить goto или что-то подобное.
- Паника: нереализованный оператор %s (#%d) вызван
-
(P) Компилятор неправильно сконфигурирован и попытался использовать оператор, который запрещён во время выполнения.
- Паника: неизвестный OA_*: %x
-
(P) Внутренняя функция, обрабатывающая аргументы вызовов подпрограмм
&CORE::foo(), не смогла определить тип ожидаемых аргументов. - Паника: utf16_to_utf8: нечётная длина в байтах
-
(P) Что-то попыталось вызвать utf16_to_utf8 с нечётной (вместо чётной) длиной в байтах.
- Паника: utf16_to_utf8_reversed: нечётная длина в байтах
-
(P) Что-то попыталось вызвать utf16_to_utf8_reversed с нечётной (вместо чётной) длиной в байтах.
- Паника: yylex, %s
-
(P) Лексер попал в плохое состояние при обработке модификатора случая.
- Не хватает скобок вокруг списка "%s"
-
(W parenthesis) Вы написали что-то вроде
my $foo, $bar = @_;когда имели в виду
my ($foo, $bar) = @_;Помните, что "my", "our", "local" и "state" имеют больший приоритет, чем запятая.
- Внутренняя ошибка разбора кода (%s)
-
(F) Разбор кода, предоставленного расширением, нарушил API парсера обнаружимым способом.
- Вложение подпрограмм шаблонов без изменения позиции превысило предел в регулярном выражении
-
(F) Вы использовали шаблон, который использует слишком много вложенных вызовов подвыражений без потребления текста. Перестройте шаблон так, чтобы текст потреблялся до превышения предела вложенности.
-
-pместо назначения: %s
-
(F) Произошла ошибка при неявном выводе, вызванном переключателем командной строки
-p. (Этот вывод отправляется в STDOUT, если вы не перенаправили его с помощью select().) - Perl API версия %s от %s не соответствует %s
-
(F) Модуль XS был скомпилирован с другой несовместимой версией Perl, чем та, которая загрузила модуль XS.
- Правила сворачивания Perl не обновлены для 0x%X; используйте утилиту perlbug для отчета об ошибке; в регулярном выражении; отмечено <-- HERE в m/%s/
-
(S regexp) Вы использовали регулярное выражение с нечувствительным к регистру соответствием, и в Perl есть ошибка, в которой встроенные правила сворачивания регулярных выражений неточны. Это может привести к неверным результатам. Пожалуйста, сообщите об этой ошибке по адресу https://github.com/Perl/perl5/issues.
- Экспериментальный слой PerlIO ':win32'
-
(S experimental::win32_perlio) Экспериментальный слой PerlIO
:win32. Если вы хотите рискнуть использовать этот слой, просто отключите это предупреждение:no warnings "experimental::win32_perlio"; - Perl_my_%s() недоступен
-
(F) Ваша платформа имеет очень необычный порядок байтов и размер целых чисел, поэтому не удалось настроить некоторые или все функции преобразования порядка байтов фиксированной ширины. Эта проблема возникает только при использовании модификаторов '<' или '>' в шаблонах (un)pack. См. "pack" в perlfunc.
- Для Perl требуется %s (вы имели в виду %s?)--это только %s, остановлено
-
(F) Код, который вы пытаетесь запустить, запросил более новую версию Perl, чем у вас. Возможно,
use 5.10было написано вместоuse 5.010илиuse v5.10. Без ведущегоvчисло интерпретируется как десятичное, при этом каждые три цифры после десятичной точки представляют часть номера версии. Таким образом, 5.10 эквивалентно v5.100. - Для Perl требуется %s--это только %s, остановлено
-
(F) Модуль использует функции версии Perl, более новой, чем текущая. Сколько времени прошло с момента последнего обновления? См. "require" в perlfunc.
- PERL_SH_DIR слишком длинный
-
(F) Ошибка, специфичная для OS/2. PERL_SH_DIR - это каталог для поиска
sh-оболочки. См. "PERL_SH_DIR" в perlos2. - PERL_SIGNALS неверно: "%s"
-
(X) См. "PERL_SIGNALS" в perlrun для допустимых значений.
- Версии Perl с %s слишком новые--эта версия %s, остановлено
-
(F) Код, который вы пытаетесь запустить, утверждает, что он не будет работать с используемой версией Perl, потому что она слишком новая. Возможно, код необходимо обновить, или он просто неверен, и проверку версии можно удалить.
- perl: предупреждение: Не шестнадцатеричный символ в '$ENV{PERL_HASH_SEED}', начальное значение установлено частично
-
(S) PERL_HASH_SEED должен соответствовать /^\s*(?:0x)?[0-9a-fA-F]+\s*\z/ , но содержит не шестнадцатеричный символ. Это может означать, что вы не используете ожидаемое начальное значение хэша.
- perl: предупреждение: Не удалось установить локаль.
-
(S) Весь текст предупреждения будет выглядеть примерно так:
perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LC_ALL = "En_US", LANG = (unset) are supported and installed on your system. perl: warning: Falling back to the standard locale ("C").Точные значения не установленных локалей различаются. В приведенном выше примере значения LC_ALL были "En_US", а LANG не имело значения. Эта ошибка означает, что Perl обнаружил, что вы, ваш поставщик операционной системы или системный администратор настроили систему локалей, но Perl не смог использовать эти настройки. К счастью, это не критическая ошибка: существует "локаль по умолчанию" под названием "C", которую Perl может и будет использовать, и сценарий будет запущен. Однако, прежде чем вы действительно исправите проблему, вы будете получать это сообщение об ошибке каждый раз при запуске Perl. Как исправить проблему можно найти в разделе perllocale в разделе PROBLEMS WITH LOCALES.
- perl: предупреждение: странное значение в '$ENV{PERL_PERTURB_KEYS}': '%s'
-
(S) Perl был запущен с переменной окружения PERL_PERTURB_KEYS, но содержащее неожиданное значение. Допустимые значения этого параметра следующие.
Numeric | String | Result --------+---------------+----------------------------------------- 0 | NO | Disables key traversal randomization 1 | RANDOM | Enables full key traversal randomization 2 | DETERMINISTIC | Enables repeatable key traversal | | randomizationПринимаются как числовые, так и строковые значения, но обратите внимание, что строковые значения чувствительны к регистру. Значение по умолчанию для этого параметра - "RANDOM" или 1.
- pid %x не является дочерним процессом
-
(W exec) Предупреждение, специфичное для VMS. Waitpid() было попрошено дождаться процесса, который не является дочерним процессом текущего процесса. Хотя это нормально с точки зрения VMS, вероятно, это не то, что вы имели в виду.
- 'P' должен иметь явный размер в unpack
-
(F) Формат unpack P должен иметь явный размер, а не "*".
- Неизвестный POSIX класс [:%s:] в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Класс в синтаксисе класса символов [: :] неизвестен. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. Обратите внимание, что POSIX классы символов не имеют префикса
is, который есть у соответствующих C интерфейсов: другими словами, это[[:print:]], а неisprint. См. perlre. - POSIX getpgrp не может принимать аргумент
-
(F) Ваша система имеет POSIX getpgrp(), который не принимает аргумент в отличие от версии BSD, которая принимает pid.
- Синтаксис POSIX [%c-%c] должен находиться внутри классов символов%s в регулярном выражении; отмечено <-- HERE в m/%s/
-
(W regexp) Perl считает, что вы имели в виду POSIX класс символов, но не использовали достаточно скобок. Эти конструкции POSIX классов [: :], [= =] и [. .] идут внутри классов символов, например:
qr/[012[:alpha:]345]/. Скорее всего, скомпилированное регулярное выражение не соответствует вашим намерениям. Например,qr/[:alpha:]/компилируется в регулярный класс символов, содержащий четыре символа":","a","l","h"и"p". Для указания POSIX класса он должен был быть записанqr/[[:alpha:]]/.Обратите внимание, что [= =] и [. .] в настоящее время не реализованы; они просто служат плацехолдерами для будущих расширений и приведут к ошибкам. <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.
Если спецификация класса не была полностью корректной, сообщение об этом указывает.
- Синтаксис POSIX [. .] зарезервирован для будущих расширений в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) В классах символов регулярных выражений ([]) синтаксис, начинающийся с "[." и заканчивающийся ".]", зарезервирован для будущих расширений. Если вам нужно представить эти последовательности символов внутри класса символов регулярного выражения, просто экранируйте квадратные скобки обратной косой чертой: "\[." и ".\]". <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.
- Синтаксис POSIX [= =] зарезервирован для будущих расширений в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) В классах символов регулярных выражений ([]) синтаксис, начинающийся с "[=" и заканчивающийся "=]", зарезервирован для будущих расширений. Если вам нужно представить эти последовательности символов внутри класса символов регулярного выражения, просто экранируйте квадратные скобки обратной косой чертой: "\[=" и "=\]". <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.
- Возможная попытка добавить комментарии в список qw()
-
(W qw) Список qw() содержит элементы, разделенные пробелами; как и с литеральными строками, символы комментариев не игнорируются, а вместо этого обрабатываются как данные. (Вы можете использовать другие разделители, помимо скобок, здесь; скобки фигурные также часто используются.)
Вероятно, вы написали что-то вроде этого:
@list = qw( a # a comment b # another comment );когда вам следовало написать это:
@list = qw( a b );Если вам действительно нужны комментарии, создайте свой список старым способом, со скобками и запятыми:
@list = ( 'a', # a comment 'b', # another comment ); - Возможная попытка разделить слова запятыми
-
(W qw) Списка qw() содержит элементы, разделённые пробелами; поэтому запятые не нужны для разделения элементов. (Вы можете использовать другие разделители, помимо скобок, здесь; скобки фигурные также часто используются.)
Вероятно, вы написали что-то вроде этого:
qw! a, b, c !;что помещает буквальные запятые в некоторые элементы списка. Напишите его без запятых, если вы не хотите, чтобы они появлялись в ваших данных:
qw! a b c !; - Возможная порча памяти: %s превысил 3-й аргумент
-
(F) ioctl() или fcntl() вернули больше, чем Perl ожидал. Perl предполагает разумный размер буфера, но помещает контрольный байт в конец буфера на всякий случай. Этот контрольный байт был перезаписан, и Perl предполагает, что память теперь повреждена. См. "ioctl" в perlfunc.
- Возможная проблема с приоритетом оператора управления потоком
-
(W syntax) Возможна проблема с сочетанием оператора управления потоком (например,
return) и оператора низкого приоритета, такого какor. Рассмотрите:sub { return $a or $b; }Это разбирается как:
sub { (return $a) or $b; }Что фактически равно:
sub { return $a; }Используйте скобки или вариант оператора с высоким приоритетом.
Обратите внимание, что это также может быть вызвано конструкциями типа:
sub { 1 if die; } - Возможная проблема с приоритетом битового оператора %s
-
(W precedence) Ваша программа использует побитовый логический оператор в сочетании с оператором числового сравнения, например, так:
if ($x & $y == 0) { ... }Это выражение фактически эквивалентно
$x & ($y == 0)из-за более высокого приоритета==. Вероятно, это не то, что вы хотите. (Если вы действительно имели в виду это, отключите предупреждение или, лучше, явно поставьте скобки и напишите$x & ($y == 0)). - Возможная непреднамеренная интерполяция $ в регулярном выражении
-
(W ambiguous) Вы использовали что-то вроде
m/$\/в регулярном выражении. Регулярное выражениеm/foo$\s+bar/mозначает: найти слово 'foo', разделитель записи вывода (см. "$\" в perlvar) и букву 's' (один или более раз), за которой следует слово 'bar'.Если это то, что вы имели в виду, то вы можете отключить предупреждение, используя
m/${\}/(например:m/foo${\}s+bar/).Если вы хотели найти слово 'foo' в конце строки, за которым следует пробел и слово 'bar' в следующей строке, то используйте
m/$(?)\/(например:m/foo$(?)\s+bar/). - Возможная непреднамеренная интерполяция %s в строке
-
(W ambiguous) Вы написали что-то вроде '@foo' в строке с двойными кавычками, но в этот момент массив
@fooне был в области видимости. Если вы хотели написать литерал @foo, напишите его как \@foo; в противном случае выясните, что случилось с массивом, о котором вы, видимо, забыли. - Проблема приоритета: open %s должен быть open(%s)
-
(S precedence) Старый нерегулярный конструкт
open FOO || die;теперь интерпретируется как
open(FOO || die);из-за строгой регламентации грамматики Perl 5 в унарные и списковые операторы. (Старый open был немного и тем, и другим.) Вы должны поставить скобки вокруг имени файла или использовать новый оператор "or" вместо "||".
- Преждевременный конец заголовков скрипта
-
См. "Ошибка сервера 500".
- 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) Файловый дескриптор, из которого вы читаете, был закрыт до этого момента. Проверьте поток управления.
- read() на закрытом файловом дескрипторе %s
-
(W closed) Вы пытались прочитать из закрытого файлового дескриптора.
- read() на незакрытом файловом дескрипторе %s
-
(W unopened) Вы пытались прочитать из файлового дескриптора, который никогда не открывался.
- Перевыделение слишком большое: %x
-
(F) На машине MS-DOS вы не можете выделить более 64К.
- 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'
-
(W misc, regexp) Вы написали что-то вроде
\08или\179в строке с двойными кавычками. Все, кроме последней цифры, обрабатывается как один символ, указанный в восьмеричной форме. Последняя цифра — это следующий символ в строке. Чтобы сообщить Perl, что это именно то, что вы хотите, вы можете использовать синтаксис\o{ }или использовать ровно три цифры для указания восьмеричной формы символа. - Оператор %s= в обратном порядке
-
(W syntax) Вы написали оператор присваивания наоборот. Знак = всегда должен быть последним, чтобы избежать неоднозначности с последующими унарными операторами.
- rewinddir() пытался применить к некорректному дескриптору каталога %s
-
(W io) Дескриптор каталога, к которому вы пытались применить rewinddir(), либо закрыт, либо не является дескриптором каталога. Проверьте поток управления.
- Утечка скаляров: %d
-
(S internal) Произошла ошибка во внутренней обработке скаляров в Perl: не все переменные скаляров были освобождены к моменту завершения работы Perl. Это обычно указывает на утечку памяти, что, конечно, плохо, особенно если программа Perl предназначена для длительного выполнения.
- Значение скаляра @%s[%s] лучше записать как $%s[%s]
-
(W syntax) Вы использовали срез массива (указано @) для выбора одного элемента массива. В целом лучше запрашивать значение скаляра (указано $). Разница в том, что
$foo[&bar]всегда ведет себя как скаляр, как при присваивании, так и при вычислении аргумента, а@foo[&bar]ведет себя как список при присваивании и предоставляет контекст списка для подстроки, что может привести к нежелательным результатам, если ожидается только один индекс.С другой стороны, если вы на самом деле надеялись обработать элемент массива как список, вам нужно разобраться в работе с ссылками, потому что Perl не будет автоматически преобразовывать скаляры в списки. См. perlref.
- Значение скаляра @%s{%s} лучше записать как $%s{%s}
-
(W syntax) Вы использовали срез хэша (указано @) для выбора одного элемента хэша. В целом лучше запрашивать значение скаляра (указано $). Разница в том, что
$foo{&bar}всегда ведет себя как скаляр, как при присваивании, так и при вычислении аргумента, а@foo{&bar}ведет себя как список при присваивании и предоставляет контекст списка для подстроки, что может привести к нежелательным результатам, если ожидается только один индекс.С другой стороны, если вы на самом деле надеялись обработать элемент хэша как список, вам нужно разобраться в работе с ссылками, потому что Perl не будет автоматически преобразовывать скаляры в списки. См. perlref.
- Шаблон поиска не завершен
-
(F) Лексер не смог найти конечный разделитель конструкции // или m{}. Помните, что разделители в скобках учитывают уровень вложенности. Отсутствие начального
$из переменной$mможет вызвать эту ошибку.Обратите внимание, что начиная с Perl 5.10.0, // также может быть конструкцией «определено или», а не просто пустым шаблоном поиска. Таким образом, код, написанный в Perl 5.10.0 или более поздней версии, использующий // как конструкцию «определено или», может быть неправильно проанализирован Perl-версиями до 5.10.0 как незавершенный шаблон поиска.
- seekdir() пытался применить к некорректному дескриптору каталога %s
-
(W io) Дескриптор каталога, к которому вы пытались применить seekdir(), либо закрыт, либо не является дескриптором каталога. Проверьте поток управления.
- %sseek() на неоткрытом дескрипторе файла
-
(W unopened) Вы попытались использовать функцию seek() или sysseek() с дескриптором файла, который либо никогда не был открыт, либо с тех пор был закрыт.
- select не реализован
-
(F) Данный компьютер не реализует системный вызов select().
- Самосвязывание массивов и хэшей не поддерживается
-
(F) Самосвязывание массивов и хэшей не поддерживается в текущей реализации.
- По-видимому, пропущен знак «;»
-
(W semicolon) Возможная ошибка синтаксиса рядом, вероятно, вызвана пропущенным знаком «;» или другим пропущенным оператором, например запятой.
- полу-паника: попытка дублирования освобожденной строки
-
(S internal) Внутренняя функция newSVsv() была вызвана для дублирования скаляра, который ранее был помечен как освобожденный.
- sem%s не реализован
-
(F) На вашей системе нет IPC семафоров System V.
- send() для закрытого сокета %s
-
(W closed) Сокет, к которому вы отправляете данные, был закрыт. Проверьте поток управления.
- Последовательность "\c{" недопустима
-
(F) Эти три символа не могут появляться подряд в контексте строки с двойными кавычками. Это сообщение выводится только на платформах, не поддерживающих ASCII (на платформах ASCII выводится другое сообщение об ошибке). Если вы намеревались указать управляющий символ с помощью этой последовательности, вам нужно использовать другой способ его указания.
- Последовательность (? незавершенная в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Регулярное выражение завершилось неполным расширением (?). Пометка <-- HERE показывает, где в регулярном выражении была обнаружена проблема. См. perlre.
- Sequence (?%c...) не реализован в регулярном выражении; помечен <-- HERE в m/%s/
-
(F) Предлагаемое расширение регулярного выражения зарезервировало символ, но пока не реализовано. <-- HERE показывает, где в регулярном выражении была обнаружена проблема. См. perlre.
- Sequence (?%s...) не распознан в регулярном выражении; помечен <-- HERE в m/%s/
-
(F) Вы использовали расширение регулярного выражения, которое не имеет смысла. <-- HERE показывает, где в регулярном выражении была обнаружена проблема. Это может произойти при использовании конструкции
(?^...)для указания Perl использовать стандартные модификаторы регулярных выражений, и вы избыточно указываете стандартный модификатор. Для других причин см. perlre. - Sequence (?#... не завершен в регулярном выражении m/%s/
-
(F) Комментарий в регулярном выражении должен завершаться закрывающей скобкой. Вложенные скобки не допускаются. См. perlre.
- Sequence (?&... не завершен в регулярном выражении; помечен <-- HERE в m/%s/
-
(F) Имя ссылки в формате
(?&...)отсутствовала конечная закрывающая скобка после имени. <-- HERE показывает, где в регулярном выражении была обнаружена проблема. - Sequence (?%c... не завершен в регулярном выражении; помечен <-- HERE в m/%s/
-
(F) Отсутствовала конечная закрывающая кавычка или угловая скобка для именованной группы в формате
(?'...')или(?<...>). <-- HERE показывает, где в регулярном выражении была обнаружена проблема. - Sequence (?(%c... не завершен в регулярном выражении; помечен <-- HERE в m/%s/
-
(F) Для именованной ссылки в формате
(?('...')...)или(?(<...>)...)отсутствовала конечная закрывающая кавычка или угловая скобка после имени. <-- HERE показывает, где в регулярном выражении была обнаружена проблема. - Sequence (?... не завершен в регулярном выражении; помечен <-- HERE в m/%s/
-
(F) Отсутствовала соответствующая закрывающая скобка для '('. <-- HERE показывает, где в регулярном выражении была обнаружена проблема.
- Sequence \%s... не завершен в регулярном выражении; помечен <-- HERE в m/%s/
-
(F) Регулярное выражение ожидает обязательного аргумента после escape-последовательности, но он опущен или написан неправильно.
- Sequence (?{...}) не завершен символом ')'
-
(F) Конец кода Perl внутри {...} должен быть немедленно после ')'.
- Sequence (?P>... не завершен в регулярном выражении; помечен <-- HERE в m/%s/
-
(F) Для именованной ссылки в формате
(?P>...)отсутствовала конечная закрывающая скобка после имени. <-- HERE показывает, где в регулярном выражении была обнаружена проблема. - Sequence (?P<... не завершен в регулярном выражении; помечен <-- HERE в m/%s/
-
(F) Для именованной группы в формате
(?P<...>')отсутствовала конечная закрывающая угловая скобка. <-- HERE показывает, где в регулярном выражении была обнаружена проблема. - Sequence ?P=... не завершен в регулярном выражении; помечен <-- HERE в m/%s/
-
(F) Для именованной ссылки в формате
(?P=...)отсутствовала конечная закрывающая скобка после имени. <-- HERE показывает, где в регулярном выражении была обнаружена проблема. - Sequence (?R) не завершен в регулярном выражении m/%s/
-
(F) В регулярном выражении отсутствовала конечная скобка для последовательности
(?R)или(?0). - Ошибка сервера 500
-
(A) Это сообщение об ошибке, которое обычно отображается в окне браузера при попытке выполнения CGI-программы (включая SSI) через веб. Фактическое текст ошибки сильно варьируется от сервера к серверу. Чаще всего встречаются варианты "Ошибка сервера 500", "Метод (что-то) не разрешен", "Документ не содержит данных", "Преждевременное завершение заголовков скрипта" и "Не создан допустимый заголовок".
Это ошибка CGI, а не Perl.
Необходимо убедиться, что ваш скрипт выполним, доступен для пользователя, под которым работает CGI (вероятно, это не учётная запись пользователя, под которой вы его тестировали), не зависит от переменных окружения (например, PATH) пользователя, под которым он не выполняется, и находится в месте, где CGI-сервер может его найти. В общем, больше или меньше. Подробную информацию см. по следующим ссылкам:
http://www.perl.org/CGI_MetaFAQ.html http://www.htmlhelp.org/faq/cgifaq.html http://www.w3.org/Security/Faq/Также следует обратиться к perlfaq9.
- setegid() не реализован
-
(F) Вы пытались присвоить
$), а ваша операционная система не поддерживает системный вызов setegid() (или эквивалент), или, по крайней мере, Configure так не посчитал. - seteuid() не реализован
-
(F) Вы пытались присвоить
$>, а ваша операционная система не поддерживает системный вызов seteuid() (или эквивалент), или, по крайней мере, Configure так не посчитал. - setpgrp не может принимать аргументы
-
(F) Ваша система имеет setpgrp() из BSD 4.2, который не принимает аргументов, в отличие от POSIX setpgid(), который принимает идентификатор процесса и идентификатор группы процессов.
- setrgid() не реализован
-
(F) Вы пытались присвоить
$(, а ваша операционная система не поддерживает системный вызов setrgid() (или эквивалент), или, по крайней мере, Configure так не посчитал. - setruid() не реализован
-
(F) Вы пытались присвоить
$<, а ваша операционная система не поддерживает системный вызов setruid() (или эквивалент), или, по крайней мере, Configure так не посчитал. - setsockopt() на закрытом сокете %s
-
(W closed) Вы пытались установить опцию сокета на закрытом сокете. Не забыли ли проверить возвращаемое значение вашего вызова socket()? См. "setsockopt" в perlfunc.
- Запрещено присваивать $/ ссылку на %s
-
(F) Вы присвоили ссылку на скаляр переменной $/ в ситуации, когда ссылаемый элемент не является положительным целым числом. В старых версиях Perl это казалось работать так же, как присвоение ссылки на
undef, но на самом деле это было по-другому, менее эффективно, и с очень плохой вероятностью могло привести к разделению вашего файла с помощью строкового представления ссылки.В Perl 5.20.0 это было изменено, чтобы оно было точно таким же, как присвоение
$/значению undef, за исключением того, что будет выведено это предупреждение.Рекомендуется изменить код на явное присвоение
$/кundef, если вы хотите "словить" весь файл. Начиная с Perl 5.28, присваивание$/ссылке на целое число, которое не является положительным, является фатальной ошибкой. - Запрещено присваивать $/ ссылке на %s
-
(F) Вы попытались присвоить ссылку на нецелое значение переменной $/ В старых версиях Perl это вело бы себя аналогично присваиванию ссылки на положительное целое число, где целое число являлось адресом ссылки. Начиная с Perl 5.20.0, это фатальная ошибка, чтобы позволить будущим версиям Perl использовать ссылки на нецелые значения для более интересных целей.
- shm%s не реализован
-
(F) На вашей системе нет межпроцессного обмена через общую память System V.
- !=~ должно быть !~
-
(W syntax) Оператор несовпадения — это !~, а не !=~. !=~ будет интерпретироваться как операторы != (не равно числовое) и ~ (дополнение по модулю 2): вероятно, это не то, что вы имели в виду.
- /%s/ следует записать как "%s"
-
(W syntax) Вы использовали шаблон, где Perl ожидал найти строку, как в первом аргументе
join. Perl будет рассматривать результат сопоставления шаблона с $_ как строку, что, вероятно, не то, что вы имели в виду. - shutdown() на закрытом сокете %s
-
(W closed) Вы попытались выполнить shutdown на закрытом сокете. Это, пожалуй, избыточно.
- Обработчик сигнала SIG%s "%s" не определен
-
(W signal) Обработчик сигнала, указанный в %SIG, фактически не существует. Возможно, вы поместили его в неправильный пакет?
- Утечка блока памяти из cv %p
-
(S) Если вы видите это сообщение, то что-то серьезно не так с внутренней системой учета деревьев операторов. Дерево операторов нужно было освободить после ошибки компиляции, но не было найдено, поэтому оно было утечено.
- sleep(%u) слишком большое значение
-
(W overflow) Вы вызвали
sleepс числом, которое оно не может надежно обработать, иsleep, вероятно, проспал меньше времени, чем требовалось. - Параметр slurp не последний
-
(F) В сигнатуре подпрограммы вы поместили что-то после параметра slurp (массив или хеш). Параметр slurp принимает все доступные аргументы, поэтому других аргументов для последующих параметров не остается.
- Умное сопоставление с неоперегруженным объектом нарушает инкапсуляцию
-
(F) Не следует использовать оператор
~~с объектом, который не перегружает его: Perl отказывается использовать внутреннюю структуру объекта для умного сопоставления. - Smartmatch — экспериментальный
-
(S experimental::smartmatch) Это предупреждение выводится, если вы используете оператор smartmatch (
~~). Эта функция в настоящее время находится на стадии эксперимента, и её подробности могут измениться в будущих выпусках Perl. В частности, её текущее поведение выделяется излишней сложностью и неинтуитивностью, и, скорее всего, будет переработана. - К сожалению, ключи хэша должны быть меньше 2**31 байта
-
(F) Вы пытались создать хэш, содержащий очень большой ключ, где "очень большой" означает, что для его хранения требуется как минимум 2 гигабайта. К сожалению, Perl пока не поддерживает такие большие ключи хэша. Вам следует пересмотреть свой дизайн, чтобы избежать прямого хэширования такой длинной строки.
- sort теперь является зарезервированным словом
-
(F) Старое сообщение об ошибке, с которым почти никто больше не сталкивается. Но раньше sort было ключевым словом, и люди иногда использовали его как имя файла.
- Филтры исходного кода применяются только к потокам байтов
-
(F) Вы пытались активировать фильтр исходного кода (обычно загрузив модуль фильтра исходного кода) внутри строки, переданной в
eval. Это запрещено в рамках функцииunicode_eval. Попробуйте использоватьevalbytesвместо этого. См. feature. - смещение splice() за пределами массива
-
(W misc) Вы попытались указать смещение, которое находилось за пределами массива, переданного в 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 syntax) Переменные пакета $a и $b используются для сравнения при сортировке. Вы использовали $a или $b в качестве операнда для оператора
<=>илиcmpвнутри блока сравнения для сортировки, а переменная ранее была объявлена как лексическая переменная. Либо укажите имя пакета для переменной сортировки, либо переименуйте лексическую переменную. - Переменная "state" %s не может находиться в пакете
-
(F) Лексически ограниченные переменные не находятся в пакете, поэтому бессмысленно пытаться объявить их с квалификатором пакета. Используйте local(), если нужно локализовать переменную пакета.
- stat() для неоткрытого дескриптора файла %s
-
(W unopened) Вы попытались использовать функцию 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 closure) Во время компиляции внутренняя именованная подпрограмма или eval пытается захватить внешнюю лексическую подпрограмму, которая в данный момент недоступна. Это может произойти по двум причинам. Во-первых, лексическая подпрограмма может быть объявлена во внешней анонимной подпрограмме, которая ещё не создана. (Помните, что именованные подпрограммы создаются во время компиляции, а анонимные — во время выполнения.) Например,
sub { my sub a {...} sub f { \&a } }В момент создания f она не может захватить текущую подпрограмму "a", так как анонимная подпрограмма ещё не создана. Напротив, следующее предупреждение не выдаст, так как анонимная подпрограмма к этому моменту создана и активна:
sub { my sub a {...} eval 'sub f { \&a }' }->();Во-вторых, ситуация вызвана eval, обращающимся к лексической подпрограмме, которая вышла из области видимости, например,
sub f { my sub a {...} sub { eval '\&a' } } f()->();Здесь, когда '\&a' в eval компилируется, f() не выполняется, поэтому её &a недоступна для захвата.
- Подпрограмма "%s" &%s скрывает более раннее объявление в том же %s
-
(W shadow) Подпрограмма "my" или "state" была переопределена в текущей области видимости или инструкции, фактически устраняя весь доступ к предыдущему экземпляру. Это почти всегда типографическая ошибка. Обратите внимание, что предыдущая подпрограмма будет существовать до конца области видимости или до уничтожения всех ссылок на неё.
- Подпрограмма %s переопределена
-
(W redefine) Вы переопределили подпрограмму. Чтобы подавить это предупреждение, напишите
{ no warnings 'redefine'; eval "sub name { ... }"; } -
(W closure) Внутренняя (вложенная) именованная подпрограмма ссылается на подпрограмму "my", определённую во внешней именованной подпрограмме.
При вызове внутренней подпрограммы она увидит значение лексической подпрограммы внешней подпрограммы так, как оно было до и во время *первого* вызова внешней подпрограммы; в данном случае, после завершения первого вызова внешней подпрограммы, внутренняя и внешняя подпрограммы больше не будут совместно использовать общее значение лексической подпрограммы. Другими словами, она больше не будет совместно используемой. Это особенно повлияет, если лексические подпрограммы обращаются к лексическим переменным, объявленным в окружающей области видимости.
Обычно эту проблему можно решить, сделав внутреннюю подпрограмму анонимной, используя синтаксис
sub {}. Когда создаются внутренние анонимные подпрограммы, ссылающиеся на лексические подпрограммы во внешних подпрограммах, они автоматически перепривязываются к текущим значениям этих лексических подпрограмм. - Бесконечный цикл подстановки
-
(P) Подстановка попала в бесконечный цикл. (Очевидно, подстановка не должна повторяться больше раз, чем есть символов ввода, что и произошло.) Смотрите обсуждение подстановки в "Regexp Quote-Like Operators" в perlop.
- Шаблон подстановки не завершён
-
(F) Лексер не смог найти внутренний разделитель конструкции s/// или s{}{} . Помните, что разделители в скобках учитывают уровень вложенности. Отсутствие ведущего
$из переменной$sможет вызвать эту ошибку. - Замена подстановки не завершена
-
(F) Лексер не смог найти конечный разделитель конструкции s/// или s{}{} . Помните, что разделители в скобках учитывают уровень вложенности. Отсутствие ведущего
$из переменной$sможет вызвать эту ошибку. - substr за пределами строки
-
(W substr)(F) Вы попытались обратиться к substr(), который указывал за пределы строки. То есть абсолютное значение смещения было больше длины строки. См. "substr" в perlfunc. Это предупреждение является фатальным, если substr используется в контексте lvalue (например, в левой части присваивания или в качестве аргумента подпрограммы).
- sv_upgrade с типа %d до типа %d
-
(P) Perl пытался принудительно повысить тип SV до типа, который на самом деле был ниже его текущего типа.
- SWASHNEW не вернул ссылку на HV
-
(P) Произошла внутренняя ошибка при поиске Perl символов Юникода.
- Переключатель (?(condition)... содержит слишком много ветвей в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Конструкция (?(condition)if-clause|else-clause) может иметь не более двух ветвей (if-clause и else-clause). Если вы хотите, чтобы одна или обе содержали чередование, например, используя
this|that|other, заключите её в скобки группирования:(?(condition)(?:this|that|other)|else-clause)Метка <-- HERE указывает место в регулярном выражении, где была обнаружена проблема. См. perlre.
- Условие переключателя не распознано в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Часть условия конструкции (?(condition)if-clause|else-clause) не известна. Условие должно быть одним из следующих:
(1) (2) ... true if 1st, 2nd, etc., capture matched (<NAME>) ('NAME') true if named capture matched (?=...) (?<=...) true if subpattern matches (?!...) (?<!...) true if subpattern fails to match (?{ CODE }) true if code returns a true value (R) true if evaluating inside recursion (R1) (R2) ... true if directly inside capture group 1, 2, etc. (R&NAME) true if directly inside named capture (DEFINE) always false; for defining named subpatternsМетка <-- HERE указывает место в регулярном выражении, где была обнаружена проблема. См. perlre.
- Переключатель (?(condition)... не завершён в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы опустили закрывающую скобку блока (?(condition)...) где-то в шаблоне. Добавьте закрывающую скобку в нужное место. См. perlre.
- Переключение эффективного %s не реализовано
-
(F) При использовании псевдонима
use filetestмы не можем переключать реальный и эффективный 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".
- синтаксическая ошибка в (?[...]) в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Perl не смог понять, что вы имели в виду внутри этого конструкта; это означает, что он отказывается от попыток.
- синтаксис %s корректен
-
(F) Конечное сообщение об успехе
perl -c. - sysread() на закрытом файловом дескрипторе %s
-
(W closed) Вы пытались прочитать из закрытого файлового дескриптора.
- sysread() на неоткрытом файловом дескрипторе %s
-
(W unopened) Вы пытались прочитать из файлового дескриптора, который никогда не был открыт.
- System V %s не реализован на этом компьютере
-
(F) Вы пытались сделать что-то с функцией, начинающейся с "sem", "shm" или "msg", но System V IPC не реализован на вашем компьютере. В некоторых машинах функциональность может существовать, но не быть сконфигурирована. Обратитесь к документации вашей системы.
- syswrite() на закрытом файловом дескрипторе %s
-
(W closed) Файловый дескриптор, в который вы пытаетесь записать, был закрыт до этого момента. Проверьте свой поток управления.
-
-Tи-Bне реализованы для файловых дескрипторов -
(F) Perl не может просмотреть буфер stdio файловых дескрипторов, когда он не знает о вашем типе stdio. Вам придется использовать имя файла вместо этого.
- Целевой метки goto слишком глубоко вложен
-
(F) Вы пытались использовать
gotoдля достижения метки, которая была слишком глубоко вложена для Perl. Perl делает вам одолжение, отказываясь. - telldir() попытка на некорректном дескрипторе каталога %s
-
(W io) Дескриптор каталога, с которым вы пытались использовать telldir(), либо закрыт, либо на самом деле не является дескриптором каталога. Проверьте свой поток управления.
- tell() на неоткрытом файловом дескрипторе
-
(W unopened) Вы пытались использовать функцию tell() на файловом дескрипторе, который либо никогда не был открыт, либо с тех пор был закрыт.
- Функция alpha_assertions экспериментальная
-
(S experimental::alpha_assertions) Эта функция экспериментальная, и её поведение может измениться в будущих выпусках Perl. См. "Расширенные шаблоны" в perlre.
- Функция crypt() не реализована из-за чрезмерной паранойи.
-
(F) Configure не смог найти функцию crypt() на вашей машине, вероятно, потому что ваш поставщик не предоставил её, вероятно, потому что они думают, что правительство США считает это секретом, или, по крайней мере, что они будут продолжать притворяться, что это так. И если вы цитируете меня по этому поводу, я буду отрицать это.
- Экспериментальная функция declared_refs не включена
-
(F) Чтобы объявить ссылки на переменные, как в
my \%x, необходимо сначала включить функцию:no warnings "experimental::declared_refs"; use feature "declared_refs"; - Функция %s не реализована
-
(F) Указанная функция не реализована на этой архитектуре, согласно результатам проверки Configure.
- Функция private_use экспериментальная
-
(S experimental::private_use) Эта функция фактически является крючком для будущего использования.
- Функция regex_sets экспериментальная
-
(S experimental::regex_sets) Это предупреждение выдаётся, если вы используете синтаксис
(?[ ])в регулярном выражении. Подробности этой функции могут измениться. Если вы хотите использовать её, но знаете, что таким образом вы принимаете риск использования экспериментальной функции, которая может измениться в будущей версии Perl, вы можете сделать следующее, чтобы отключить предупреждение:no warnings "experimental::regex_sets"; - Функция script_run экспериментальная
-
(S experimental::script_run) Эта функция экспериментальная, и её поведение может измениться в будущих выпусках perl. См. "Запуск скриптов" в perlre.
- Функция signatures экспериментальная
-
(S experimental::signatures) Это предупреждение выдаётся, если вы разворачиваете аргументы подпрограммы с помощью сигнатуры. Просто подавите предупреждение, если вы хотите использовать эту функцию, но помните, что таким образом вы принимаете риск использования экспериментальной функции, которая может измениться или быть удалена в будущей версии Perl:
no warnings "experimental::signatures"; use feature "signatures"; sub foo ($left, $right) { ... } - Функция stat перед %s не была lstat
-
(F) Не имеет смысла проверять текущий буфер stat на наличие символической ссылки, если последняя stat, которая записала в буфер stat, уже прошла через символическую ссылку, чтобы добраться до реального файла. Используйте имя файла вместо этого.
- Функция Unicode свойств с подстановками — экспериментальная
-
(S experimental::uniprop_wildcards) Эта функция экспериментальная, и её поведение может измениться в будущих выпусках Perl. См. "Подстановки в значениях свойств" в perlunicode.
- Атрибут 'unique' может быть применён только к переменным 'our'
-
(F) Этот атрибут никогда не поддерживался для объявлений
myилиsub. - Данная версия Perl не может сбросить элементы CRTL environ (%s)
- Данная версия Perl не может установить элементы CRTL environ (%s=%s)
-
(W internal) Предупреждения, специфичные для VMS. Вы попытались изменить или удалить элемент внутреннего массива environ CRTL, но ваша копия Perl не была скомпилирована с CRTL, содержащим функцию setenv(). Вам потребуется перекомпилировать Perl с CRTL, который это делает, или переопределить PERL_ENV_TABLES (см. perlvms), чтобы массив environ не был целью изменения %ENV, которое привело к этому предупреждению.
- Эта версия Perl не была скомпилирована с поддержкой случайного обхода ключей хэша, но есть что-то называемое Perl_hv_rand_set().
-
(F) Что-то пыталось использовать внутренний вызов API, который зависит от компиляции Perl с поддержкой случайного обхода ключей хэша по умолчанию, но эта версия Perl скомпилирована без неё. Вы должны сообщить об этом предупреждении соответствующей стороне, или перекомпилировать Perl с параметрами по умолчанию.
- Это использование my() в ложном условии больше не разрешено
-
(F) Вы использовали объявление, подобное
my $x if 0. В Perl была давняя ошибка, которая приводила к тому, что лексическая переменная не очищалась при выходе из области видимости, если её объявление включало ложное условие. Некоторые люди использовали эту ошибку для достижения некой статической переменной. Поскольку мы намерены исправить эту ошибку, мы не хотим, чтобы люди полагались на это поведение. Вы можете добиться аналогичного статического эффекта, объявив переменную в отдельном блоке вне функции, напримерsub f { my $x if 0; return $x++ }становится
{ my $x; sub f { return $x++ } }Начиная с perl 5.10.0, вы также можете использовать
stateпеременные, чтобы лексические переменные инициализировались только один раз (см. feature):sub f { state $x; return $x++ }Это использование
my()в ложном условии было устаревшим, начиная с Perl 5.10, и стало фатальной ошибкой в Perl 5.30. - times не реализовано
-
(F) Ваша версия C библиотеки, по-видимому, не поддерживает times(). Полагаю, вы не работаете под Unix.
- "-T" указан в строке #!, он также должен быть использован в командной строке
-
(X) Строка #! (или её локальный аналог) в скрипте Perl содержит опцию -T (или опцию -t), но Perl не был вызван с -T в командной строке. Это ошибка, потому что, к тому времени, когда Perl обнаруживает -T в скрипте, уже слишком поздно для правильного помечения всего из окружения. Поэтому Perl отказывается.
Если скрипт Perl выполняется как команда с помощью механизма #! (или его локального эквивалента), эту ошибку обычно можно исправить, отредактировав строку #! так, чтобы опция -%c была частью первого аргумента Perl: например, измените
perl -n -%cнаperl -%c -n.Если скрипт Perl выполняется как
perl scriptname, то опция -%c должна быть указана в командной строке:perl -%c scriptname. - To%s: недопустимое отображение '%s'
-
(F) Вы попытались определить пользовательское отображение для lc(), lcfirst(), uc(), или ucfirst() (или их строковых аналогов), но указали недопустимое отображение. См. "Пользовательские свойства символов" в perlunicode.
- Слишком глубоко вложенные ()-группы
-
(F) Ваш шаблон содержит ()-группы с нелепо глубоким уровнем вложенности.
- Недостаточно аргументов для syscall
-
(F) Для syscall() должно быть как минимум один аргумент, чтобы указать системный вызов, который нужно вызвать.
- Недостаточно аргументов для подпрограммы '%s'
-
(F) Подпрограмма использует меньше аргументов, чем требуется сигнатурой. Вероятно, виноват вызывающий подпрограмму.
В сообщении пытаются указать имя вызываемой подпрограммы. Если подпрограмма была переименована, будет показано оригинальное имя подпрограммы, независимо от того, какое имя использовал вызывающий.
- Слишком поздно для опции "-%s"
-
(X) Строка #! (или локальный эквивалент) в скрипте Perl содержит опцию -M, -m или -C.
В случае -M и -m это ошибка, так как эти опции не предназначены для использования внутри скриптов. Используйте вместо этого прагму
use.Опция -C работает только если она также указана в командной строке (с той же последовательностью букв или цифр). Укажите эту опцию в командной строке или, если ваша система её поддерживает, сделайте ваш скрипт исполняемым и запустите его напрямую, вместо передачи его в perl.
- Слишком поздно для выполнения блока %s
-
(W void) Блок CHECK или INIT определяется во время выполнения, когда возможность их выполнения уже упущена. Возможно, вы загружаете файл с
requireилиdo, когда следует использоватьuse. Возможно, вам следует поместитьrequireилиdoв блок BEGIN. - Слишком много аргументов для syscall
-
(F) Perl поддерживает максимум 14 аргументов для syscall().
- Слишком много аргументов для %s
-
(F) Функция требует меньше аргументов, чем вы указали.
- Слишком много аргументов для подпрограммы '%s'
-
(F) Подпрограмма, использующая сигнатуру, получила больше аргументов, чем разрешено сигнатурой. Вероятно, виноват вызывающий подпрограмму.
Сообщение пытается включить имя вызываемой подпрограммы. Если подпрограмма была переименована, будет показано исходное имя подпрограммы, независимо от имени, используемого вызывающим кодом.
- Слишком много вложенных открывающихся скобок в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) Вы превысили количество открывающихся скобок в регулярном выражении, которые не сопоставлены соответствующими закрывающимися. Это ограничение предотвращает излишнее потребление памяти. Изначально оно установлено в 1000, но может быть изменено установкой
${^RE_COMPILE_RECURSION_LIMIT}в другое значение. Это может потребоваться сделать в блоке BEGIN перед компиляцией шаблона регулярного выражения. - Слишком много )
-
(A) Вы случайно запустили свой скрипт через csh вместо Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl.
- Слишком много (
-
(A) Вы случайно запустили свой скрипт через csh вместо Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl.
- Конец регулярного выражения m/%s/ с символом \ без обратного слеша
-
(F) Регулярное выражение заканчивается необработанным обратным слешем. Обработайте его. См. perlre.
- Шаблон транслитерации не завершен
-
(F) Лексер не смог найти внутренний разделитель конструкции tr/// или tr[][] или y/// или y[][]. Пропущенный ведущий
$из переменных$trили$yможет вызвать эту ошибку. - Замена транслитерации не завершена
-
(F) Лексер не смог найти конечный разделитель конструкции tr///, tr[][], y/// или y[][].
- '%s' заблокирован маской операции
-
(F) Вы попытались использовать оператор из безопасного отсека, где он запрещён. См. Safe.
- truncate не реализовано
-
(F) Ваша машина не реализует механизм усечения файла, о котором знает Configure.
- Тип аргумента %d для &CORE::%s должен быть %s
-
(F) Подпрограмма в пакете CORE требует, чтобы её аргумент был жёсткой ссылкой на данные указанного типа. Перегрузка игнорируется, поэтому ссылка на объект, который не является указанным типом, но тем не менее имеет перегрузку для его обработки, по-прежнему не будет принята.
- Тип аргумента %d для %s должен быть %s (а не %s)
-
(F) Эта функция требует, чтобы аргумент в этой позиции был определённого типа. Массивы должны быть @ИМЯ или
@{EXPR}. Хэши должны быть %ИМЯ или%{EXPR}. Не допускается неявное разыменование – используйте формы {EXPR} для явного разыменования. См. perlref. - umask не реализовано
-
(F) Ваша машина не реализует функцию umask, и вы пытались использовать её для ограничения прав для себя (EXPR & 0700).
- Несбалансированный контекст: %d больше PUSH, чем POP
-
(S internal) Код выхода обнаружил внутреннее несоответствие в количестве введённых и оставленных контекстов выполнения.
- Несбалансированные сохранения: %d больше сохранений, чем восстановлений
-
(S internal) Код выхода обнаружил внутреннее несоответствие в количестве временно локализованных значений.
- Несбалансированные области: %d больше ENTER, чем LEAVE
-
(S internal) Код выхода обнаружил внутреннее несоответствие в количестве введённых и оставленных блоков.
- Несбалансированный счётчик ссылок на таблицу строк: (%d) для "%s"
-
(S internal) При выходе Perl обнаружил некоторые строки, оставшиеся в общей таблице строк, используемой для копирования при записи и для ключей хэша. Элементы должны были быть освобождены, поэтому это указывает на ошибку где-то.
- Несбалансированные tmp: %d больше выделений, чем освобождений
-
(S internal) Код выхода обнаружил внутреннее несоответствие в количестве выделенных и освобождённых смертных скаляров.
- Вызван неопределённый формат "%s"
-
(F) Указанный формат, кажется, не существует. Возможно, он в другом пакете? См. perlform.
- Вызван неопределённый подпрограмма сортировки "%s"
-
(F) Указанная подпрограмма сравнения для сортировки, кажется, не существует. Возможно, она в другом пакете? См. "sort" в perlfunc.
- Вызвана неопределённая подпрограмма &%s
-
(F) Указанная подпрограмма не определена или, если она была определена, она с тех пор была удалена.
- Вызвана неопределённая подпрограмма
-
(F) Анонимная подпрограмма, которую вы пытаетесь вызвать, не определена или, если она была определена, она с тех пор была удалена.
- Неопределённая подпрограмма в сортировке
-
(F) Указанная подпрограмма сравнения для сортировки объявлена, но, кажется, ещё не определена. См. "sort" в perlfunc.
- Вызван неопределённый верхний формат "%s"
-
(F) Указанный формат, кажется, не существует. Возможно, он в другом пакете? См. perlform.
- Неопределённое значение присвоено typeglob
-
(W misc) Неопределённое значение было присвоено typeglob, как в
*foo = undef. Это ничего не делает. Возможно, вы имели в видуundef *foo. - %s: Неопределённая переменная
-
(A) Вы случайно запустили свой скрипт через csh вместо Perl. Проверьте строку #!, или вручную передайте свой скрипт в Perl.
- Неэкранированная левая фигурная скобка в регулярном выражении передаётся через регулярное выражение; помечено <-- HERE в m/%s/
-
(W regexp) Простое правило, если вы хотите сопоставить буквальный
"{"символ (U+007BLEFT CURLY BRACKET) в шаблоне регулярного выражения, — экранировать каждый буквальный экземпляр каким-либо образом. Обычно проще всего предварять его обратным слешем, например"\{"или заключить его в квадратные скобки ("[{]"). Если разделители шаблона также фигурные скобки, любую соответствующую правую фигурную скобку ("}") также следует экранировать, чтобы избежать путаницы в парсере, например,qr{abc\{def\}ghi}Принудительное экранирование буквальных
"{"символов позволит расширить язык Perl различными способами в будущих выпусках. Чтобы избежать ненужного разрыва существующего кода, это ограничение не применяется в контекстах, где маловероятно появление расширений, которые могут конфликтовать с использованием там"{"в качестве буквального символа. Те, которые не потенциально неоднозначны, не предупреждают; те, что неоднозначны, выдают предупреждение о не устаревании.В этом выпуске Perl некоторые буквальные использования
"{"являются фатальными, а некоторые всё ещё устаревшими. Это из-за упущения: некоторые использования буквального"{", которые должны были выдать предупреждение об устаревании, начиная с v5.20, не выдавали предупреждение до v5.26. Сделав уже предупреждаемые использования фатальными сейчас, некоторые планируемые расширения языка можно внедрить раньше. Случаи, которые всё ещё разрешены, будут фатальными в Perl 5.32.Контексты, где не выдаются предупреждения или ошибки:
-
в качестве первого символа в шаблоне или после
"^", указывающего на привязку соответствия к началу строки. -
в качестве первого символа после
"|", указывающего на альтернацию. -
в качестве первого символа в скобочном группировании, как
/foo({bar)/ /foo(?:{bar)/ -
в качестве первого символа после квантификатора
/\s*{/
-
- Неэкранированная левая фигурная скобка в регулярном выражении устарела здесь (и станет фатальной в Perl 5.32), пропущена через регулярное выражение; помечено <-- HERE в m/%s/
-
(D устаревшее, regexp) Простое правило, которое нужно запомнить, если вы хотите сопоставить литеральный символ
"{"(U+007BLEFT CURLY BRACKET) в шаблоне регулярного выражения, заключается в том, чтобы каким-то образом экранировать каждый его экземпляр. Обычно проще всего поставить перед ним обратную косую черту, например"\{", или заключить его в квадратные скобки ("[{]"). Если разделители шаблона также являются фигурными скобками, любую соответствующую правую фигурную скобку ("}") также необходимо экранировать, чтобы не сбивать с толку анализатор, например,qr{abc\{def\}ghi}Принудительное экранирование литеральных символов
"{"позволит расширить язык Perl различными способами в будущих версиях. Чтобы избежать ненужного разрыва существующего кода, это ограничение не применяется в контекстах, где маловероятно, что когда-либо появятся расширения, которые могут конфликтовать с использованием там"{"в качестве литерала. Те, которые не являются потенциально неоднозначными, не выдают предупреждений; те, которые являются неоднозначными, выдают предупреждение о не устаревании.В этом выпуске Perl некоторые буквальные использования
"{"являются фатальными, а некоторые всё ещё просто устаревшими. Это из-за упущения: некоторые использования литерала"{", которые должны были вызывать предупреждение об устаревании начиная с версии 5.20, не выдавали предупреждение до версии 5.26. Теперь, сделав уже предупреждаемые случаи фатальными, некоторые запланированные расширения языка могут быть реализованы раньше. Случаи, которые всё ещё разрешены, станут фатальными в Perl 5.32.Контексты, в которых не генерируются предупреждения или ошибки:
-
в качестве первого символа в шаблоне или после
"^", указывающего на привязку совпадения к началу строки. -
в качестве первого символа после
"|", указывающего на альтернативу. -
в качестве первого символа в скобочном группировании, например
/foo({bar)/ /foo(?:{bar)/ -
в качестве первого символа после квантификатора
/\s*{/
-
- Неэкранированная левая фигурная скобка в regexp недопустима здесь в regexp; помечено <-- HERE в m/%s/
-
(F) Простое правило, которое нужно запомнить, если вы хотите сопоставить литеральный символ
"{"(U+007BLEFT CURLY BRACKET) в шаблоне регулярного выражения, заключается в том, чтобы каким-то образом экранировать каждый его экземпляр. Обычно проще всего поставить перед ним обратную косую черту, например"\{", или заключить его в квадратные скобки ("[{]"). Если разделители шаблона также являются фигурными скобками, любую соответствующую правую фигурную скобку ("}") также необходимо экранировать, чтобы не сбивать с толку анализатор, например,qr{abc\{def\}ghi}Принудительное экранирование литеральных символов
"{"позволит расширить язык Perl различными способами в будущих версиях. Чтобы избежать ненужного разрыва существующего кода, это ограничение не применяется в контекстах, где маловероятно, что когда-либо появятся расширения, которые могут конфликтовать с использованием там"{"в качестве литерала. Те, которые не являются потенциально неоднозначными, не выдают предупреждений; те, которые являются неоднозначными, выдают предупреждение о не устаревании.В этом выпуске Perl некоторые буквальные использования
"{"являются фатальными, а некоторые всё ещё просто устаревшими. Это из-за упущения: некоторые использования литерала"{", которые должны были вызывать предупреждение об устаревании, начиная с версии 5.20, не выдавали предупреждение до версии 5.26. Теперь, сделав уже предупреждаемые случаи фатальными, некоторые запланированные расширения языка могут быть реализованы раньше. Случаи, которые всё ещё разрешены, станут фатальными в Perl 5.32.Контексты, в которых не генерируются предупреждения или ошибки:
-
в качестве первого символа в шаблоне или после
"^", указывающего на привязку совпадения к началу строки. -
в качестве первого символа после
"|", указывающего на альтернативу. -
в качестве первого символа в скобочном группировании, например
/foo({bar)/ /foo(?:{bar)/ -
в качестве первого символа после квантификатора
/\s*{/
-
- Неэкранированный литерал '%c' в regexp; помечено <-- HERE в m/%s/
-
(W regexp) (только при
use re 'strict')В области действия
use re 'strict'в шаблоне регулярного выражения вы включили неэкранированный}или], который интерпретировался буквально. Эти два символа иногда являются метасимволами, а иногда литералами, в зависимости от того, что предшествует им в шаблоне. Это отличается от аналогичного), который всегда является метасимволом, если не экранирован.Это действие на расстоянии, возможно, на большом расстоянии, может привести к тому, что Perl ошибочно интерпретирует ваши намерения, поэтому при указании дополнительных проверок посредством
use re 'strict'генерируется это предупреждение. Если вы имели в виду символ как литерал, просто подтвердите это Perl, поставив перед символом обратную косую черту, или сделайте его частью набора символов в квадратных скобках (например,[}]). Если вы имели в виду закрытие соответствующей[или{, вам нужно будет вернуться назад в шаблон, чтобы выяснить, почему этого не происходит. - не удалось выполнить unexec(%s в %s)!
-
(F) Процедура unexec() по какой-то причине завершилась неудачно. Обратитесь к вашему местному представителю FSF, который, вероятно, её туда и поставил.
- Неожиданный бинарный оператор '%c' без предшествующего операнда в regexp; помечено <-- HERE в m/%s/
-
(F) У вас было что-то вроде этого:
(?[ | \p{Digit} ])где
"|"— это бинарный оператор с операндом справа, но без операнда слева. - Неожиданный символ в regexp; помечено <-- HERE в m/%s/
-
(F) У вас было что-то вроде этого:
(?[ z ])Внутри
(?[ ])запрещены литеральные символы, если они не находятся внутри внутренней пары квадратных скобок, например(?[ [ z ] ])Ещё одна возможность — вы забыли обратную косую черту. Perl недостаточно умен, чтобы понять, что вы имели в виду.
- Неожиданное постоянное левое значение входа в подпрограмму через тип/мишень %d:%d
-
(P) При компиляции вызова подпрограммы в контексте левого значения Perl не прошёл проверку внутренней согласованности. Он столкнулся с неправильным деревом операций.
- Неожиданный выход %u
-
(S) exit() был вызван или скрипт иначе завершился успешно, когда
PERL_EXIT_WARNбыло установлено вPL_exit_flags. - Неожиданный выход с ошибкой %d
-
(S) Был вызван uncaught die(), когда
PERL_EXIT_WARNбыло установлено вPL_exit_flags. - Неожиданная ')' в regexp; помечено <-- HERE в m/%s/
-
(F) У вас было что-то вроде этого:
(?[ ( \p{Digit} + ) ])")"находится вне контекста. По-видимому, что-то должно было быть объединено с цифрами, или"+"не должно было быть там, или что-то подобное. Perl не может понять, что было задумано. - Неожиданный ']' без последующей ')' в (?[... в regexp; помечено <-- HERE в m/%s/
-
(F) При обработке расширенного класса символов был обнаружен символ ']', в точке определения, где единственное законное использование ']' — это закрытие определения класса символов в качестве части '])'. Вы можете забыть закрывающую скобку или иначе сбить с толку анализатор.
- Неожиданная '(' без предшествующего оператора в regexp; помечено <-- HERE в m/%s/
-
(F) У вас было что-то вроде этого:
(?[ \p{Digit} ( \p{Lao} + \p{Thai} ) ])Перед
"("должен быть оператор, так как нет указаний на то, как цифры должны быть объединены с символами лаосского и тайского алфавитов. - Не рекомендуется использовать несимвол Unicode U+%X для открытого обмена
-
(S nonchar) Некоторые кодовые точки, такие как U+FFFE и U+FFFF, определены в стандарте Unicode как несимволы. Они являются допустимыми кодовыми точками, но зарезервированы для внутреннего использования, поэтому приложения не должны пытаться обмениваться ими. Приложение может вообще не ожидать этих символов, и получение их может привести к ошибкам. Если вы знаете, что делаете, вы можете отключить это предупреждение, используя
no warnings 'nonchar';.Это не совсем "серьёзная" ошибка, но она должна генерироваться по умолчанию, даже если предупреждения отключены, и в настоящее время единственный способ сделать это в Perl — это отметить её как серьёзную.
- Незавершенный дикий символ свойства Unicode
-
(F) Дикий символ свойства Unicode выглядит как шаблон регулярного выражения с разделителями (все в фигурных скобках заключающего
\p{...}). Закрывающего разделителя для соответствия открывающему не найдено. Если открывающий разделитель экранирован, предшествуя ему обратной косой чертой, закрывающий также должен быть экранирован. - Недопустимый суррогат Unicode U+%X в UTF-8
-
(S surrogate) У вас был суррогат UTF-16 в контексте, где они не считаются приемлемыми. Эти кодовые точки, между U+D800 и U+DFFF (включительно), используются в Unicode только для UTF-16. Однако Perl внутренне допускает все положительные целые числа (до размера, доступного в вашей платформе), включая суррогаты. Но они могут создавать проблемы при вводе или выводе, что, вероятно, и привело к этому сообщению. Если вы действительно знаете, что делаете, вы можете отключить это предупреждение, используя
no warnings 'surrogate';. - Неизвестное имя символа '%s'
-
(F) Имя, которое вы использовали внутри
\N{}, неизвестно Perl. Проверьте правильность написания. Вы можете использоватьuse charnames ":loose", чтобы не нужно было быть столь точным относительно пробелов, дефисов и регистров в стандартных именах Unicode. (Любые пользовательские псевдонимы, которые были созданы, должны быть указаны точно, независимо от того, используется ли:looseили нет.) Эта ошибка также может произойти, если\N{}не находится в области действия соответствующегоuse charnames. - Неизвестная конструкция '(*...)' '%s' в regexp; помечено <-- HERE в m/%s/
-
(F) После
(*последовал символ, который компилятор регулярных выражений не распознаёт. Проверьте правильность написания. - Неизвестная ошибка
-
(P) Perl собирался вывести сообщение об ошибке в
$@, но переменная$@не существовала, даже после попытки её создания.
- Неизвестная категория локали %d; не удаётся установить её в %s
-
(Категория локали W) Вы использовали категорию локали, которую Perl не распознаёт, поэтому не может выполнить ваш запрос. Проверьте, используете ли вы действительную категорию. Если да, ознакомьтесь с "Multi-threaded" в perllocale за советом по сообщению об этой ошибке как о баге, а также по модификации Perl для удовлетворения ваших потребностей.
- Неизвестный режим open() '%s'
-
(F) Второй аргумент функции open() с тремя аргументами не входит в список допустимых режимов:
<,>,>>,+<,+>,+>>,-|,|-,<&,>&. - Неизвестный слой PerlIO "%s"
-
(W слой) Была предпринята попытка добавить неизвестный слой в систему ввода-вывода Perl. (Слои отвечают за преобразование данных между внешним и внутренним представлениями.) Обратите внимание, что некоторые слои, такие как
mmap, не поддерживаются во всех средах. Если ваша программа явно не запрашивала это действие, это может быть результатом значения переменной окружения PERLIO. - Неизвестный процесс %x отправил сообщение в prime_env_iter: %s
-
(P) Ошибка, характерная для VMS. Perl считывал значения для %ENV до итерации по ним, и кто-то поместил сообщение в поток данных, который ожидал Perl. Кто-то сильно запутался или, возможно, пытается нарушить работу Perl, изменяя %ENV в корыстных целях.
- Неизвестный модификатор регулярного выражения "/%s"
-
(F) Символы, непосредственно следующие за закрывающим разделителем шаблона регулярного выражения, интерпретируются Perl как флаги модификаторов для регулярного выражения. Один из указанных вами модификаторов недействителен. Это может произойти, если вы не поставили пробел между концом регулярного выражения и последующим буквенно-цифровым оператором:
if ($a =~ /foo/and $bar == 3) { ... }"a"является допустимым модификатором, но"n"— нет, и возникает эта ошибка. Вероятно, предполагалось:if ($a =~ /foo/ and $bar == 3) { ... } - Неизвестный под-pragma "re" '%s' (известные: %s)
-
(W) Вы попытались использовать неизвестный под-pragma прагмы "re".
- Неизвестное условие переключения (?(...)) в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) Часть условия конструкции (?(условие)если-часть|иначе-часть) неизвестна. Условие должно быть одним из следующих:
(1) (2) ... true if 1st, 2nd, etc., capture matched (<NAME>) ('NAME') true if named capture matched (?=...) (?<=...) true if subpattern matches (*pla:...) (*plb:...) true if subpattern matches; also (*positive_lookahead:...) (*positive_lookbehind:...) (*nla:...) (*nlb:...) true if subpattern fails to match; also (*negative_lookahead:...) (*negative_lookbehind:...) (?{ CODE }) true if code returns a true value (R) true if evaluating inside recursion (R1) (R2) ... true if directly inside capture group 1, 2, etc. (R&NAME) true if directly inside named capture (DEFINE) always false; for defining named subpatternsПометка <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.
- Неизвестная буква опции Unicode '%c'
-
(F) Вы указали неизвестную опцию Unicode. См. документацию perlrun по ключу
-Cдля списка известных опций. - Неизвестное значение опции Unicode %d
-
(F) Вы указали неизвестную опцию Unicode. См. документацию perlrun по ключу
-Cдля списка известных опций. - Неизвестный шаблон глагола '%s' в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) Вы допустили опечатку или неверно поставили квантификатор
*после открывающей фигурной скобки в вашем шаблоне. Проверьте шаблон и обратитесь к perlre для получения подробной информации о допустимых шаблонах глаголов. - Неизвестная категория предупреждений '%s'
-
(F) Ошибка, выданная прагмой
warnings. Вы указали категорию предупреждений, неизвестную для Perl в данный момент.Обратите внимание, что для включения категории предупреждений, зарегистрированной модулем (например,
use warnings 'File::Find'), необходимо сначала загрузить этот модуль. - Незакрытая квадратная скобка в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) Скобки вокруг класса символов должны совпадать. Если вы хотите включить закрывающую скобку в класс символов, экранируйте её или поставьте её в начале. Пометка <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.
- Незакрытая круглая скобка в регулярном выражении; помечено <-- HERE в m/%s/
- Незакрытая круглая скобка в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) Круглые скобки без обратного слэша в регулярных выражениях должны быть сбалансированы. Если вы пользователь vi, то клавиша % полезна для поиска соответствующей скобки. Пометка <-- HERE показывает место в регулярном выражении, где была обнаружена проблема. См. perlre.
- Незакрытая правая скобка %s
-
(F) Лексер обнаружил больше закрывающих фигурных или квадратных скобок, чем открывающих, поэтому, вероятно, вы пропустили соответствующую открывающую скобку. Как правило, вы найдёте недостающую скобку (так сказать) рядом с местом последнего изменения.
- Незаданная строка "%s" может конфликтовать со будущим ключевым словом
-
(W зарезервировано) Вы использовали незаданное слово, которое в будущем может стать зарезервированным словом. Лучше поместить такое слово в кавычки или как-то его заглавить, или вставить в него подчёркивание. Вы также можете объявить его как подпрограмму.
- Нераспознанный символ %s; помечено <-- HERE после %s около столбца %d
-
(F) Парсер Perl не знает, что делать с указанным символом в вашем Perl-скрипте (или eval) около указанного столбца. Возможно, вы попытались запустить сжатый скрипт, двоичную программу или директорию как Perl-программу.
- Нераспознанное escape-последовательность \%c в классе символов в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) Вы использовали комбинацию обратного слэша и символа, которая не распознаётся Perl внутри класса символов. Это фатальная ошибка, когда класс символов используется внутри
(?[ ]). - Нераспознанное escape-последовательность \%c в классе символов в регулярном выражении (пропускается); помечено <-- HERE в m/%s/
-
(W regexp) Вы использовали комбинацию обратного слэша и символа, которая не распознаётся Perl внутри класса символов. Символ был понят буквально, но это может измениться в будущих версиях Perl. Пометка <-- HERE показывает место в регулярном выражении, где была обнаружена escape-последовательность.
- Нераспознанная escape-последовательность \%c
-
(W misc) Вы использовали комбинацию обратного слэша и символа, которая не распознаётся Perl. Символ был понят буквально, но это может измениться в будущих версиях Perl.
- Нераспознанная escape-последовательность \%s (пропускается) в регулярном выражении; помечено <-- HERE в m/%s/
-
(W regexp) Вы использовали комбинацию обратного слэша и символа, которая не распознаётся Perl. Символ(ы) был/были понят/поняты буквально, но это может измениться в будущих версиях Perl. Пометка <-- HERE показывает место в регулярном выражении, где была обнаружена escape-последовательность.
- Нераспознанное имя сигнала "%s"
-
(F) Вы указали имя сигнала для функции kill(), которое не распознаётся. Введите
kill -lв вашей оболочке, чтобы увидеть допустимые имена сигналов в вашей системе. - Нераспознанный ключ: -%s (-h отобразит допустимые ключи)
-
(F) Вы указали недопустимый ключ для Perl. Не делайте этого. (Если вы считаете, что не делали этого, проверьте строку #! для определения, не передаёт ли она неверный ключ от вашего имени.)
- Неудачное выполнение %s для имени файла, содержащего перевод строки
-
(W перевод строки) Была предпринята попытка выполнить операцию с файлом по имени файла, и эта операция не удалась, ВЕРОЯТНО, из-за наличия перевода строки в имени файла, ВЕРОЯТНО, из-за того, что вы забыли использовать chomp(). См. "chomp" в perlfunc.
- Вызванная функция работы с каталогом "%s" не поддерживается
-
(F) Ваша машина не поддерживает opendir() и readdir().
- Функция %s не поддерживается
-
(F) Данная машина, по-видимому, не реализует указанную функцию. По крайней мере, Configure так считает.
- Функция fork не поддерживается
-
(F) Ваша версия исполняемого файла не поддерживает создание дочерних процессов.
Обратите внимание, что в некоторых системах, например, OS/2, могут существовать разные варианты Perl-исполняемых файлов, некоторые из которых поддерживают fork, а некоторые — нет. Попробуйте изменить имя, которым вы вызываете Perl, на
perl_,perl__и так далее. - Неподдерживаемая кодировка скрипта %s
-
(F) Ваш файл программы начинается с Unicode Byte Order Mark (BOM), который объявляет его кодировку Unicode, которую Perl не может прочитать.
- Вызванная функция работы с сокетами "%s" не поддерживается
-
(F) Ваша машина не поддерживает механизм сокетов Беркли, или, по крайней мере, Configure так посчитал.
- Незакрытый аргумент '(*...' в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) Вы использовали шаблон вида
(*...:...), но не завершили шаблон). Исправьте шаблон и повторите попытку. - Незавершённый список атрибутов
-
(F) Лексер обнаружил что-то кроме простого идентификатора в начале атрибута, и это не был символ точки с запятой или начало блока. Возможно, вы слишком рано завершили список параметров предыдущего атрибута. См. attributes.
- Незавершённый параметр атрибута в списке атрибутов
-
(F) Лексер увидел открывающую (левую) круглую скобку при разборе списка атрибутов, но соответствующая закрывающая (правая) круглая скобка не была найдена. Возможно, вам нужно добавить (или удалить) символ обратного слэша, чтобы сбалансировать скобки. См. attributes.
- Незавершённое сжатое целое число
-
(F) Аргумент для unpack("w",...) был несовместим с форматом сжатого целого числа BER и не мог быть преобразован в целое число. См. "pack" в perlfunc.
- Незавершенный конструктор '(*...' в регулярном выражении; помечен <-- HERE в m/%s/
-
(F) Вы использовали шаблон вида
(*...), но не завершили его). Исправьте шаблон и повторите попытку. - Незавершенный разделитель для документа здесь
-
(F) Это сообщение появляется, когда метка документа здесь имеет начальную кавычку, но отсутствует конечная кавычка. Возможно, вы написали:
<<"fooвместо:
<<"foo" - Незавершенный шаблон \g... в регулярном выражении; помечен <-- HERE в m/%s/
- Незавершенный шаблон \g{...} в регулярном выражении; помечен <-- HERE в m/%s/
-
(F) В регулярном выражении у вас был
\g, за которым не последовало правильное обращение к группе. В случае\g{, отсутствует закрывающая фигурная скобка; в противном случае\gдолжно следовать целое число. Исправьте шаблон и повторите попытку. - Незавершенный оператор <>
-
(F) Лексер обнаружил левую угловую скобку в месте, где ожидалось имя, поэтому он ищет соответствующую правую угловую скобку, но не находит ее. Скорее всего, вы пропустили необходимые скобки в начале строки, и на самом деле хотели использовать "меньше, чем".
- Незавершенный аргумент шаблона глагола в регулярном выражении; помечен <-- HERE в m/%s/
-
(F) Вы использовали шаблон вида
(*VERB:ARG), но не завершили его). Исправьте шаблон и повторите попытку. - Незавершенный шаблон глагола в регулярном выражении; помечен <-- HERE в m/%s/
-
(F) Вы использовали шаблон вида
(*VERB), но не завершили его). Исправьте шаблон и повторите попытку. - Попытка untie, в то время как %d внутренних ссылок всё ещё существуют
-
(W untie) Копия объекта, возвращённого из
tie(илиtied), всё ещё была действительна, когда был вызванuntie. - Использование: POSIX::%s(%s)
-
(F) Вы вызвали функцию POSIX с неправильными аргументами. См. "FUNCTIONS" в POSIX для получения дополнительной информации.
- Использование: Win32::%s(%s)
-
(F) Вы вызвали функцию Win32 с неправильными аргументами. См. Win32 для получения дополнительной информации.
- $[ используется в %s (вы имели в виду $]?)
-
(W синтаксис) Вы использовали
$[в сравнении, например: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 синтаксис) Локализация lvalues, таких как
local($x=10), является допустимой, но фактически local() в данный момент не оказывает никакого эффекта. Это может измениться в будущем, но пока такой код не рекомендуется. - Бесполезный (?%s) - используйте /%s модификатор в регулярном выражении; помечен <-- HERE в m/%s/
-
(W regexp) Вы использовали внутренний модификатор, такой как (?o), который не имеет смысла, если он не применяется ко всему регулярному выражению:
if ($string =~ /(?o)$pattern/) { ... }должно быть написано как
if ($string =~ /$pattern/o) { ... }Пометка <-- HERE указывает место в регулярном выражении, где была обнаружена проблема. См. perlre.
- Бесполезное использование атрибута "const"
-
(W misc) Атрибут
constне оказывает никакого влияния, за исключением анонимных замыканий-прототипов. Вы применили его к подпрограмме через attributes.pm. Это полезно только внутри обработчика атрибутов для анонимной подпрограммы. - Бесполезное использование модификатора /d в операторе транслитерации
-
(W misc) Вы использовали модификатор /d, где список поиска имеет такую же длину, что и список замены. См. perlop для получения дополнительной информации о модификаторе /d.
- Бесполезное использование \E
-
(W misc) У вас есть \E в строке с двойными кавычками без
\U,\Lили\Qперед ней. - Бесполезное использование модификатора жадности '%c' в регулярном выражении; помечен <-- HERE в m/%s/
-
(W regexp) Вы указали что-то вроде этого:
qr/a{3}?/ qr/b{1,1}+/Модификаторы
"?"и"+"не оказывают никакого эффекта, поскольку они изменяют количество совпадений при наличии выбора, а при указании точного числа совпадений нет места для выбора. - Бесполезное использование %s в контексте без действия
-
(W void) Вы выполнили действие без побочных эффектов в контексте, который ничего не делает с возвращаемым значением, например, оператор, который не возвращает значение из блока, или левая часть оператора скалярной запятой. Часто это указывает не на глупость с вашей стороны, а на неспособность Perl проанализировать вашу программу так, как вы предполагали. Например, вы получите это, если перепутали приоритеты C с приоритетами Python и написали
$one, $two = 1, 2;вместо
($one, $two) = (1, 2);Другая распространённая ошибка - использование обычных скобок для создания ссылки на список, когда следует использовать квадратные или фигурные скобки, например, если вы пишете
$array = (1,2);вместо
$array = [1,2];Квадратные скобки явно превращают значение списка в скалярное значение, в то время как круглые скобки - нет. Таким образом, когда скобки со списком вычисляются в скалярном контексте, запятая обрабатывается как оператор запятой C, который отбрасывает левый операнд, что не соответствует вашим намерениям. См. perlref для получения дополнительной информации об этом.
Это предупреждение не будет выведено для числовых констант, равных 0 или 1, поскольку они часто используются в операторах, таких как
1 while sub_with_side_effects();Предупреждения выдаются для строковых констант, которые обычно оцениваются как 0 или 1.
- Бесполезное использование (?-p) в регулярном выражении; помечен <-- HERE в m/%s/
-
(W regexp) Модификатор
pне может быть выключен после установки. - Бесполезное использование псевдонима "re"
-
(W) Вы сделали
use re;без каких-либо аргументов. Это не очень полезно. - Бесполезное использование sort в скалярном контексте
-
(W void) Вы использовали sort в скалярном контексте, например:
my $x = sort @y;Это не очень полезно, и perl сейчас оптимизирует это.
- Бесполезное использование %s без значений
-
(W синтаксис) Вы использовали функцию push() или unshift() без аргументов, кроме массива, например,
push(@x)илиunshift(@foo). Обычно это не оказывает никакого эффекта на массив, поэтому совершенно бесполезно. В принципе, push(@tied_array) может иметь какой-то эффект, если массив привязан к классу, который реализует метод PUSH. В таком случае вы можете написать это какpush(@tied_array,()), чтобы избежать этого предупреждения. - "use" недопустимо в выражении
-
(F) Ключевое слово "use" распознаётся и выполняется во время компиляции и не возвращает полезного значения. См. perlmod.
- Использование необъявленного << для обозначения <<"" запрещено
-
(F) Теперь необходимо использовать явно указанную форму, если вы хотите использовать пустую строку в качестве разделителя документа здесь.
Использование необъявленного разделителя было устаревшим в Perl 5.000 и является фатальной ошибкой начиная с Perl 5.28.
- Использование модификатора /c бессмысленно в s///
-
(W regexp) Вы использовали модификатор /c в подстановке. Модификатор /c в настоящее время не имеет смысла в подстановках.
- Использование модификатора /c бессмысленно без /g
-
(W regexp) Вы использовали модификатор /c с операндом регулярного выражения, но не использовали модификатор /g. В настоящее время /c имеет смысл только при использовании /g. (Это может измениться в будущем.)
- Использование кодового пункта 0x%s недопустимо; максимальное допустимое значение 0x%x
- Использование кодового пункта 0x%s недопустимо; максимальное допустимое значение 0x%x в регулярном выражении; помечено <-- HERE в m/%s/
-
(F) Вы использовали код символа, который не разрешен, так как он слишком большой. Unicode допускает только код символов до 0x10FFFF, но Perl допускает гораздо большие. Более ранние версии Perl допускали код символов выше IV_MAX (0x7FFFFFF на 32-битных платформах, 0x7FFFFFFFFFFFFFFF на 64-битных платформах), однако это могло привести к сбоям интерпретатора Perl в некоторых конструкциях, в том числе к зависанию в некоторых случаях.
Если ваш код должен выполняться на различных платформах, имейте в виду, что верхний предел зависит от платформы. Он намного больше на 64-битных системах, чем на 32-битных.
Использование кодов символов вне диапазона было устаревшим в Perl 5.24 и стало фатальной ошибкой в Perl 5.28.
- Использование each() для хэша после вставки без сброса итератора хэша приводит к неопределённому поведению
-
(S internal) Поведение
each()после вставки неопределённо; это может пропустить элементы или посетить элементы более одного раза. Рассмотрите использованиеkeys()вместоeach(). - Использование := для пустого списка атрибутов запрещено
-
(F) Конструкция
my $x := 42интерпретировалась как эквивалентнаяmy $x : = 42(применение пустого списка атрибутов к$x). Эта конструкция была устаревшей с версии 5.12.0 и теперь является синтаксической ошибкой, поэтому:=может быть использована как новый оператор в будущем.Если вам нужен пустой список атрибутов, например, в генераторе кода, добавьте пробел перед
=. - Использование %s для локали, отличной от UTF-8, неверно. Предполагается UTF-8 локали
-
(W locale) Вы сопоставляете регулярное выражение с использованием правил локали, и была встречена указанная конструкция. Эта конструкция допустима только для локали UTF-8, а текущая локали таковой не является. Это не имеет смысла. Perl продолжит работу, предполагая Unicode (UTF-8) локаль, но результаты, скорее всего, будут неверными.
- Использование освобождённого значения в итерации
-
(F) Возможно, вы изменили итерируемый массив внутри цикла? Эта ошибка обычно вызывается кодом, подобным следующему:
@a = (3,4); @a = () for (1,2,@a);Изменять массивы во время их итерации не следует. По причинам скорости и эффективности Perl не выполняет полное подсчёт ссылок для итерируемых элементов, поэтому удаление такого элемента в середине итерации приводит к тому, что Perl видит освобождённое значение.
- Использование модификатора /g бессмысленно в split
-
(W regexp) Вы использовали модификатор /g в шаблоне для оператора
split. Посколькуsplitвсегда пытается сопоставить шаблон повторно, модификатор/gне оказывает никакого влияния. - Использование "goto" для перехода внутрь конструкции устарело
-
(D 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.
- Использование -l для дескриптора файла%s
-
(W io) Дескриптор файла представляет открытый файл, и при открытии файла он уже прошёл мимо любого символической ссылки, которую, вероятно, вы пытаетесь найти. Операция вернула
undef. Используйте имя файла вместо этого. - Использование ссылки "%s" в качестве индекса массива
-
(W misc) Вы попытались использовать ссылку в качестве индекса массива; это, вероятно, не то, что вы имели в виду, потому что ссылки в численном контексте представляют собой обычно очень большие числа, что обычно указывает на ошибку программиста.
Если вы действительно имеете в виду это, явным образом преобразуйте вашу ссылку в число, как в этом примере:
$array[0+$ref]. Однако это предупреждение не выводится для перегруженных объектов, поскольку вы можете перегрузить операторы преобразования в числовое или строковое представление, и, вероятно, вы знаете, что делаете. - Использование строк с кодами символов больше 0xFF в качестве аргументов к оператору %s запрещено
-
(F) Вы пытались использовать один из битовых операторов над строками (
&или|или^или~) над строкой, содержащей символ с кодом больше 0xFF. Битовые операторы над строками обрабатывают свои операнды как строки байтов, а значения свыше 0xFF бессмысленны в этом контексте.Это стало фатальной ошибкой в Perl 5.28.
-
Использование строк с кодами символов больше 0xFF в качестве аргументов к
vecустарело. Это станет фатальной ошибкой в Perl 5.32 -
(D deprecated) Вы пытались использовать
vecнад строкой, содержащей символ с кодом больше 0xFF, что бессмысленно в данном случае.Такое использование станет фатальной ошибкой в Perl 5.32.
- Использование заражённых аргументов в %s устарело
-
(W taint, deprecated) Вы передали
system()илиexec()несколько аргументов, и по крайней мере один из них заражён. Раньше это было разрешено, но в будущей версии perl это станет фатальной ошибкой. Удалите заражение из своих аргументов. См. perlsec. - Использование незарезервированного кода символа или несамостоятельного графема в качестве разделителя запрещено
-
(F) Графема — это то, что носитель языка воспринимает как символ. В Unicode (и, следовательно, в Perl) графема может на самом деле состоять из нескольких смежных символов, которые вместе образуют полную графему. Например, может быть базовый символ, как "R", и диакритический знак, как «^», которые при отображении выглядят как один символ с диакритическим знаком над «R». Perl в настоящее время позволяет использовать такие диакритические знаки в качестве разделителей строк, шаблонов и т. д. При отображении диакритический знак будет выглядеть так, как будто он принадлежит символу, расположенному непосредственно слева от него. Для того, чтобы язык мог принимать графемы в качестве разделителей, мы не можем разрешать использование разделителей, которые сами по себе не являются графемами. Кроме того, разделитель должен быть уже назначен (или известно, что никогда не будет назначен), чтобы обеспечить устойчивость кода к будущим изменениям, в противном случае код, который работает сегодня, перестанет компилироваться, если текущий незарезервированный разделитель окажется чем-то, что не является самостоятельной графемой. Поскольку Unicode никогда не будет назначать несимвольные коды символов, а также коды символов, превышающие законный максимум Unicode, они могут быть разделителями, и их использование законно.
- Использование неинициализированного значения%s
-
(W uninitialized) Было использовано неопределённое значение, как если бы оно уже было определено. Оно было интерпретировано как "" или 0, но, возможно, это ошибка. Для подавления этого предупреждения присвойте переменной определённое значение.
Чтобы помочь вам выяснить, что было неопределено, perl попытается указать имя переменной (если таковое имеется), которая была неопределена. В некоторых случаях это невозможно, поэтому он также указывает операцию, в которой использовалось неопределённое значение. Обратите внимание, однако, что perl оптимизирует вашу программу, и операция, отображённая в предупреждении, может не обязательно появляться в вашей программе буквально. Например,
"that $foo"обычно оптимизируется до"that " . $foo, а предупреждение будет относиться к операторуconcatenation (.), даже если в вашей программе нет.. - "use re 'strict'" — экспериментальная функция
-
(S experimental::re_strict) Вещи, которые отличаются, когда шаблон регулярного выражения компилируется в рамках
'strict', могут быть изменены в будущих версиях Perl несовместимым образом. Это означает, что шаблон, который компилируется сегодня, может не скомпилироваться в будущей версии Perl. - Используйте \x{...} для более чем двух шестнадцатеричных символов в регулярном выражении; отмечено <-- HERE в m/%s/
-
(F) В регулярном выражении вы написали что-то вроде
(?[ [ \xBEEF ] ])Perl не уверен, имели ли вы в виду это
(?[ [ \x{BEEF} ] ])или это
(?[ [ \x{BE} E F ] ])Вам нужно добавить фигурные скобки или пробелы для устранения неоднозначности.
- Использование только первого символа, возвращаемого \N{} в классе символов в регулярном выражении; отмечено <-- HERE в m/%s/
-
(W regexp) Имена Unicode символов
(\N{...})могут возвращать многосимвольные последовательности. Хотя класс символов должен сопоставлять только один символ входных данных, Perl правильно сопоставит всю последовательность, за исключением случаев, когда класс инвертирован ([^...]) или escape-последовательность является начальной или конечной точкой диапазона. В этих ситуациях поведение Perl не вполне ясно. В таких случаях Perl отбрасывает все, кроме первого символа возвращаемой последовательности, что, вероятно, не является желаемым результатом. - Использование /u для '%s' вместо /%s в регулярном выражении; отмечено <-- HERE в m/%s/
-
(W regexp) Вы использовали границу Unicode (
\b{...}или\B{...}) в части регулярного выражения, где действуют модификаторы набора символов/aили/aa. Эти два модификатора указывают на интерпретацию ASCII, что не имеет смысла для определения Unicode. Сгенерированное регулярное выражение будет скомпилировано таким образом, чтобы граница использовала весь Unicode. Никакая другая часть регулярного выражения не затронута.
- Использование !~ с %s не имеет смысла
-
(F) Использование оператора
!~сs///r,tr///rилиy///rв настоящее время зарезервировано для будущего использования, так как точное поведение ещё не определено. (Просто возвращение булевого отрицания изменённой строки обычно не особенно полезно.) - Супплемент UTF-16 U+%X
-
(S супплемент) У вас был супплемент UTF-16 в контексте, где они не считаются допустимыми. Эти кодовые точки, между U+D800 и U+DFFF (включительно), используются Unicode только для UTF-16. Однако Perl внутренне допускает все беззнаковые целочисленные кодовые точки (до предела, доступного на вашей платформе), включая супплементы. Но они могут вызвать проблемы при вводе или выводе, откуда, вероятно, и появилось это сообщение. Если вы действительно точно знаете, что делаете, вы можете отключить это предупреждение, используя
no warnings 'surrogate';. - Значение %s может быть "0"; проверьте с defined()
-
(W misc) В условном выражении вы использовали <HANDLE>, <*> (шаблон),
each()илиreaddir()в качестве булевого значения. Каждый из этих конструкций может возвращать значение "0"; это сделает условное выражение ложным, что, вероятно, не соответствует вашим намерениям. При использовании этих конструкций в условных выражениях проверяйте их значения с помощью оператораdefined. - Значение символа командной строки "%s" слишком длинное
-
(W misc) Предупреждение, специфичное для VMS. Perl пытался прочитать значение элемента %ENV из таблицы символов командной строки и обнаружил результирующую строку, длиннее 1024 символов. Возвращаемое значение было усечено до 1024 символов.
- Переменная "%s" недоступна
-
(W closure) Во время компиляции внутренняя именованная подпрограмма или eval пытается захватить внешний лексический элемент, который в настоящее время недоступен. Это может произойти по двум причинам. Во-первых, внешний лексический элемент может быть объявлен во внешней анонимной подпрограмме, которая ещё не была создана. (Помните, что именованные подпрограммы создаются на этапе компиляции, а анонимные подпрограммы — во время выполнения.) Например,
sub { my $a; sub f { $a } }В момент создания f она не может захватить текущее значение $a, так как анонимная подпрограмма ещё не была создана. И наоборот, следующее предупреждение не выдаст, так как анонимная подпрограмма к этому моменту уже создана и активна:
sub { my $a; eval 'sub f { $a }' }->();Вторая ситуация вызвана eval, обращающимся к переменной, вышедшей из области видимости, например,
sub f { my $a; sub { eval '$a' } } f()->();Здесь, когда $a в eval компилируется, f() не выполняется, поэтому её $a недоступен для захвата.
- Переменная "%s" не импортирована%s
-
(S misc) При включенном "use strict" вы обращались к глобальной переменной, которую, по-видимому, вы считали импортированной из другого модуля, потому что что-то другое с тем же именем (обычно подпрограмма) экспортируется этим модулем. Обычно это означает, что вы поставили неверный символ перед переменной.
- Обратное утверждение с переменной длиной не реализовано в регулярном выражении m/%s/
-
(F) Это сообщение больше не должно появляться с Perl 5.30. Оно сохраняется в этом документе для удобства людей, использующих более раннюю версию Perl.
В Perl 5.30 и более ранних версиях обратное утверждение разрешается только для подвыражений, длина которых является фиксированной и известной на этапе компиляции. Для положительного обратного утверждения вы можете использовать конструкцию регулярного выражения
\K, чтобы получить эквивалентную функциональность. См. (?<=pattern) и \K в perlre.Начиная с Perl 5.18, существуют неявные правила Unicode в
/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) Неявный вызов close() при open() получил ошибку при закрытии. Обычно это указывает на то, что файловая система закончилась дисковым пространством.
- Предупреждение: невозможно корректно закрыть дескриптор файла: %s
- Предупреждение: невозможно корректно закрыть дескриптор файла %s: %s
-
(S io) Возникли ошибки во время неявного закрытия дескриптора файла при достижении его счётчика ссылок нуля, когда он был всё ещё открыт, например:
{ open my $fh, '>', $file or die "open: '$file': $!\n"; print $fh $data or die "print: $!"; } # implicit close hereПоскольку различные ошибки могут быть обнаружены только close() (например, буферизация могла позволить
printв этом примере вернуть true даже при полном диске), небезопасно игнорировать его результат. Поэтому, когда это происходит неявно, Perl сигнализирует об ошибках предупреждением.До версии 5.22.0 Perl игнорировал такие ошибки, поэтому общее выражение, показанное выше, могло привести к скрытой потере данных.
- Предупреждение: Использование "%s" без скобок неоднозначно
-
(S ambiguous) Вы написали унарный оператор, за которым следует что-то, что выглядит как бинарный оператор, который также можно было бы интерпретировать как терм или унарный оператор. Например, если вы знаете, что функция rand имеет значение аргумента по умолчанию 1.0, и вы пишете
rand + 5;вы можете ПОНЯТЬ, что написали то же самое, что и
rand() + 5;но на самом деле вы получили
rand(+5);Поэтому используйте скобки, чтобы сказать, что вы действительно имели в виду.
- when экспериментально
-
(S experimental::smartmatch)
whenзависит от smartmatch, который является экспериментальным. Кроме того, у него есть несколько специальных случаев, которые могут быть не очевидными, и их поведение может измениться или даже быть удалено в любой будущей версии Perl. См. объяснение в "Экспериментальные детали в given и when" в perlsyn. - Символ расширенной кодовой страницы в %s
-
(S utf8) Perl встретил символ расширенной кодовой страницы (код >255), когда этого не ожидал. Это предупреждение по умолчанию включено для ввода-вывода (например, print).
Если это предупреждение исходит от ввода-вывода, самый простой способ его отключения — просто добавить слой
:utf8, например,binmode STDOUT, ':utf8'. Ещё один способ отключить предупреждение — добавитьno warnings 'utf8';, но это часто ближе к обману. В общем случае вы должны явно указать кодировку для дескриптора файла, см. open и "binmode" в perlfunc.Если предупреждение исходит не от ввода-вывода, этот диагностический вывод, вероятно, указывает на получение неверных результатов. Вам следует проверить свой код, чтобы определить, как символ расширенной кодовой страницы попадает в операцию, которая с ним не работает.
- Широкий символ (U+%X) в %s
-
(W locale) При работе в однобайтовой кодировке (т.е., не UTF-8), был встречен многобайтовый символ. Perl рассматривает этот символ как указанный Юникод-код. Сочетание не-UTF-8 кодировок и Юникода опасно. Почти наверняка некоторые символы будут иметь два различных представления. Например, в кодировке ISO 8859-7 (греческий) код 0xC3 представляет заглавную гамму. Но то же самое делает и 0x393. Это сделает сравнение строк ненадежным.
Вероятно, вам нужно выяснить, как этот многобайтовый символ оказался смешанным с вашей однобайтовой кодировкой (или, возможно, вы думали, что у вас UTF-8, но Perl не согласен).
- Внутри []-длина '%c' недопустима
-
(F) Счет в шаблоне (un)pack может быть заменён на
[TEMPLATE]только еслиTEMPLATEвсегда соответствует тому же количеству упакованных байтов, которые можно определить только по шаблону. Это невозможно, если он содержит какие-либо из кодов @, /, U, u, w или *-длина. Переработайте шаблон. - %s() с отрицательным аргументом
-
(S misc) Некоторые операции не имеют смысла с отрицательными аргументами. Выдается предупреждение, и операция не выполняется.
- write() на закрытом файловом дескрипторе %s
-
(W closed) Файловый дескриптор, в который вы записываете, был закрыт до этого момента. Проверьте поток управления.
- %s «\x%X» не отображается в Юникоде
-
(S utf8) При чтении в разных кодировках Perl пытается преобразовать всё в символы Юникода. Прочитанные вами байты не являются допустимыми в этой кодировке. Например
utf8 "\xE4" does not map to Unicodeесли вы пытаетесь прочитать латинский a-диарезис в Latin-1 как UTF-8.
- 'X' вне строки
-
(F) У вас был шаблон (un)pack, который указал относительную позицию перед началом строки, которая должна быть (un)упакована. См. "pack" в perlfunc.
- 'x' вне строки в unpack
-
(F) У вас был шаблон pack, который указал относительную позицию после конца строки, которая должна быть распакована. См. "pack" в perlfunc.
- ВЫ ЕЩЁ НЕ ОТКЛЮЧИЛИ СКРИПТЫ SET-ID В ЯДРЕ!
-
(F) И вы, вероятно, никогда не сделаете этого, потому что, вероятно, у вас нет исходного кода вашего ядра, и ваш поставщик, вероятно, не заботится о том, чего вы хотите. Существует уязвимость где угодно, где у вас есть скрипт set-id, и чтобы её устранить, вам нужно убрать бит set-id из скрипта, который вы пытаетесь запустить. Для фактического запуска скрипта set-id ваш лучший вариант - поместить C-обёртку set-id вокруг вашего скрипта.
- Вам нужно привести "%s" в кавычки
-
(W syntax) Вы назначили неименное слово как имя обработчика сигнала. К сожалению, у вас уже объявлена подпрограмма с таким именем, что означает, что Perl 5 попытается вызвать подпрограмму при выполнении присваивания, что, вероятно, не то, что вы хотите. (Если это то, что вы хотите, поставьте перед ним &.)
- Ваши случайные числа не так уж случайны
-
(F) При попытке инициализации случайного зерна для хешей Perl не смог получить никакой случайности из вашей системы. Это обычно указывает на что-то очень не так.
- Нулевая длина \N{} в регулярном выражении; отмеченная <-- HERE в m/%s/
-
(F) Символьные обозначения Юникода (
\N{...}) могут возвращать последовательность нулевой длины. Такое обозначение было использовано в расширенном классе символов, т.е.(?[...]), или подuse re 'strict', что запрещено. Проверьте, что используется правильное обозначение и правильный обработчик charnames находится в области видимости. <-- HERE показывает, где в регулярном выражении была обнаружена проблема.
СМОТРИТЕ ТАКЖЕ
© 1993–2020 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.30.3/perldiag