Spec-Zone.ru › Perl 5.34

perlintern

СОДЕРЖАНИЕ

  • НАЗВАНИЕ
  • ОПИСАНИЕ
  • Обработка AV
  • Функции обратного вызова
  • Преобразование типов
  • Изменение регистра символов
  • Классификация символов
  • Информация о компиляторе и препроцессоре
  • Директивы компилятора
  • Временные крючки области компиляции
  • Конкурентность
  • Хеши подсказок COP
  • Пользовательские операторы
  • Обработка CV
  • Отладка
  • Функции отображения
  • Встраивание и клонирование интерпретатора
  • Errno
  • Макросы обработки исключений (простые)
  • Значения конфигурации файловой системы
  • Значения конфигурации с плавающей точкой
  • Форматы
  • Общие настройки
  • Глобальные переменные
  • Обработка GV
  • Управление крючками
  • Обработка HV
  • Ввод/вывод
  • Целочисленные значения конфигурации
  • Интерфейс лексического анализатора
  • Локали
  • Магия
  • Управление памятью
  • MRO
  • Функции многокрального вызова
  • Числовые функции
  • Построение Optree
  • Функции манипулирования Optree
  • Упаковывание и распаковывание
  • Структуры данных Pad
  • Доступ к паролям и группам
  • Пути к системным командам
  • Информация о прототипах
  • Функции REGEXP
  • Сигналы
  • Конфигурация сайта
  • Значения конфигурации сокетов
  • Фильтры исходного кода
  • Макросы манипулирования стеком
  • Обработка строк
  • Флаги SV
  • Обработка SV
  • Время
  • Имена typedef
  • Поддержка Unicode
  • Служебные функции
  • Версионирование
  • Предупреждения и завершение работы
  • XS
  • Недокументированные элементы
  • АВТОРЫ
  • СМОТРИТЕ ТАКЖЕ

НАЗВАНИЕ

perlintern - сгенерированная документация чисто внутренних функций Perl

ОПИСАНИЕ

Этот файл содержит сгенерированную документацию функций Perl-интерпретатора, которые документированы с использованием внутреннего формата Perl, но не помечены как часть API Perl. Другими словами, они не предназначены для использования в расширениях!

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

Обработка AV

AvFILLp

Если массив av пуст, возвращает -1; в противном случае возвращает максимальное значение индексов всех элементов массива, которые в настоящее время определены в av. Он не обрабатывает магию, поэтому в его имени указано p.

SSize_t  AvFILLp(AV* av)

Функции обратного вызова

В разделах Функции обратного вызова пока только общедоступные API элементы.

Преобразование типов

В разделах Преобразование типов пока только общедоступные API элементы.

Изменение регистра символов

В разделах Изменение регистра символов пока только общедоступные API элементы.

Классификация символов

В разделах Классификация символов пока только общедоступные API элементы.

Информация о компиляторе и препроцессоре

В разделах Информация о компиляторе и препроцессоре пока только общедоступные API элементы.

Директивы компилятора

В разделах Директивы компилятора пока только общедоступные API элементы.

Временные крючки области компиляции

BhkENTRY

ПРИМЕЧАНИЕ: BhkENTRY является экспериментальным и может быть изменён или удалён без предварительного уведомления.

Возвращает запись из структуры BHK. which — это препроцессорный токен, указывающий, какую запись вернуть. Если соответствующий флаг не установлен, возвращается NULL. Тип возвращаемого значения зависит от запрашиваемой записи.

void *  BhkENTRY(BHK *hk, which)
BhkFLAGS

ПРИМЕЧАНИЕ: BhkFLAGS является экспериментальным и может быть изменён или удалён без предварительного уведомления.

Возвращает флаги BHK.

U32  BhkFLAGS(BHK *hk)
CALL_BLOCK_HOOKS

ПРИМЕЧАНИЕ: CALL_BLOCK_HOOKS является экспериментальным и может быть изменён или удалён без предварительного уведомления.

Вызывает все зарегистрированные крючки блоков для типа which. which — это препроцессорный токен; тип arg зависит от which.

void  CALL_BLOCK_HOOKS(which, arg)

Конкурентность

В разделах Конкурентность пока только общедоступные API элементы.

Хеши подсказок COP

В разделах Хеши подсказок COP пока только общедоступные API элементы.

Пользовательские операторы

core_prototype

Эта функция присваивает прототип указанной ядра функции sv, или новую временную SV, если sv равно NULL. Возвращает изменённый sv, или NULL если у ядра функции нет прототипа. code — это код, возвращённый keyword(). Он не должен быть равен 0.

SV *  core_prototype(SV *sv, const char *name, const int code,
                     int * const opnum)

Обработка CV

CvWEAKOUTSIDE

Каждый CV имеет указатель CvOUTSIDE() на свой лексически внешний CV (если таковой имеется). Поскольку указатели на прототипы анонимных подпрограмм хранятся в слотах стека &, возможно получение циклической ссылки, когда родитель указывает на ребёнка, а ребёнок — на родителя. Чтобы избежать утечки памяти, мы не увеличиваем счётчик ссылок CV, на который указывает CvOUTSIDE в определённом случае, когда у родителя есть слот стека &, указывающий на нас. В этом случае мы устанавливаем флаг CvWEAKOUTSIDE у ребёнка. Это позволяет определить, в каких случаях мы должны уменьшать счётчик ссылок родителя при освобождении ребёнка.

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

BEGIN { $a = sub { eval '$x' } }

В этом случае BEGIN освобождается сразу после выполнения, поскольку активных ссылок на него нет: прототип анонимной подпрограммы имеет CvWEAKOUTSIDE установленным, так как он не является замыканием, и $a указывает на тот же CV, так что он не увеличивает счётчик ссылок BEGIN. Когда $a выполняется, eval '$x' вызывает цепочку CvOUTSIDE и доступ к освобождённому BEGIN.

Чтобы избежать этого, каждый раз, когда CV и связанный с ним стек освобождаются, все записи & в стеке явно удаляются, и если счётчик ссылок на указанную анонимную подпрограмму всё ещё положителен, то CvOUTSIDE ребёнка устанавливается на указание на его прародителя. Это произойдёт только в единственном случае, когда у анонимного прототипа без замыкания есть одна или более активных ссылок (например, $a выше).

Ещё один момент — CV может быть просто неопределённым, а не освобождённым, например, undef &foo. В этом случае его счётчик ссылок может не достигнуть нуля, но мы всё равно удаляем его стек и его CvROOT и т.д. Поскольку различные дочерние элементы могут всё ещё указывать своим CvOUTSIDE на этот неопределённый CV, мы сохраняем его CvOUTSIDE на некоторое время, чтобы цепочка лексических областей оставалась неразрывной. Например, следующее должно напечатать 123:

my $x = 123;
sub tmp { sub { eval '$x' } }
my $a = tmp();
undef &tmp;
print  $a->();
bool  CvWEAKOUTSIDE(CV *cv)
docatch

Проверка случаев 0 или 3 для cur_env.je_ret, используется только внутри контекста eval.

0 используется как продолжение внутри eval,

3 используется для исключения, пойманного внутренним eval — продолжение внутреннего цикла

См. cop.h: je_mustcatch, если установлено в любом уровне выполнения в TRUE, означает, что операции eval должны установить локальную jmpenv для обработки ловушек исключений.

OP*  docatch(Perl_ppaddr_t firstpp)

Отладка

free_c_backtrace

Освобождает трассировку стека, полученную из get_c_backtrace.

void  free_c_backtrace(Perl_c_backtrace* bt)
get_c_backtrace

Собирает трассировку стека (также известную как «стековая трассировка») в один линейный буфер, выделенный с помощью malloc, который вызывающий код обязан Perl_free_c_backtrace().

Сканирует фреймы назад на depth + skip, затем опускает skip самый внутренний, возвращая не более depth фреймов.

Perl_c_backtrace*  get_c_backtrace(int max_depth, int skip)
PL_DBsingle

Когда Perl запускается в режиме отладки с ключом -d, эта переменная SV — булево значение, указывающее, выполняются ли подпрограммы пошагово. Пошаговое выполнение автоматически включается после каждого шага. Это переменная C, которая соответствует переменной Perl $DB::single. См. "PL_DBsub".

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

SV *  PL_DBsingle
PL_DBsub

Когда Perl запускается в режиме отладки с ключом -d, эта GV содержит SV, который хранит имя подпрограммы, отлаживаемой в данный момент. Это переменная C, которая соответствует переменной Perl $DB::sub. См. "PL_DBsingle".

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

GV *  PL_DBsub
PL_DBtrace

Переменная трассировки, используемая при запуске Perl в режиме отладки с ключом -d. Это переменная C, которая соответствует переменной Perl $DB::trace. См. "PL_DBsingle".

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

SV *  PL_DBtrace

Функции отображения

В настоящее время в функциях отображения находятся только элементы открытого API.

Встраивание и клонирование интерпретатора

cv_dump

вывести содержимое CV

void  cv_dump(const CV *cv, const char *title)
cv_forget_slab

Когда CV имеет счётчик ссылок на свой фрагмент (CvSLABBED), он несёт ответственность за его освобождение. (Поэтому ни у двух CV не должно быть счётчика ссылок на один и тот же фрагмент.) CV нужен только для ссылки на фрагмент во время компиляции. После компиляции и CvROOT присоединения он выполнил свою работу, поэтому может забыть фрагмент.

void  cv_forget_slab(CV *cv)
do_dump_pad

Вывод содержимого списка областей

void  do_dump_pad(I32 level, PerlIO *file, PADLIST *padlist,
                  int full)
pad_alloc_name

Выделяет место в текущей компилируемой области (через "pad_alloc" в perlapi) и затем сохраняет имя для этой записи. name принимается и становится именем записи; она должна уже содержать строку имени. typestash и ourstash и padadd_STATE флаг добавляются к name. Никакие другие обработки из "pad_add_name_pvn" в perlapi не выполняются. Возвращает смещение выделенного слота области.

PADOFFSET  pad_alloc_name(PADNAME *name, U32 flags, HV *typestash,
                          HV *ourstash)
pad_block_start

Обновляет переменные состояния компиляции области при входе в новый блок.

void  pad_block_start(int full)
pad_check_dup

Проверка на дублирование объявлений: сообщается о любом из:

* a 'my' in the current scope with the same name;
* an 'our' (anywhere in the pad) with the same name and the
  same stash as 'ourstash'

is_our указывает, что проверяемое имя является "our" объявлением.

void  pad_check_dup(PADNAME *name, U32 flags, const HV *ourstash)
pad_findlex

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

Возвращает смещение в нижней области лексического или фиктивного лексического значения. cv — CV, в котором нужно начать поиск, а seq — текущее cop_seq для сопоставления. Если warn имеет значение true, выводятся соответствующие предупреждения. Переменные out_* возвращают значения и являются указателями на место, куда должны быть сохранены возвращаемые значения. out_capture, если не null, запрашивает, чтобы внутреннее экземпляр лексического значения было захвачено; out_name устанавливается в имя самой внутренней сопоставленной области или имени фиктивной области; out_flags возвращает флаги, обычно связанные с полем PARENT_FAKELEX_FLAGS фиктивного имени области.

Обратите внимание, что pad_findlex() рекурсивен; он рекурсивно проходит по цепи CV, затем возвращается вниз, добавляя фиктивные записи по мере прохождения. Он должен быть таким, потому что фиктивные имена в анонимных прототипах должны хранить в xpadn_low индекс во внешней области.

PADOFFSET  pad_findlex(const char *namepv, STRLEN namelen,
                       U32 flags, const CV* cv, U32 seq, int warn,
                       SV** out_capture, PADNAME** out_name,
                       int *out_flags)
pad_fixup_inner_anons

Для всех анонимных CV в области, измените CvOUTSIDE этого CV с old_cv на new_cv, если это необходимо. Необходимо, когда только что скомпилированный CV нужно переместить в уже существующую структуру CV.

void  pad_fixup_inner_anons(PADLIST *padlist, CV *old_cv,
                            CV *new_cv)
pad_free

Освободить SV со смещением po в текущей области.

void  pad_free(PADOFFSET po)
pad_leavemy

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

OP *  pad_leavemy()
padlist_dup

Дублирует область.

PADLIST *  padlist_dup(PADLIST *srcpad, CLONE_PARAMS *param)
padname_dup

Дублирует имя области.

PADNAME *  padname_dup(PADNAME *src, CLONE_PARAMS *param)
padnamelist_dup

Дублирует список имен областей.

PADNAMELIST *  padnamelist_dup(PADNAMELIST *srcpad,
                               CLONE_PARAMS *param)
pad_push

Добавляет новую область в список областей, если в этом уровне вложенности уже есть область, то новую область создавать не нужно. Затем задайте @_ для новой области в слоте ноль.

void  pad_push(PADLIST *padlist, int depth)
pad_reset

Пометить все текущие временные переменные для повторного использования

void  pad_reset()
pad_setsv

Установить значение со смещением po в текущей (компилируемой или выполняемой) области. Используйте макрос PAD_SETSV() вместо прямого вызова этой функции.

void  pad_setsv(PADOFFSET po, SV* sv)
pad_sv

Получить значение со смещением po в текущей (компилируемой или выполняемой) области. Используйте макрос PAD_SV вместо прямого вызова этой функции.

SV*  pad_sv(PADOFFSET po)
pad_swipe

Отказаться от временной переменной в текущей области по смещению po и заменить её новой.

void  pad_swipe(PADOFFSET po, bool refadjust)

Errno

dSAVEDERRNO

Объявление переменных, необходимых для сохранения errno и любого операционной системы специального номера ошибки.

void  dSAVEDERRNO
dSAVE_ERRNO

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

void  dSAVE_ERRNO
RESTORE_ERRNO

Восстановление errno и любого операционной системы специального номера ошибки, сохранённого функциями dSAVE_ERRNO или RESTORE_ERRNO.

void  RESTORE_ERRNO
SAVE_ERRNO

Сохранение errno и любого операционной системы специального номера ошибки для возможного последующего восстановления функцией RESTORE_ERRNO Требуется dSAVEDERRNO или dSAVE_ERRNO в области видимости.

void  SAVE_ERRNO
SETERRNO

Установить errno, а на VMS установить vaxc$errno.

void  SETERRNO(int errcode, int vmserrcode)

Макросы обработки исключений (простые)

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

Значения конфигурации файловой системы

В настоящее время в значениях конфигурации файловой системы находятся только элементы открытого API.

Значения конфигурации с плавающей запятой

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

Форматы

В настоящее время в форматах находятся только элементы открытого API.

Общая конфигурация

В настоящее время в общей конфигурации находятся только элементы открытого API.

Глобальные переменные

В настоящее время в глобальных переменных находятся только элементы открытого API.

Обработка GV

gv_stashsvpvn_cached

Возвращает указатель на скрытие для указанного пакета, возможно, кэшированного. Реализует как "gv_stashpvn" в perlapi, так и "gv_stashsv" в perlapi.

Требуется, чтобы одна из namesv или namepv была не равна null.

Если установлен флаг GV_CACHE_ONLY , возвращает скрытие только в том случае, если оно найдено в кэше; см. "gv_stashpvn" в perlapi для получения сведений об остальных flags.

Обратите внимание, что предпочтительно, чтобы namesv была не равна null по соображениям производительности.

HV*  gv_stashsvpvn_cached(SV *namesv, const char* name,
                          U32 namelen, I32 flags)
gv_try_downgrade

ПРИМЕЧАНИЕ: gv_try_downgrade является экспериментальным и может быть изменён или удалён без предварительного уведомления.

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

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

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

void  gv_try_downgrade(GV* gv)

Обработка хуков

В настоящее время в разделе «Обработка хуков» присутствуют только элементы публичного API.

Обработка HV

hv_ename_add

Добавляет имя в внутренний список эффективных имён стека. Смотрите "hv_ename_delete".

Вызывается при назначении стека в новом месте в таблице символов.

void  hv_ename_add(HV *hv, const char *name, U32 len, U32 flags)
hv_ename_delete

Удаляет имя из внутреннего списка эффективных имён стека. Если это имя, возвращённое HvENAME, то другое имя в списке займёт его место (HvENAME будет использовать его).

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

void  hv_ename_delete(HV *hv, const char *name, U32 len,
                      U32 flags)
refcounted_he_chain_2hv

Генерирует и возвращает HV *, представляющий содержимое цепочки refcounted_he. flags в настоящее время не используется и должно быть равно нулю.

HV *  refcounted_he_chain_2hv(const struct refcounted_he *c,
                              U32 flags)
refcounted_he_fetch_pv

Подобно "refcounted_he_fetch_pvn", но принимает строку с нулевым завершением вместо пары "строка/длина".

SV *  refcounted_he_fetch_pv(const struct refcounted_he *chain,
                             const char *key, U32 hash, U32 flags)
refcounted_he_fetch_pvn

Ищет в цепочке refcounted_he запись с ключом, заданным keypv и keylen. Если flags имеет установленный бит REFCOUNTED_HE_KEY_UTF8, байты ключа интерпретируются как UTF-8, в противном случае как Latin-1. hash — предварительно вычисленный хэш строки ключа или ноль, если он не был предварительно вычислен. Возвращает смертный скаляр, представляющий значение, связанное с ключом, или &PL_sv_placeholder, если значение для ключа отсутствует.

SV *  refcounted_he_fetch_pvn(const struct refcounted_he *chain,
                              const char *keypv, STRLEN keylen,
                              U32 hash, U32 flags)
refcounted_he_fetch_pvs

Подобно "refcounted_he_fetch_pvn", но принимает строку в прямом виде вместо пары "строка/длина" и без предварительно вычисленного хэша.

SV *  refcounted_he_fetch_pvs(const struct refcounted_he *chain,
                              "key", U32 flags)
refcounted_he_fetch_sv

Подобно "refcounted_he_fetch_pvn", но принимает скаляр Perl вместо пары "строка/длина".

SV *  refcounted_he_fetch_sv(const struct refcounted_he *chain,
                             SV *key, U32 hash, U32 flags)
refcounted_he_free

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

void  refcounted_he_free(struct refcounted_he *he)
refcounted_he_inc

Увеличивает счётчик ссылок refcounted_he. Также возвращается указатель на refcounted_he. Передача нулевого указателя в эту функцию безопасна: никаких действий не происходит, и возвращается нулевой указатель.

struct refcounted_he *  refcounted_he_inc(
                                         struct refcounted_he *he)
refcounted_he_new_pv

Подобно "refcounted_he_new_pvn", но принимает строку с нулевым завершением вместо пары "строка/длина".

struct refcounted_he *  refcounted_he_new_pv(
                                     struct refcounted_he *parent,
                                     const char *key, U32 hash,
                                     SV *value, U32 flags)
refcounted_he_new_pvn

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

Новый ключ задаётся keypv и keylen. Если flags имеет установленный бит REFCOUNTED_HE_KEY_UTF8, байты ключа интерпретируются как UTF-8, в противном случае как Latin-1. hash — предварительно вычисленный хэш строки ключа или ноль, если он не был предварительно вычислен.

value — скалярное значение для хранения по этому ключу. value копируется этой функцией, которая не берёт на себя ответственность за любую ссылку на него, и последующие изменения скаляра не будут отражены в значении, видимом в refcounted_he. Сложные типы скаляров не будут храниться с целостностью ссылок, а будут преобразованы в строки. value может быть либо null, либо &PL_sv_placeholder для указания того, что значение не должно быть связано с ключом; это, как и любое ненулевое значение, имеет приоритет над существованием значения для ключа в дальнейшей части цепочки.

parent указывает на остальную часть цепочки refcounted_he для присоединения к новой refcounted_he. Эта функция берёт на себя ответственность за одну ссылку на parent, и возвращает одну ссылку на новую refcounted_he.

struct refcounted_he *  refcounted_he_new_pvn(
                                     struct refcounted_he *parent,
                                     const char *keypv,
                                     STRLEN keylen, U32 hash,
                                     SV *value, U32 flags)
refcounted_he_new_pvs

Подобно "refcounted_he_new_pvn", но принимает строку в прямом виде вместо пары "строка/длина" и без предварительно вычисленного хэша.

struct refcounted_he *  refcounted_he_new_pvs(
                                     struct refcounted_he *parent,
                                     "key", SV *value, U32 flags)
refcounted_he_new_sv

Подобно "refcounted_he_new_pvn", но принимает скаляр Perl вместо пары "строка/длина".

struct refcounted_he *  refcounted_he_new_sv(
                                     struct refcounted_he *parent,
                                     SV *key, U32 hash, SV *value,
                                     U32 flags)

Ввод/Вывод

PL_last_in_gv

GV, который был последним использован для операции ввода файла. (<FH>)

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

GV*  PL_last_in_gv
PL_ofsgv

Глоб, содержащий разделитель выходных полей - *, в пространстве Perl.

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

GV*  PL_ofsgv
PL_rs

Разделитель записей ввода - $/ в пространстве Perl.

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

SV*  PL_rs
start_glob

ПРИМЕЧАНИЕ: start_glob является экспериментальным и может быть изменён или удалён без предварительного уведомления.

Функция, вызываемая do_readline для создания глобу (или выполнения глобу внутри perl на VMS). Этот код раньше был встроенным, но сейчас perl использует File::Glob. Этот инициализатор глобу используется только miniperl во время процесса сборки или когда определён PERL_EXTERNAL_GLOB. Перемещение его уменьшает размер pp_hot.c, что ускоряет perl.

ПРИМЕЧАНИЕ: start_glob должен быть явно вызван как Perl_start_glob с параметром aTHX_.

PerlIO*  Perl_start_glob(pTHX_ SV *tmpglob, IO *io)

Целочисленные значения конфигурации

В настоящее время в разделе «Целочисленные значения конфигурации» присутствуют только элементы публичного API.

Интерфейс лексического анализатора

validate_proto

ПРИМЕЧАНИЕ: validate_proto является экспериментальным и может быть изменён или удалён без предварительного уведомления.

Эта функция выполняет проверку синтаксиса прототипа proto. Если warn истинно, любые недопустимые символы или несовпадающие скобки приведут к предупреждениям illegalproto, заявляя, что они были обнаружены в прототипе для name.

Значение возврата - true если это допустимый прототип и false если нет, независимо от того, было ли warn равно true или false.

Обратите внимание, что NULL является допустимым proto и всегда будет возвращать true.

bool  validate_proto(SV *name, SV *proto, bool warn,
                     bool curstash)

Локали

В настоящее время в разделе «Локали» присутствуют только элементы публичного API.

Магия

magic_clearhint

Вызывается при удалении из %^H, записывает ключ в PL_compiling.cop_hints_hash.

int  magic_clearhint(SV* sv, MAGIC* mg)
magic_clearhints

Вызывается при очистке %^H, сбрасывает PL_compiling.cop_hints_hash.

int  magic_clearhints(SV* sv, MAGIC* mg)
magic_methcall

Вызывает магический метод (например, FETCH).

sv и mg — привязанный элемент и магия привязки.

meth — имя вызываемого метода.

argc — количество аргументов (кроме $self), передаваемых методу.

flags может быть:

G_DISCARD     invoke method with G_DISCARD flag and don't
              return a value
G_UNDEF_FILL  fill the stack with argc pointers to
              PL_sv_undef

Сами аргументы — любые значения после аргумента flags.

Возвращает SV (если есть) возвращённый методом или NULL при ошибке.

ПРИМЕЧАНИЕ: magic_methcall должен быть явно вызван как Perl_magic_methcall с параметром aTHX_.

SV*  Perl_magic_methcall(pTHX_ SV *sv, const MAGIC *mg, SV *meth,
                         U32 flags, U32 argc, ...)
magic_sethint

Вызывается при записи в %^H, записывает пару ключ/значение в PL_compiling.cop_hints_hash. Предполагается, что подсказки не хранят ничего, для чего потребовалась бы глубокая копия. Возможно, стоит предупреждать, если мы найдём ссылку.

int  magic_sethint(SV* sv, MAGIC* mg)
mg_localize

Скопировать часть магических свойств из существующего SV в новую локализацию этого SV. Магические свойства контейнера (например, %ENV, $1, tie) копируются, магические свойства значений (например, taint, pos).

Если setmagic ложно, то магические свойства нового (пустого) SV не будут вызваны. Обычно это означает, что вскоре последует присваивание (например, 'local $x = $y'), и оно обработает магические свойства.

void  mg_localize(SV* sv, SV* nsv, bool setmagic)

Управление памятью

В данный момент в разделе «Управление памятью» находятся только элементы публичного API.

MRO

mro_get_linear_isa_dfs

Возвращает линейное представление поиска в глубину (Depth-First Search) для @ISA заданного хранилища. Возвращаемое значение — AV* только для чтения. level должно быть равно 0 (используется во внутренней рекурсии функции).

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

AV*  mro_get_linear_isa_dfs(HV* stash, U32 level)
mro_isa_changed_in

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

void  mro_isa_changed_in(HV* stash)
mro_package_moved

Вызовите эту функцию, чтобы сообщить хранилищу, что оно было назначено в другое место в иерархии хранилищ. stash — хранилище, которому было назначено новое место. oldstash — хранилище, которое оно заменяет (если таковое имеется). gv — глобальная область, которой фактически назначено новое место.

Также можно вызвать эту функцию с нулевым первым аргументом, чтобы указать, что oldstash было удалено.

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

Она также устанавливает эффективные имена (HvENAME) для всех хранилищ по мере необходимости.

Если gv присутствует и отсутствует в таблице символов, функция просто возвращает значение. Эта проверка пропускается, если flags & 1.

void  mro_package_moved(HV * const stash, HV * const oldstash,
                        const GV * const gv, U32 flags)

Функции многократного вызова

В данный момент в разделе «Функции многократного вызова» находятся только элементы публичного API.

Функции для работы с числами

grok_atoUV

Разбор строки, поиск десятичного беззнакового целого числа.

На входе pv указывает на начало строки; valptr указывает на UV, который получит преобразованное значение, если найдено; endptr либо равен NULL, либо указывает на переменную, которая указывает на байт после точки в pv, с которой должна начинаться обработка этой функцией. Если endptr равен NULL, то предполагается, что pv завершается нулевым символом.

Возвращает FALSE, если pv не представляет собой действительное беззнаковое целое число (без ведущих нулей). В противном случае возвращает TRUE и устанавливает значение *valptr.

Если вы ограничите часть pv, которая анализируется этой функцией (передав ненулевой endptr), и начальные байты этой части образуют действительное значение, функция вернет TRUE, установив *endptr на байт после последней цифры значения. Но если ограничений нет, вся pv должна быть валидной, чтобы функция вернула TRUE. *endptr не меняется при возвращении FALSE;

Функция принимает только десятичные цифры '0'..'9'.

В отличие от atoi(3) или strtol(3), grok_atoUV не допускает необязательных ведущих пробелов, а также отрицательные значения. Если такие возможности требуются, вызывающий код должен их явно реализовать.

Обратите внимание, что эта функция возвращает FALSE для входов, которые вызывают переполнение UV или имеют ведущие нули. Таким образом, одиночный 0 принимается, но не 00 ни 01, 002, и т.д.

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

bool  grok_atoUV(const char* pv, UV* valptr, const char** endptr)
isinfnansv

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

bool  isinfnansv(SV *sv)

Построение Optree

В данный момент в разделе «Построение Optree» находятся только элементы публичного API.

Функции управления Optree

finalize_optree

Эта функция завершает построение Optree. Следует вызывать сразу после полного построения Optree. Она выполняет дополнительную проверку, которую нельзя выполнить в обычных функциях ck_xxx, и делает дерево потокобезопасным.

void  finalize_optree(OP* o)
newATTRSUB_x

Построение подпрограммы Perl, а также выполнение некоторых дополнительных задач.

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

Если block равно null, подпрограмма не будет иметь тела, и на данный момент её вызов будет ошибкой. Это представляет объявление подпрограммы вперёд, например, sub foo ($$);. Если block не равно null, оно предоставляет код тела Perl подпрограммы, который будет выполняться при вызове подпрограммы. Это тело включает в себя код распаковки аргументов, полученный из подпрограммы сигнатуры или аналогичного. Использование стека в коде должно соответствовать стеку, прикреплённому к PL_compcv. Ожидается, что код не будет содержать операторов leavesub или leavesublv; эта функция добавит такие операторы. block используется этой функцией и станет частью построенной подпрограммы.

proto определяет прототип подпрограммы, если он не задан как атрибут (см. ниже). Если proto равно null, то подпрограмма не будет иметь прототип. Если proto не равно null, оно должно указывать на оператор const, значение которого — строка, и подпрограмма будет иметь эту строку в качестве прототипа. Если прототип задан в качестве атрибута, атрибут имеет приоритет над proto, но в этом случае proto предпочтительно должно быть null. В любом случае, proto используется этой функцией.

attrs предоставляет атрибуты, которые нужно применить к подпрограмме. Несколько атрибутов действуют встроенным способом, применяясь к PL_compcv сразу при их обнаружении. Другие атрибуты собираются и присоединяются к подпрограмме через этот путь. attrs может быть null, чтобы не применять атрибуты, указывать на оператор const для одного атрибута или указывать на оператор list, где дочерние элементы, кроме pushmark, являются операторами const для одного или нескольких атрибутов. Каждый оператор const должен быть строкой, указывающей имя атрибута (возможно, с аргументами в скобках), таким образом, как атрибуты отображаются в исходном коде Perl. Атрибуты будут применены к подпрограмме этой функцией. attrs используется этой функцией.

Если o_is_gv ложно, а o равно null, подпрограмма будет анонимной. Если o_is_gv ложно, а o не равно null, то o_is_gv должно указывать на оператор const, который будет использован этой функцией, а его строковое значение задаёт имя подпрограммы. Имя может быть квалифицированным или неквалифицированным, и если оно неквалифицированное, то будет выбран стандартный стек каким-то образом. Если o_is_gv истинно, то o вообще не указывает на OP, а вместо этого является указателем на GV, по которому подпрограмма получит имя.

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

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

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

CV*  newATTRSUB_x(I32 floor, OP *o, OP *proto, OP *attrs,
                  OP *block, bool o_is_gv)
newXS_len_flags

Создать подпрограмму XS, выполнив также некоторые окружающие задачи.

Подпрограмма будет иметь точку входа subaddr. Она будет иметь прототип, указанный в строке с завершающим нулем proto, или без прототипа, если proto равно null. Строка прототипа копируется; вызывающий код может изменять предоставленную строку после этого. Если filename не равно null, оно должно быть именем файла с завершающим нулем, и подпрограмма будет иметь свой CvFILE соответственно. По умолчанию CvFILE устанавливается на указание на предоставленную строку, которая должна быть статической. Если у flags установлен бит XS_DYNAMIC_FILENAME, вместо этого будет взята копия строки.

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

Если name равно null, подпрограмма будет анонимной, и её CvGV будет ссылаться на __ANON__ глобал. Если name не равно null, подпрограмма будет иметь имя соответственно, ссылаясь на соответствующий глобал. name — это строка длиной len байта, представляющая имя символа без спецификатора, в UTF-8, если flags имеет бит SVf_UTF8, и в Latin-1 в противном случае. Имя может быть квалифицированным или неквалифицированным, при этом стек по умолчанию будет таким же, как и для gv_fetchpvn_flags. flags может содержать биты флагов, понятные gv_fetchpvn_flags с тем же значением, что и у них там, например, GV_ADDWARN. Символ всегда добавляется в стек, если необходимо, с семантикой GV_ADDMULTI.

Если уже существует подпрограмма с указанным именем, новая подпрограмма заменит существующую в глобле. Может быть сгенерировано предупреждение о переопределении. Если старая подпрограмма была CvCONST , решение о том, выдавать ли предупреждение, зависит от ожидания того, станет ли новая подпрограмма константой с аналогичным значением. Это ожидание определяется значением const_svp. (Обратите внимание, что вызов этой функции не делает новую подпрограмму CvCONST в любом случае; это остается на усмотрении вызывающего кода.) Если const_svp равно null, это означает, что новая подпрограмма не станет константой. Если const_svp не равно null, это означает, что новая подпрограмма станет константой, и оно указывает на SV*, который предоставляет постоянное значение, которым будет обладать подпрограмма.

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

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

CV *  newXS_len_flags(const char *name, STRLEN len,
                      XSUBADDR_t subaddr,
                      const char *const filename,
                      const char *const proto, SV **const_svp,
                      U32 flags)
optimize_optree

Эта функция применяет некоторые оптимизации к дереву optree сверху вниз. Она вызывается до оптимизатора peephole, который обрабатывает операции в порядке их выполнения. Обратите внимание, что finalize_optree() также выполняет поиск сверху вниз, но вызывается *после* оптимизатора peephole.

void  optimize_optree(OP* o)
traverse_op_tree

Возвращает следующую операцию в обходе дерева op по методу поиска в глубину, возвращая NULL, когда обход завершается.

Первый вызов должен предоставить корень дерева как top, так и o.

На данный момент она статическая, но в будущем может быть доступна в API.

OP*  traverse_op_tree(OP* top, OP* o)

Упаковка и распаковка

В настоящее время в разделе "Упаковка и распаковка" есть только общедоступные элементы API.

Структуры данных Pad

CX_CURPAD_SAVE

Сохранить текущий блок в структуре контекстного блока.

void  CX_CURPAD_SAVE(struct context)
CX_CURPAD_SV

Получить SV по смещению po в сохранённом текущем блоке в структуре контекстного блока (может использоваться как lvalue).

SV *  CX_CURPAD_SV(struct context, PADOFFSET po)
PAD_BASE_SV

Получить значение из слота po в базовом (DEPTH=1) блоке списка блоков.

SV *  PAD_BASE_SV(PADLIST padlist, PADOFFSET po)
PAD_CLONE_VARS

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

void  PAD_CLONE_VARS(PerlInterpreter *proto_perl,
                     CLONE_PARAMS* param)
PAD_COMPNAME_FLAGS

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

U32  PAD_COMPNAME_FLAGS(PADOFFSET po)
PAD_COMPNAME_GEN

Номер поколения имени по смещению po в текущем компилируемом блоке (lvalue).

STRLEN  PAD_COMPNAME_GEN(PADOFFSET po)
PAD_COMPNAME_GEN_set

Устанавливает номер поколения имени по смещению po в текущем блоке (lvalue) на gen.

STRLEN  PAD_COMPNAME_GEN_set(PADOFFSET po, int gen)
PAD_COMPNAME_OURSTASH

Возвращает стек, связанный с переменной our . Предполагается, что запись слота — это действительный лексический our.

HV *  PAD_COMPNAME_OURSTASH(PADOFFSET po)
PAD_COMPNAME_PV

Возвращает имя текущего компилируемого блока по смещению po. Предполагается, что запись слота действительна.

char *  PAD_COMPNAME_PV(PADOFFSET po)
PAD_COMPNAME_TYPE

Возвращает тип (стек) текущего имени компилируемого блока по смещению po. Должно быть действительное имя. Возвращает null, если не типизирован.

HV *  PAD_COMPNAME_TYPE(PADOFFSET po)
PadnameIsOUR

Является ли это переменной "our".

bool  PadnameIsOUR(PADNAME * pn)
PadnameIsSTATE

Является ли это переменной "state".

bool  PadnameIsSTATE(PADNAME * pn)
PadnameOURSTASH

Стек, в котором была объявлена эта переменная "our".

HV *  PadnameOURSTASH(PADNAME * pn)
PadnameOUTER

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

bool  PadnameOUTER(PADNAME * pn)
PadnameTYPE

Стек, связанный с типизированной лексической переменной. Возвращает хэш %Foo:: для my Foo $bar.

HV *  PadnameTYPE(PADNAME * pn)
PAD_RESTORE_LOCAL

Восстановить старый блок, сохранённый в локальной переменной opad с помощью PAD_SAVE_LOCAL()

void  PAD_RESTORE_LOCAL(PAD *opad)
PAD_SAVE_LOCAL

Сохранить текущий блок в локальную переменную opad, а затем сделать текущим блоком npad

void  PAD_SAVE_LOCAL(PAD *opad, PAD *npad)
PAD_SAVE_SETNULLPAD

Сохранить текущий блок, а затем установить его в null.

void  PAD_SAVE_SETNULLPAD()
PAD_SETSV

Установить слот по смещению po в текущем блоке на sv

SV *  PAD_SETSV(PADOFFSET po, SV* sv)
PAD_SET_CUR

Установить текущим блоком блок n в списке блоков, сохранив предыдущий текущий блок. Н.Б. в настоящее время эта макрокоманда расширяется до строки, слишком длинной для некоторых компиляторов, поэтому лучше заменить её на

SAVECOMPPAD();
PAD_SET_CUR_NOSAVE(padlist,n);
void  PAD_SET_CUR(PADLIST padlist, I32 n)
PAD_SET_CUR_NOSAVE

как PAD_SET_CUR, но без сохранения

void  PAD_SET_CUR_NOSAVE(PADLIST padlist, I32 n)
PAD_SV

Получить значение по смещению po в текущем блоке

SV *  PAD_SV(PADOFFSET po)
PAD_SVl

Легковесная и lvalue-версия PAD_SV. Получить или установить значение по смещению po в текущем блоке. В отличие от PAD_SV, не выводит диагностические сообщения при использовании -DX. Для внутреннего использования только.

SV *  PAD_SVl(PADOFFSET po)
SAVECLEARSV

Очистить значение указанного блока при выходе из области видимости. (т.е. временное действие my)

void  SAVECLEARSV(SV **svp)
SAVECOMPPAD

сохранить PL_comppad и PL_curpad

void  SAVECOMPPAD()
SAVEPADSV

Сохранить слот блока (используется для восстановления после итерации)

void  SAVEPADSV(PADOFFSET po)

Доступ к паролям и группам

В настоящее время в разделе "Доступ к паролям и группам" есть только общедоступные элементы API.

Пути к системным командам

В настоящее время в разделе "Пути к системным командам" есть только общедоступные элементы API.

Информация о прототипах

В настоящее время в разделе "Информация о прототипах" есть только общедоступные элементы API.

Функции REGEXP

В настоящее время в разделе "Функции REGEXP" есть только общедоступные элементы API.

Сигналы

В настоящее время в разделе "Сигналы" есть только общедоступные элементы API.

Настройка сайта

В настоящее время в разделе "Настройка сайта" есть только общедоступные элементы API.

Значения конфигурации сокетов

В настоящее время в значениях конфигурации Sockets находятся только элементы публичного API.

Фильтры источников

В настоящее время в фильтрах источников находятся только элементы публичного API.

Макросы манипуляции стеком

djSP

Объявить только SP. Это фактически идентично dSP, и объявляет локальную копию указателя стека Perl, доступную через макрос SP. См. "SP" in perlapi. (Доступно для обратной совместимости с исходным кодом со старой моделью потоков (Perl 5.005)).

djSP();
LVRET

Истина, если этот оператор будет возвращаемым значением подпрограммы lvalue

Обработка строк

delimcpy_no_escape

Скопировать буфер источника в буфер назначения, остановившись на (но не включая) первой встреченной в источнике разделительной байтовой последовательности delim. Источник — байты между from и from_end - 1. Аналогично, dest — to до to_end.

Количество скопированных байтов записывается в *retlen.

Возвращает положение delim в буфере from, но если такая последовательность не встречается до from_end, то возвращается from_end, и весь буфер from .. from_end - 1 копируется.

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

Ошибка возникает, если буфер назначения недостаточно велик, чтобы вместить всё, что должно быть скопировано. В этом случае значение, большее, чем to_end - to, записывается в *retlen, и как можно больше байтов источника записывается в назначение. Отсутствие места для байта безопасности NUL не считается ошибкой.

char*  delimcpy_no_escape(char* to, const char* to_end,
                          const char* from, const char* from_end,
                          const int delim, I32* retlen)
quadmath_format_needed

quadmath_format_needed() возвращает true, если строка format, кажется, содержит по крайней мере один спецификатор формата %[efgaEFGA], не начинающийся с префикса Q, или возвращает false в противном случае.

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

Если возвращается true, эти аргументы должны в теории обрабатываться с помощью quadmath_snprintf(), но в случае, если имеется более одного такого спецификатора формата (см. "quadmath_format_valid"), и если имеется что-либо помимо этого (даже один байт), они не могут быть обработаны, потому что quadmath_snprintf() очень строг, принимая только один спецификатор формата и ничего более. В этом случае код, вероятно, должен завершиться ошибкой.

bool  quadmath_format_needed(const char* format)
quadmath_format_valid

quadmath_snprintf() очень строг по отношению к строке format и завершится ошибкой, вернув -1, если формат неверный. Он принимает ровно один спецификатор формата.

quadmath_format_valid() проверяет, что предполагаемый одиночный спецификатор выглядит разумно: начинается с %, содержит только один %, заканчивается на [efgaEFGA], и имеет Q перед ним. Это не полная "проверка синтаксиса printf", а только основы.

Возвращает true, если формат корректен, и false, если нет.

См. также "quadmath_format_needed".

bool  quadmath_format_valid(const char* format)

Флаги SV

SVt_INVLIST

Флаг типа для скаляров. См. "svtype" в perlapi.

Обработка SV

PL_Sv

Временный SV для любых временных нужд. В основном используется в качестве резервного варианта макросами на платформах, где "PERL_USE_GCC_BRACE_GROUPS" в perlapi> недоступен и которые в противном случае оценивали бы свой параметр SV более одного раза.

PL_Sv
sv_2bool

Этот макрос используется только sv_true() или его макро-эквивалентом, и только если аргумент последнего не является SvPOK, SvIOK или SvNOK. Вызывает sv_2bool_flags с флагом SV_GMAGIC.

bool  sv_2bool(SV *const sv)
sv_2bool_flags

Эта функция используется только sv_true() и друзьями, и только если аргумент последнего не является SvPOK, SvIOK или SvNOK. Если флаги содержат SV_GMAGIC, то сначала выполняется mg_get().

bool  sv_2bool_flags(SV *sv, I32 flags)
sv_2num

ПРИМЕЧАНИЕ: sv_2num является экспериментальным и может быть изменён или удалён без предварительного уведомления.

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

SV*  sv_2num(SV *const sv)
sv_2pvbyte_nolen

Возвращает указатель на байтовое представление SV. Может привести к понижению SV с UTF-8 в качестве побочного эффекта.

Обычно обращается через макрос SvPVbyte_nolen.

char*  sv_2pvbyte_nolen(SV* sv)
sv_2pvutf8_nolen

Возвращает указатель на представление SV в кодировке UTF-8. Может привести к повышению SV до UTF-8 в качестве побочного эффекта.

Обычно обращается через макрос SvPVutf8_nolen.

char*  sv_2pvutf8_nolen(SV* sv)
sv_2pv_flags

Возвращает указатель на строковое значение SV и устанавливает *lp на его длину. Если в флагах установлен бит SV_GMAGIC, то сначала выполняется mg_get(). Преобразует sv в строку при необходимости. Обычно вызывается через макрос SvPV_flags.

sv_2pv() и sv_2pv_nomg обычно заканчиваются здесь.

char*  sv_2pv_flags(SV *const sv, STRLEN *const lp,
                    const U32 flags)
sv_2pv_nolen

Аналогично sv_2pv(), но не возвращает длину. Вы обычно должны использовать макрос-обёртку SvPV_nolen(sv).

char*  sv_2pv_nolen(SV* sv)
sv_add_arena

Принимая блок памяти, связывает его с началом списка аренов и разбивает его на список свободных SV.

void  sv_add_arena(char *const ptr, const U32 size,
                   const U32 flags)
sv_clean_all

Уменьшает refcnt каждого оставшегося SV, что может вызвать очистку. Возможно, эта функция должна вызываться несколько раз, чтобы освободить SV, которые находятся в сложных взаимоссылочных иерархиях.

I32  sv_clean_all()
sv_clean_objs

Попытка уничтожить все объекты, ещё не освобождённые.

void  sv_clean_objs()
sv_free_arenas

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

void  sv_free_arenas()
sv_grow

Расширяет буфер символов в SV. При необходимости использует sv_unref и повышает SV до SVt_PV. Возвращает указатель на буфер символов. Используйте обёртку SvGROW вместо этого.

char*  sv_grow(SV *const sv, STRLEN newlen)
sv_iv

DEPRECATED! Планируется удалить sv_iv из будущей версии Perl. Не используйте его в новом коде; удалите из существующего кода.

Внутренняя реализация макроса SvIVx для компиляторов, которые не могут справиться со сложными выражениями макросов. Всегда используйте макрос вместо этого.

IV  sv_iv(SV* sv)
sv_newref

Увеличить счётчик ссылок SV. Используйте обёртку SvREFCNT_inc() вместо этого.

SV*  sv_newref(SV *const sv)
sv_nv

DEPRECATED! Планируется удалить sv_nv из будущей версии Perl. Не используйте его в новом коде; удалите из существующего кода.

Внутренняя реализация макроса SvNVx для компиляторов, которые не могут справиться со сложными выражениями макросов. Всегда используйте макрос вместо этого.

NV  sv_nv(SV* sv)
sv_pv

Используйте макрос SvPV_nolen вместо этого

char*  sv_pv(SV *sv)
sv_pvbyte

Используйте SvPVbyte_nolen вместо этого.

char*  sv_pvbyte(SV *sv)
sv_pvbyten

DEPRECATED! Планируется удалить sv_pvbyten из будущей версии Perl. Не используйте его в новом коде; удалите из существующего кода.

Внутренняя реализация макроса SvPVbyte для компиляторов, которые не могут справиться со сложными выражениями макросов. Всегда используйте макрос вместо этого.

char*  sv_pvbyten(SV *sv, STRLEN *lp)
sv_pvbyten_force

Бэкенд для макроса SvPVbytex_force. Всегда используйте макрос вместо этого. Если SV нельзя понизить до UTF-8, возникает ошибка.

char*  sv_pvbyten_force(SV *const sv, STRLEN *const lp)
sv_pvn

DEPRECATED! Планируется удалить sv_pvn из будущей версии Perl. Не используйте его в новом коде; удалите из существующего кода.

Внутренняя реализация макроса SvPV для компиляторов, которые не могут справиться со сложными выражениями макросов. Всегда используйте макрос вместо этого.

char*  sv_pvn(SV *sv, STRLEN *lp)
sv_pvn_force

Получить осмысленную строку из SV каким-либо способом. Внутренняя реализация макроса SvPV_force для компиляторов, которые не могут справиться со сложными выражениями макросов. Всегда используйте макрос вместо этого.

char*  sv_pvn_force(SV* sv, STRLEN* lp)
sv_pvutf8

Используйте макрос SvPVutf8_nolen вместо этого

char*  sv_pvutf8(SV *sv)
sv_pvutf8n

DEPRECATED! Планируется удалить sv_pvutf8n из будущей версии Perl. Не используйте его в новом коде; удалите из существующего кода.

Внутренняя реализация макроса SvPVutf8 для компиляторов, которые не могут справиться со сложными выражениями макросов. Всегда используйте макрос вместо этого.

char*  sv_pvutf8n(SV *sv, STRLEN *lp)
END_OF_DOCUMENT_MARKER
sv_pvutf8n_force

Бэкенд для макроса SvPVutf8x_force. Всегда используйте макрос вместо него.

char*  sv_pvutf8n_force(SV *const sv, STRLEN *const lp)
sv_taint

Пометить SV как затронутый. Используйте SvTAINTED_on вместо этого.

void  sv_taint(SV* sv)
sv_tainted

Проверить SV на наличие затронутых данных. Используйте SvTAINTED вместо этого.

bool  sv_tainted(SV *const sv)
SvTHINKFIRST

Быстрая проверка флага, чтобы определить, нужно ли передавать sv в sv_force_normal, чтобы его "понизить" перед тем, как SvIVX или SvPVX смогут быть изменены напрямую.

Например, если ваш скаляр — ссылка, и вы хотите изменить слот SvIVX, вы не можете просто сделать SvROK_off, так как это приведет к утечке референта.

Это используется внутри различных функций модификации sv, таких как sv_setsv, sv_setiv и sv_pvn_force.

Один случай, который эта функция не обрабатывает, — это gv без установленного SvFAKE. После

if (SvTHINKFIRST(gv)) sv_force_normal(gv);

он по-прежнему будет gv.

SvTHINKFIRST иногда выдаёт ложные срабатывания. В таких случаях sv_force_normal ничего не делает.

U32  SvTHINKFIRST(SV *sv)
sv_true

Возвращает true, если SV имеет значение true по правилам Perl. Используйте макрос SvTRUE, который может вызвать sv_true() или использовать встроенную версию.

I32  sv_true(SV *const sv)
sv_untaint

Снять метку затронутости с SV. Используйте SvTAINTED_off вместо этого.

void  sv_untaint(SV *const sv)
sv_uv

DEPRECATED! Планируется удалить sv_uv из будущей версии Perl. Не используйте её в новом коде; удалите из существующего.

Приватная реализация макроса SvUVx для компиляторов, которые не могут справиться со сложными выражениями макроса. Всегда используйте макрос вместо него.

UV  sv_uv(SV* sv)

Время

В данный момент в Time находятся только элементы публичного API.

Имена типов

В данный момент в разделе "Имена типов" находятся только элементы публичного API.

Поддержка Unicode

bytes_from_utf8_loc

ПРИМЕЧАНИЕ: bytes_from_utf8_loc является экспериментальным и может быть изменён или удалён без предварительного уведомления.

Подобно "bytes_from_utf8" in perlapi(), но принимает дополнительный параметр — указатель, куда сохранить позицию первого символа в "s", который нельзя преобразовать в не-UTF8.

Если этот параметр равен NULL, эта функция ведет себя идентично bytes_from_utf8.

В противном случае, если *is_utf8p равно 0 на входе, функция ведет себя идентично bytes_from_utf8, кроме того, она также устанавливает *first_non_downgradable в NULL.

В противном случае функция возвращает только что созданную строку, завершающуюся NUL, содержащую не-UTF8 эквивалент преобразуемой первой части "s". *lenp устанавливается в её длину, не включая завершающий NUL . Если вся входная строка была преобразована, *is_utf8p устанавливается в ложное значение, а *first_non_downgradable устанавливается в NULL.

В противном случае, *first_non_downgradable устанавливается на первый байт первого символа в исходной строке, который не был преобразован. *is_utf8p не изменяется. Обратите внимание, что новая строка может иметь длину 0.

Другой способ взглянуть на это: если *first_non_downgradable не равно NULL и *is_utf8p равно TRUE, эта функция начинает с начала "s" и преобразует как можно больше символов в нём, останавливаясь на первом, который нельзя преобразовать в не-UTF-8. *first_non_downgradable устанавливается на него. Функция возвращает преобразованную часть в только что созданной строке, завершающейся NUL, и *lenp устанавливается на её длину, не включая завершающий NUL . Если первый символ исходной строки не был преобразован, *lenp будет 0, а новая строка будет содержать только один NUL . Если вся входная строка была преобразована, *is_utf8p устанавливается в FALSE, а *first_non_downgradable устанавливается в NULL.

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

U8*  bytes_from_utf8_loc(const U8 *s, STRLEN *lenp,
                         bool *is_utf8p,
                         const U8 ** first_unconverted)
find_uninit_var

ПРИМЕЧАНИЕ: find_uninit_var является экспериментальным и может быть изменён или удалён без предварительного уведомления.

Найти имя неопределённой переменной (если она есть), которая вызвала у оператора предупреждение "Использование неинициализированного значения". Если соответствие истинно, возвращать имя только если его значение совпадает с uninit_sv. Грубо говоря, если унарный оператор (например, OP_COS) генерирует предупреждение, то обращение к непосредственному потомку оператора может дать OP_PADSV или OP_GV, которые указывают имя неопределённой переменной. С другой стороны, с OP_ADD есть два ветвления, поэтому мы выводим имя переменной только если получаем точное совпадение. desc_p указывает на указатель строки, содержащий описание оператора. Он может быть обновлён при необходимости.

Имя возвращается как временный SV.

Предполагается, что PL_op является оператором, первоначально вызвавшим ошибку, и что PL_comppad/PL_curpad указывает на текущий выполняемый блок.

SV*  find_uninit_var(const OP *const obase,
                     const SV *const uninit_sv, bool match,
                     const char **desc_p)
isSCRIPT_RUN

Возвращает булево значение, указывающее, образует ли последовательность байтов от s до, но не включая send, "запуск скрипта". utf8_target равно TRUE, если последовательность, начинающаяся с s, должна обрабатываться как UTF-8. Точнее, за исключением двух вырожденных случаев, описанных ниже, эта функция возвращает TRUE, если все кодовые точки в ней взяты из любой комбинации трёх "скриптов", заданных свойством "Script Extensions" Unicode: Common, Inherited и, возможно, ещё одного. Кроме того, все десятичные цифры должны быть взяты из одной последовательной группы из 10.

Например, если все символы в последовательности — греческие, или Common, или Inherited, эта функция вернёт TRUE, при условии, что все десятичные цифры в ней взяты из одной группы цифр в Common. (Это цифры ASCII "0".."9" и дополнительно группа полных форм этих цифр, а также несколько других, используемых в математической нотации.) Для скриптов (в отличие от греческого), у которых определены собственные цифры, функция примет либо цифры из этого набора, либо из наборов цифр Common, но не комбинацию обоих. Некоторые скрипты, такие как арабский, имеют более одного набора цифр. Все цифры должны быть взяты из одного набора, чтобы функция вернула TRUE.

*ret_script, если ret_script не NULL, при возврате TRUE будет содержать найденный скрипт, используя тип SCX_enum. Его значение будет SCX_INVALID, если функция вернёт FALSE.

Если последовательность пуста, возвращается TRUE, но *ret_script (если запрошено) будет SCX_INVALID.

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

Возвращённый скрипт будет SCX_Inherited , если все кодовые точки в нём взяты из скрипта Inherited.

В противном случае, возвращаемый скрипт будет SCX_Common , если все кодовые точки в нём взяты из скриптов Inherited или Common.

bool  isSCRIPT_RUN(const U8 *s, const U8 *send,
                   const bool utf8_target)
is_utf8_non_invariant_string

Возвращает TRUE, если "is_utf8_invariant_string" в perlapi возвращает FALSE для первых len байтов строки s, но они тем не менее являются допустимым Perl-расширенным UTF-8; в противном случае возвращает FALSE.

Возврат TRUE означает, что по крайней мере одна кодовая точка, представленная последовательностью, либо является широким символом, не представимым одним байтом, либо её представление отличается в зависимости от того, закодирована ли последовательность в UTF-8 или нет.

См. также "is_utf8_invariant_string" in perlapi, "is_utf8_string" in perlapi

bool  is_utf8_non_invariant_string(const U8* const s, STRLEN len)
report_uninit

Вывод соответствующего предупреждения "Использование неинициализированной переменной".

void  report_uninit(const SV *uninit_sv)
utf8n_to_uvuni

DEPRECATED! Планируется удалить utf8n_to_uvuni из будущей версии Perl. Не используйте её в новом коде; удалите из существующего.

Вместо этого используйте "utf8_to_uvchr_buf" в perlapi или в редких случаях "utf8n_to_uvchr" в perlapi.

Эта функция была полезна для кода, который хотел обрабатывать как EBCDIC, так и ASCII платформы с Unicode свойствами, но начиная с Perl v5.20, различия между платформами в основном скрыты от большинства кода, поэтому эта функция вряд ли будет тем, что вам нужно. Если вам нужна именно эта функциональность, используйте вместо этого NATIVE_TO_UNI(utf8_to_uvchr_buf(...)) или NATIVE_TO_UNI(utf8n_to_uvchr(...)).

UV  utf8n_to_uvuni(const U8 *s, STRLEN curlen, STRLEN *retlen,
                   U32 flags)
utf8_to_uvuni

DEPRECATED! Планируется удалить utf8_to_uvuni из будущей версии Perl. Не используйте её в новом коде; удалите из существующего кода.

Возвращает код Юникода первого символа в строке s, которая предполагается закодированной в UTF-8; retlen будет установлено в длину этого символа в байтах.

Обнаружение некоторых, но не всех, некорректных кодировок UTF-8, а, в некоторых случаях, некорректный ввод может привести к чтению за пределами буфера ввода, что является одной из причин устаревания этой функции. Другая причина в том, что в чрезвычайно ограниченных случаях следует учитывать разницу между кодами Юникода и кодами локальной кодировки. Обратитесь к "utf8_to_uvuni_buf" для альтернатив.

Если s указывает на одну из обнаруженных некорректных кодировок, и включены предупреждения UTF8, возвращается ноль, а *retlen устанавливается (если retlen не указывает на NULL) в -1. Если эти предупреждения выключены, вычисляемое значение, если оно определено (или ЗАМЕЩАЮЩИЙ СИМВОЛ ЮНИКОДА, если нет), возвращается без особых уведомлений, и *retlen устанавливается (если retlen не NULL), так что (s + *retlen) является следующей возможной позицией в s, которая может начинаться с правильного символа. См. "utf8n_to_uvchr" в perlapi для подробностей о возвращаемом ЗАМЕЩАЮЩЕМ СИМВОЛЕ ЮНИКОДА.

UV  utf8_to_uvuni(const U8 *s, STRLEN *retlen)
utf8_to_uvuni_buf

DEPRECATED! Планируется удалить utf8_to_uvuni_buf из будущей версии Perl. Не используйте её в новом коде; удалите из существующего кода.

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

Возвращает код Юникода (не локальной кодировки) первого символа в строке s, которая предполагается закодированной в UTF-8; send указывает на позицию, следующую за концом s. retlen будет установлено в длину этого символа в байтах.

Если s не указывает на правильный символ UTF-8, и включены предупреждения UTF8, возвращается ноль, а *retlen устанавливается (если retlen не NULL) в -1. Если эти предупреждения выключены, вычисляемое значение, если оно определено (или ЗАМЕЩАЮЩИЙ СИМВОЛ ЮНИКОДА, если нет), возвращается без особых уведомлений, а *retlen устанавливается (если retlen не NULL), так что (s + *retlen) указывает на следующую возможную позицию в s, которая может начинаться с правильного символа. См. "utf8n_to_uvchr" в perlapi для подробностей о возвращаемом ЗАМЕЩАЮЩЕМ СИМВОЛЕ ЮНИКОДА.

UV  utf8_to_uvuni_buf(const U8 *s, const U8 *send, STRLEN *retlen)
uvoffuni_to_utf8_flags

ЭТУ ФУНКЦИЮ СЛЕДУЕТ ИСПОЛЬЗОВАТЬ ТОЛЬКО В ОЧЕНЬ СПЕЦИАЛЬНЫХ СЛУЧАЯХ. Вместо этого Почти весь код должен использовать "uvchr_to_utf8" в perlapi или "uvchr_to_utf8_flags" в perlapi.

Эта функция подобна им, но входные данные — это строгий код Юникода (в отличие от кода локальной кодировки). Только в очень редких случаях код не должен использовать код локальной кодировки.

Для подробностей см. описание "uvchr_to_utf8_flags" в perlapi.

U8*  uvoffuni_to_utf8_flags(U8 *d, UV uv, const UV flags)
uvuni_to_utf8_flags

DEPRECATED! Планируется удалить uvuni_to_utf8_flags из будущей версии Perl. Не используйте её в новом коде; удалите из существующего кода.

Вместо этого, почти наверняка, вам нужно использовать "uvchr_to_utf8" в perlapi или "uvchr_to_utf8_flags" в perlapi.

Эта функция — устаревшая синоним "uvoffuni_to_utf8_flags", которая сама по себе, хотя и не устаревшая, должна использоваться только в отдельных случаях. Эти функции были полезны для кода, который хотел обрабатывать как EBCDIC, так и ASCII платформы с свойствами Юникода, но начиная с Perl v5.20, различия между платформами в основном скрыты от большинства кодов, поэтому эта функция вряд ли будет тем, что вам нужно.

U8*  uvuni_to_utf8_flags(U8 *d, UV uv, UV flags)
valid_utf8_to_uvchr

Подобно "utf8_to_uvchr_buf" in perlapi, но следует вызывать только тогда, когда известно, что следующий символ в строке UTF-8 s имеет правильную форму (например, он проходит "isUTF8_CHAR" in perlapi. Допускаются суррогаты, непечатные символы и символы, не относящиеся к Юникоду.

UV  valid_utf8_to_uvchr(const U8 *s, STRLEN *retlen)
variant_under_utf8_count

Эта функция анализирует последовательность байтов между s и e, которые предполагаются закодированными в ASCII/Latin1, и возвращает количество байтов, которые изменились бы, если бы строка была преобразована в UTF-8. Из-за особенностей UTF-8 каждый из них занимал бы два байта вместо одного в исходной строке. Таким образом, эта функция возвращает точное количество байтов, на которое увеличится строка при переводе в UTF-8.

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

Эта функция является внутренней для Perl, потому что khw считает, что любой XS-код, который захочет её использовать, вероятно, работает слишком близко к внутренностям. Предоставление валидного примера использования может изменить это.

См. также "is_utf8_invariant_string" in perlapi и "is_utf8_invariant_string_loc" in perlapi,

Size_t  variant_under_utf8_count(const U8* const s,
                                 const U8* const e)

Функции-утилиты

В Функциях-утилитах пока представлены только общедоступные элементы API.

Версионирование

В Версионировании пока представлены только общедоступные элементы API.

Предупреждения и завершения работы

PL_dowarn

C-переменная, которая примерно соответствует предупреждению Perl's $^W. Однако, $^W обрабатывается как булево значение, тогда как PL_dowarn — это набор флаговых битов.

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

U8  PL_dowarn

XS

В XS пока представлены только общедоступные элементы API.

Неописанные элементы

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

abort_execution
add_cp_to_invlist
_add_range_to_invlist
alloc_LOGOP
allocmy
amagic_cmp
amagic_cmp_desc
amagic_cmp_locale
amagic_cmp_locale_desc
amagic_is_enabled
amagic_i_ncmp
amagic_i_ncmp_desc
amagic_ncmp
amagic_ncmp_desc
append_utf8_from_native_byte
apply
ASCII_TO_NEED
av_arylen_p
av_extend_guts
av_iter_p
av_nonelem
av_reify
bind_match
boot_core_mro
boot_core_PerlIO
boot_core_UNIVERSAL
_byte_dump_string
cando
cast_i32
cast_iv
cast_ulong
cast_uv
check_utf8_print
ck_anoncode
ck_backtick
ck_bitop
ck_cmp
ck_concat
ck_defined
ck_delete
ck_each
ck_entersub_args_core
ck_eof
ck_eval
ck_exec
ck_exists
ck_ftst
ck_fun
ck_glob
ck_grep
ck_index
ck_isa
ck_join
ck_length
ck_lfun
ck_listiob
ck_match
ck_method
ck_null
ck_open
ck_prototype
ck_readline
ck_refassign
ck_repeat
ck_require
ck_return
ck_rfun
ck_rvconst
ck_sassign
ck_select
ck_shift
ck_smartmatch
ck_sort
ck_spair
ck_split
ck_stringify
ck_subr
ck_substr
ck_svconst
ck_tell
ck_trunc
ck_trycatch
ckwarn
ckwarn_d
closest_cop
cmpchain_extend
cmpchain_finish
cmpchain_start
cmp_desc
cmp_locale_desc
cntrl_to_mnemonic
coresub_op
create_eval_scope
croak_caller
croak_memory_wrap
croak_no_mem
croak_popstack
csighandler
csighandler1
csighandler3
current_re_engine
custom_op_get_field
cv_ckproto_len_flags
cv_clone_into
cv_const_sv_or_av
cvgv_from_hek
cvgv_set
cvstash_set
cv_undef_flags
cx_dump
cx_dup
cxinc
cx_popblock
cx_popeval
cx_popformat
cx_popgiven
cx_poploop
cx_popsub
cx_popsub_args
cx_popsub_common
cx_popwhen
cx_pushblock
cx_pusheval
cx_pushformat
cx_pushgiven
cx_pushloop_for
cx_pushloop_plain
cx_pushsub
cx_pushtry
cx_pushwhen
cx_topblock
deb_stack_all
defelem_target
delete_eval_scope
despatch_signals
die_unwind
do_aexec
do_aexec5
do_eof
does_utf8_overflow
do_exec
do_exec3
dofile
do_gvgv_dump
do_gv_dump
do_hv_dump
doing_taint
do_ipcctl
do_ipcget
do_magic_dump
do_msgrcv
do_msgsnd
do_ncmp
do_open6
do_open_raw
do_op_dump
do_pmop_dump
do_print
do_readline
do_seek
do_semop
do_shmio
do_sv_dump
do_sysseek
do_tell
do_trans
do_uniprop_match
do_vecget
do_vecset
do_vop
drand48_init_r
drand48_r
dtrace_probe_call
dtrace_probe_load
dtrace_probe_op
dtrace_probe_phase
dump_all_perl
dump_indent
dump_packsubs_perl
dump_sub_perl
dump_sv_child
dump_vindent
dup_warnings
emulate_cop_io
find_first_differing_byte_pos
find_lexical_cv
find_runcv_where
find_script
foldEQ_latin1
foldEQ_latin1_s2_folded
foldEQ_utf8_flags
_force_out_malformed_utf8_message
form_alien_digit_msg
form_cp_too_large_msg
free_tied_hv_pool
free_tmps
get_and_check_backslash_N_name
get_db_sub
get_debug_opts
get_deprecated_property_msg
getenv_len
get_hash_seed
get_invlist_iter_addr
get_invlist_offset_addr
get_invlist_previous_index_addr
get_no_modify
get_opargs
get_prop_definition
get_prop_values
get_regclass_nonbitmap_data
get_regex_charset_name
get_re_arg
get_re_gclass_nonbitmap_data
gimme_V
grok_bin_oct_hex
grok_bslash_c
grok_bslash_o
grok_bslash_x
gv_check
gv_fetchmeth_internal
gv_override
gv_setref
gv_stashpvn_internal
hfree_next_entry
hv_backreferences_p
hv_common
hv_common_key_len
hv_kill_backrefs
hv_placeholders_p
hv_pushkv
hv_undef_flags
init_argv_symbols
init_constants
init_dbargs
init_debugger
init_i18nl10n
init_i18nl14n
init_named_cv
init_uniprops
_inverse_folds
invert
invlist_array
invlist_clear
invlist_clone
invlist_contents
_invlistEQ
invlist_extend
invlist_highest
invlist_is_iterating
invlist_iterfinish
invlist_iterinit
invlist_iternext
invlist_lowest
invlist_max
invlist_previous_index
invlist_set_len
invlist_set_previous_index
invlist_trim
_invlist_array_init
_invlist_contains_cp
_invlist_dump
_invlist_intersection
_invlist_intersection_maybe_complement_2nd
_invlist_invert
_invlist_len
_invlist_search
_invlist_subtract
_invlist_union
_invlist_union_maybe_complement_2nd
invmap_dump
io_close
isFF_OVERLONG
is_grapheme
is_invlist
is_utf8_char_helper
is_utf8_common
is_utf8_overlong_given_start_byte_ok
_is_cur_LC_category_utf8
_is_in_locale_category
_is_uni_FOO
_is_uni_perl_idcont
_is_uni_perl_idstart
_is_utf8_FOO
_is_utf8_perl_idcont
_is_utf8_perl_idstart
jmaybe
keyword
keyword_plugin_standard
list
load_charnames
localize
lossless_NV_to_IV
magic_cleararylen_p
magic_clearenv
magic_clearisa
magic_clearpack
magic_clearsig
magic_clear_all_env
magic_copycallchecker
magic_existspack

АВТОРЫ

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

См. также

config.h, perlapi, perlapio, perlcall, perlclib, perlfilter, perlguts, perlinterp, perliol, perlmroapi, perlreguts, perlxs

© 1993–2021 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.34.0/perlintern

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API