perlintern
СОДЕРЖАНИЕ
- ИМЯ
- ОПИСАНИЕ
- Временные метки области видимости на этапе компиляции
- Пользовательские операторы
- Функции манипулирования CV
- Счетчики ссылок CV и CvOUTSIDE
- Функции встраивания
- Функции GV
- Функции манипулирования хешами
- Функции ввода/вывода
- Интерфейс лексера
- Магические функции
- Разнообразные функции
- Функции MRO
- Функции манипулирования Optree
- Структуры данных Pad
- Переменные на уровне интерпретатора
- Макросы манипулирования стеком
- Выделение памяти тела SV
- Функции манипулирования SV
- Поддержка Unicode
- Недокументированные функции
- АВТОРЫ
- СМОТРИТЕ ТАКЖЕ
ИМЯ
perlintern - сгенерированная документация по чисто внутренним функциям Perl
ОПИСАНИЕ
Этот файл содержит автоматически сгенерированную документацию функций Perl-интерпретатора, которые документированы с использованием внутреннего формата документации Perl, но не помечены как часть API Perl. Другими словами, они не предназначены для использования в расширениях!
Временные метки области видимости на этапе компиляции
- BhkENTRY
-
ПРИМЕЧАНИЕ: эта функция является экспериментальной и может быть изменена или удалена без предварительного уведомления.
Возвращает запись из структуры BHK.
which— это препроцессорный токен, указывающий, какую запись вернуть. Если соответствующий флаг не установлен, возвращаетсяNULL. Тип возвращаемого значения зависит от запрошенной записи.void * BhkENTRY(BHK *hk, which) - BhkFLAGS
-
ПРИМЕЧАНИЕ: эта функция является экспериментальной и может быть изменена или удалена без предварительного уведомления.
Возвращает флаги BHK.
U32 BhkFLAGS(BHK *hk) - CALL_BLOCK_HOOKS
-
ПРИМЕЧАНИЕ: эта функция является экспериментальной и может быть изменена или удалена без предварительного уведомления.
Вызывает все зарегистрированные метки блоков для типа
which.which— это препроцессорный токен; типargзависит отwhich.void CALL_BLOCK_HOOKS(which, arg)
Пользовательские операторы
- 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
- docatch
-
Проверяет случаи 0 или 3 в cur_env.je_ret, используется только внутри контекста eval.
0 используется для продолжения внутри eval,
3 используется для обработки die, пойманного внутренним eval - продолжение внутреннего цикла.
См. cop.h: je_mustcatch, если установлено в TRUE на любом уровне выполнения, операции eval должны создать локальный jmpenv для обработки ловушек исключений.
OP* docatch(Perl_ppaddr_t firstpp)
Счетчики ссылок CV и CvOUTSIDE
- 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)
Функции встраивания
- cv_dump
-
вывод содержимого CV
void cv_dump(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
-
Очистка в конце области видимости во время компиляции: установить максимальное значение seq для лексических блоков в этой области видимости и предупредить о любых лексических блоках, которые никогда не были введены.
void 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_swipe
-
Отказаться от tmp в текущем блоке по смещению
poи заменить его новым.void pad_swipe(PADOFFSET po, bool refadjust)
GV Functions
- gv_try_downgrade
-
ПРИМЕЧАНИЕ: эта функция экспериментальная и может быть изменена или удалена без предварительного уведомления.
Если типглоб
gvможно выразить более кратко, поместив вместо него что-то другое, кроме реального GV, в стэш, замените его оптимизированной формой. Основные требования заключаются в том, чтоgvявляется реальным типглобом, достаточно обычным и ссылается только из своего пакета. Эта функция предназначена для использования, когда GV был частично просмотрен для определения содержимого, что привело к обновлению, но на основе того, что найдено, оказалось, что реальный GV не нужен.Если
gv- полностью пустой типглоб, он удаляется из стэша.Если
gv- типглоб, содержащий только достаточно обычную константную подпрограмму, типглоб заменяется заменой скалярной ссылки, которая более компактно представляет то же самое.void gv_try_downgrade(GV* gv)
Hash Manipulation Functions
- 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, "literal string" key, U32 flags ) - refcounted_he_fetch_sv
-
Как "refcounted_he_fetch_pvn", но принимает перловский скаляр вместо пары "строка/длина".
SV * refcounted_he_fetch_sv( const struct refcounted_he *chain, SV *key, U32 hash, U32 flags ) - refcounted_he_free
-
Уменьшает счетчик ссылок на
refcounted_heна единицу. Если счетчик ссылок достигает нуля, память структуры освобождается, что (рекурсивно) приводит к уменьшению счетчика ссылок родительской структурыrefcounted_he. В этом случае безопасно передавать указатель null в эту функцию: никаких действий не выполняется.void refcounted_he_free(struct refcounted_he *he) - refcounted_he_inc
-
Увеличивает счетчик ссылок на
refcounted_he. Указатель наrefcounted_heтакже возвращается. В этом случае безопасно передавать указатель null в эту функцию: никаких действий не выполняется и возвращается указатель null.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, "literal string" key, SV *value, U32 flags ) - refcounted_he_new_sv
-
Как "refcounted_he_new_pvn", но принимает перловский скаляр вместо пары "строка/длина".
struct refcounted_he * refcounted_he_new_sv( struct refcounted_he *parent, SV *key, U32 hash, SV *value, U32 flags )
IO Functions
- start_glob
-
ПРИМЕЧАНИЕ: эта функция экспериментальная и может быть изменена или удалена без предварительного уведомления.
Функция, вызываемая
do_readlineдля запуска глобуса (или выполнения глобуса внутри perl на VMS). Этот код раньше был встроенным, но теперь perl используетFile::Glob. Этот стартер глобуса используется только miniperl во время процесса сборки или при определении PERL_EXTERNAL_GLOB. Перемещение его сокращает pp_hot.c; сокращение pp_hot.c помогает ускорить perl.PerlIO* start_glob(SV *tmpglob, IO *io)
Lexer interface
- validate_proto
-
ПРИМЕЧАНИЕ: эта функция экспериментальная и может быть изменена или удалена без предварительного уведомления.
Эта функция выполняет проверку синтаксиса прототипа,
proto. Еслиwarnистинно, любые недопустимые символы или несоответствующие скобки приведут к предупреждениям illegalproto, объявляя, что они были обнаружены в прототипе дляname.Значение возврата —
true, если это допустимый прототип, иfalse, если нет, независимо от того, было ли значениеwarntrueилиfalse.Обратите внимание, что
NULLявляется допустимымprotoи всегда возвращаетtrue.ПРИМЕЧАНИЕ: perl_ форма этой функции устарела.
bool validate_proto(SV *name, SV *proto, bool warn, bool curstash)
Магические функции
- 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при ошибке.SV* magic_methcall(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)
Дополнительные функции
- free_c_backtrace
-
Освобождает стек вызовов, полученный из get_c_bracktrace.
void free_c_backtrace(Perl_c_backtrace* bt) - get_c_backtrace
-
Собирает стек вызовов (также "стек трейса") в единый линейный буфер, который вызывающая сторона обязана
Perl_free_c_backtrace().Сканирует кадры назад на
depth + skip, затем отбрасываетskipсамый внутренний, возвращая не болееdepthкадров.Perl_c_backtrace* get_c_backtrace(int max_depth, int skip)
Функции 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)
Функции манипулирования Optree
- finalize_optree
-
Эта функция завершает обработку optree. Необходимо вызвать её сразу после построения всего optree. Она выполняет дополнительную проверку, которую нельзя сделать в обычных
ck_xxx функциях, и делает дерево потокобезопасным.void finalize_optree(OP* o) - newATTRSUB_x
-
Создаёт Perl-подпрограмму, выполняя также некоторые дополнительные задачи.
Ожидается, что эта функция будет вызвана в контексте компиляции Perl, и некоторые аспекты подпрограммы берутся из глобальных переменных, связанных с компиляцией. В частности,
PL_compcvпредставляет подпрограмму, которая в данный момент компилируется. Она не должна быть равной null при вызове этой функции, и некоторые аспекты создаваемой подпрограммы берутся из неё. Созданная подпрограмма может фактически быть повторным использованием объекта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должно указывать на операцию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)
Структуры данных 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() - 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
-
Сохранить слот блока (используется для восстановления после итерации)
XXX DAPM было бы логичнее сделать аргументом PADOFFSET void SAVEPADSV(PADOFFSET po)
Переменные на уровне интерпретатора
- PL_DBsingle
-
Когда Perl запускается в отладочном режиме с ключом -d, этот SV — булево значение, указывающее, выполняются ли подпрограммы пошагово. Пошаговое выполнение автоматически включается после каждой итерации. Это переменная C, соответствующая переменной Perl $DB::single. См.
"PL_DBsub".SV * PL_DBsingle - PL_DBsub
-
Когда Perl запускается в отладочном режиме с ключом -d, этот GV содержит SV, содержащий имя подпрограммы, отлаживаемой в настоящее время. Это переменная C, соответствующая переменной Perl $DB::sub. См.
"PL_DBsingle".GV * PL_DBsub - PL_DBtrace
-
Переменная отслеживания, используемая, когда Perl запускается в отладочном режиме с ключом -d. Это переменная C, соответствующая переменной Perl $DB::trace. См.
"PL_DBsingle".SV * PL_DBtrace - PL_dowarn
-
Переменная C, которая примерно соответствует переменной предупреждений Perl
$^W. Однако$^Wобрабатывается как булево значение, в то время какPL_dowarn— набор флаговых битов.U8 PL_dowarn - PL_last_in_gv
-
GV, который был последним использован для операции ввода из файла. (
<FH>)GV* PL_last_in_gv - PL_ofsgv
-
Глобальная переменная, содержащая разделитель полей вывода -
*,в пространстве Perl.GV* PL_ofsgv - PL_rs
-
Разделитель записей ввода -
$/в пространстве Perl.SV* PL_rs
Макросы управления стеком
- djSP
-
Объявить только
SP. Это фактически идентичноdSP, и объявляет локальную копию указателя на стек Perl, доступную через макросSP. См."SP" in perlapi. (Доступно для обратной совместимости с исходным кодом со старой моделью потоков (Perl 5.005)).djSP; - LVRET
-
Истинно, если этот оператор будет возвращаемым значением подпрограммы lvalue.
Выделение памяти для тела SV
- sv_2num
-
ПРИМЕЧАНИЕ: эта функция экспериментальная и может быть изменена или удалена без предварительного уведомления.
Возвращает SV с числовым значением исходного SV, выполняя необходимые преобразования ссылок или перегрузки. От пользователя ожидается, что он уже обработал get-magic.
SV* sv_2num(SV *const sv)
Функции управления SV
SV (или AV, HV и т. д.) выделяется из двух частей: заголовок (структура sv, av, hv...) содержит информацию о типе и счетчике ссылок, а для многих типов — указатель на тело (структура xrv, xpv, xpviv...), которое содержит поля, специфичные для каждого типа. Некоторые типы хранят все необходимое в заголовке, поэтому у них нет тела.
Во всех, кроме самых параноидальных конфигураций памяти (например, PURIFY), заголовки и тела выделяется из ареен, которые по умолчанию представляют собой фрагменты памяти размером примерно 4 КБ, разделенные на N заголовков или тел. Тела SV выделяются по типу SV, гарантируя необходимую согласованность размера для безопасного выделения из массивов.
Для заголовков SV первый слот в каждой арене зарезервирован и содержит ссылку на следующую арену, некоторые флаги и количество слотов. По цепочке каждой арены проходит связанный список свободных элементов; когда он становится пустым, выделяется дополнительная арена, разделенная на N элементов, которые вставляются в список свободных элементов.
Тела SV аналогичны, но по умолчанию используют наборы арен, которые разделяют ссылку и информацию об арене, и возвращают первый слот в арене. Тела SV подробно описаны позже.
Следующие глобальные переменные связаны с аренами:
PL_sv_arenaroot pointer to list of SV arenas
PL_sv_root pointer to list of free SV structures
PL_body_arenas head of linked-list of body arenas
PL_body_roots[] array of pointers to list of free bodies of svtype
arrays are indexed by the svtype needed Некоторые специальные заголовки SV не выделяются из арены, а создаются непосредственно в структуре интерпретатора, например PL_sv_undef. Размер арен можно изменить от значения по умолчанию, установив PERL_ARENA_SIZE соответствующим образом во время компиляции.
Арена SV служит дополнительной цели, позволяющей находить и уничтожать все еще активные SV во время окончательной очистки.
На самом низком уровне макросы new_SV() и del_SV() захватывают и освобождают заголовок SV. (Если отладка выполняется с -DD, del_SV() вызывает функцию S_del_sv() для возвращения SV в список свободных элементов с проверкой ошибок.) new_SV() вызывает more_sv() / sv_add_arena(), чтобы добавить дополнительную арену, если список свободных элементов пуст. SV в списке свободных элементов имеют поле SvTYPE, установленное на все единицы.
Во время очень последней очистки sv_free_arenas() вызывается из perl_destruct() для физического освобождения всех арен, выделенных с момента запуска интерпретатора.
Функция visit() сканирует список арен SV и вызывает указанную функцию для каждого найденного SV, который все еще активен — т. е. который имеет SvTYPE, отличное от всех единиц, и ненулевой SvREFCNT. visit() используется следующими функциями (указаны как [функция, которая вызывает visit()] / [функция, вызываемая visit() для каждого SV]):
sv_report_used() / do_report_used()
dump all remaining SVs (debugging aid)
sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
do_clean_named_io_objs(),do_curse()
Attempt to free all objects pointed to by RVs,
try to do the same for all objects indir-
ectly referenced by typeglobs too, and
then do a final sweep, cursing any
objects that remain. Called once from
perl_destruct(), prior to calling sv_clean_all()
below.
sv_clean_all() / do_clean_all()
SvREFCNT_dec(sv) each remaining SV, possibly
triggering an sv_free(). It also sets the
SVf_BREAK flag on the SV to indicate that the
refcnt has been artificially lowered, and thus
stopping sv_free() from giving spurious warnings
about SVs which unexpectedly have a refcnt
of zero. called repeatedly from perl_destruct()
until there are no SVs left. - sv_add_arena
-
При заданном блоке памяти связать его с началом списка арен и разбить его на список свободных SVs.
void sv_add_arena(char *const ptr, const U32 size, const U32 flags) - sv_clean_all
-
Уменьшить refcnt каждого оставшегося SV, возможно, вызвав очистку. Для освобождения SVs, находящихся в сложных иерархиях со ссылками на самих себя, может потребоваться вызвать эту функцию несколько раз.
I32 sv_clean_all() - sv_clean_objs
-
Попытаться уничтожить все объекты, которые еще не освобождены.
void sv_clean_objs() - sv_free_arenas
-
Освободить память, используемую всеми аренами. Обратите внимание, что все отдельные заголовки и тела SV внутри арен должны быть уже освобождены.
void sv_free_arenas() - SvTHINKFIRST
-
Быстрая проверка флага, чтобы определить, нужно ли передавать
svвsv_force_normal, чтобы его "снизить" перед тем, какSvIVXилиSvPVXможно будет изменить непосредственно.Например, если ваш скаляр является ссылкой, и вы хотите изменить слот
SvIVX, вы не можете просто выполнитьSvROK_off, так как это приведёт к утечке referent.Это используется внутри различных функций для модификации 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)
Поддержка Unicode
- find_uninit_var
-
ПРИМЕЧАНИЕ: эта функция находится в стадии эксперимента и может быть изменена или удалена без предварительного уведомления.
Найти имя неопределённой переменной (если таковая имеется), которая вызвала предупреждение оператора "Использование неопределённого значения". Если match равно true, возвращать имя только в том случае, если его значение совпадает с
uninit_sv. Иными словами, если унарный оператор (например,OP_COS) генерирует предупреждение, то обращение к непосредственному потомку op может датьOP_PADSVилиOP_GV, содержащие имя неопределённой переменной. С другой стороны, при использованииOP_ADDнужно следовать двум ветвям, поэтому мы печатаем имя переменной только в случае точного совпадения.desc_pуказывает на указатель строки, содержащий описание оператора. Он может быть обновлён при необходимости.Имя возвращается как смертный SV.
Предполагается, что
PL_op— это 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ИСТИННО тогда и только тогда, когда последовательность, начинающаяся сs, должна обрабатываться как UTF-8. Точнее, за исключением двух вырожденных случаев, эта функция возвращает TRUE, если все кодовые точки в ней происходят от любой комбинации трёх "скриптов", указанных в свойстве Unicode "Script Extensions": 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, но они тем не менее являются законным расширенным UTF-8 Perl; в противном случае возвращает FALSE.Возврат TRUE означает, что по крайней мере одна кодовая точка, представленная последовательностью, либо является широким символом, не представимым одним байтом, либо её представление отличается в зависимости от того, закодирована ли последовательность в UTF-8 или нет.
См. также
"is_utf8_invariant_string" in perlapi,"is_utf8_string" in perlapibool is_utf8_non_invariant_string(const U8* const s, STRLEN len) - report_uninit
-
Вывести соответствующее предупреждение "Использование неопределённой переменной".
void report_uninit(const SV *uninit_sv) - 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)
Неописанные функции
Следующие функции в настоящее время не документированы. Если вы используете одну из них, вы можете захотеть создать и направить документацию к ней.
- PerlIO_восстановить_errno
- PerlIO_сохранить_errno
- PerlLIO_dup2_cloexec
- PerlLIO_dup_cloexec
- PerlLIO_open3_cloexec
- PerlLIO_open_cloexec
- PerlProc_pipe_cloexec
- PerlSock_accept_cloexec
- PerlSock_socket_cloexec
- PerlSock_socketpair_cloexec
- Slab_Выделить
- Slab_Освободить
- Slab_в_только_чтение
- Slab_в_чтение_запись
- _добавить_диапазон_в_invlist
- _двоичный_вывод_строки
- _core_swash_инициализация
- _получить_данные_класса_регистра_без_битовой_карты
- _получить_invlist_swash
- _обратные_сгибания
- _invlistEQ
- _invlist_инициализация_массива
- _invlist_содержит_символ
- _invlist_вывод
- _invlist_пересечение
- _invlist_пересечение_возможно_дополнение_второго
- _invlist_инвертировать
- _invlist_длина
- _invlist_заполнить_выкройку
- _invlist_поиск
- _invlist_вычитание
- _invlist_объединение
- _invlist_объединение_возможно_дополнение_второго
- _является_графемной_единицей
- _принадлежит_к_категории_локали
- _mem_collxfrm
- _новый_invlist
- _новый_invlist_C_массив
- _настройка_готового_invlist
- _swash_в_invlist
- _преобразовать_сгиб_latin1
- _к_заглавной_строчной_latin1
- _предупреждение_о_проблемной_локали
- прервать_выполнение
- добавить_символ_в_invlist
- выделить_LOGOP
- выделить_возможно_заполнить_EXACT
- allocmy
- amagic_включен
- добавить_utf8_из_нативного_байта
- применить
- av_extend_внутренности
- av_нет_элементов
- av_реализовать
- связать_совпадение
- загрузка_ядра_PerlIO
- загрузка_ядра_UNIVERSAL
- загрузка_ядра_mro
- возможно
- проверка_utf8_вывода
- ck_anoncode
- ck_backtick
- ck_bitop
- ck_cmp
- ck_concat
- ck_определено
- ck_удалить
- ck_each
- ck_entersub_core_аргументы
- ck_конец_файла
- ck_оценить
- ck_выполнить
- ck_существует
- ck_ftst
- ck_функция
- ck_glob
- ck_grep
- ck_индекс
- ck_объединить
- ck_длина
- ck_lfun
- ck_listiob
- ck_совпадение
- ck_метод
- ck_null
- ck_открыть
- ck_прототип
- ck_readline
- ck_присвоение_ссылки
- ck_повторить
- ck_требовать
- ck_возвратить
- ck_rfun
- ck_rvconst
- ck_присвоение_скаляра
- ck_выбрать
- ck_сдвиг
- ck_умное_совпадение
- ck_сортировать
- ck_spair
- ck_разделить
- ck_преобразовать_в_строку
- ck_подпрограмма
- ck_подстрока
- ck_svconst
- ck_tell
- ck_обрезать
- самый_близкий_cop
- вычислить_EXACTish
- coresub_оператор
- создать_сферу_оценки
- croak_вызывающий
- croak_нет_памяти
- croak_popstack
- текущий_движок_регулярных_выражений
- пользовательский_оператор_получить_поле
- cv_ckproto_длина_флаги
- cv_клонировать_в
- cv_постоянный_sv_или_av
- cv_undef_флаги
- cvgv_из_hek
- cvgv_установить
- cvstash_установить
- deb_стек_все
- defelem_цель
- удалить_сферу_оценки
- delimcpy_без_эскейпа
- die_unwind
- do_aexec
- do_aexec5
- do_конец_файла
- do_выполнить
- do_exec3
- do_ipcctl
- do_ipcget
- do_msgrcv
- do_msgsnd
- do_ncmp
- do_open6
- do_open_необработанный
- do_вывести
- do_readline
- do_переместить
- do_semop
- do_shmio
- do_sysseek
- do_tell
- do_преобразование
- do_vecget
- do_vecset
- do_vop
- does_utf8_переполнение
- dofile
- drand48_инициализировать_r
- drand48_r
- dtrace_проба_вызов
- dtrace_проба_загрузка
- dtrace_проба_оператор
- dtrace_проба_фаза
- вывести_все_perl
- вывести_packsubs_perl
- вывести_подпрограммы_perl
- вывод_потомка_sv
- имитировать_cop_ввод_вывод
- функция_включена
- найти_лексическую_cv
- найти_runcv_где
- найти_скрипт
- форма_короткий_восьмеричный_предупреждение
- освободить_связанный_пул_hv
- получить_db_подпрограмму
- получить_дебажные_опции
- получить_семя_хеша
- получить_адрес_итератора_invlist
- получить_адрес_смещения_invlist
- получить_адрес_предыдущего_индекса_invlist
- получить_не_модифицировать
- получить_аргументы_оператора
- получить_аргумент_ре
- getenv_длина
- grok_atoUV
- grok_обратная_косая_черта_c
- grok_обратная_косая_черта_o
- grok_обратная_косая_черта_x
- gv_fetchmeth_внутренний
- gv_переопределить
- gv_установить_ссылку
- gv_stashpvn_внутренний
- gv_stashsvpvn_кешированный
- обработать_имя_обратного_ссылки
- hfree_следующая_запись
- hv_обратные_ссылки_p
- hv_убить_обратные_ссылки
- hv_заполнитель_p
- hv_pushkv
- hv_undef_флаги
- инициализировать_символы_argv
- инициализировать_константы
- инициализировать_dbargs
- инициализировать_отладчик
- инициализировать_именную_cv
- инициализировать_uniprops
- инвертировать
- invlist_массив
- invlist_очистить
- invlist_клонировать
- invlist_наибольший
- invlist_итерирует
- invlist_iterfinish
- invlist_iterinit
- invlist_максимальный
- invlist_предыдущий_индекс
- invlist_установить_длину
- invlist_установить_предыдущий_индекс
- invlist_обрезать
- io_закрыть
- isFF_OVERLONG
- isFOO_lc
- is_utf8_общий
- is_utf8_общий_с_длиной
- is_utf8_переполнение_заданный_стартовый_байт_ok
- isinfnansv
- jmaybe
- ключевое_слово
- ключевое_слово_стандартный_плагин
- список
- локализовать
- магия_очистить_все_среду
- магия_очистить_длина_массива_p
- магия_очистить_среду
- магия_очистить_isa
- магия_очистить_упаковку
- магия_очистить_подпись
- магия_копировать_callchecker
- магия_существует_упаковка
- магия_освободить_длина_массива_p
- магия_освободить_переопределение
- магия_получить
- магия_получить_длину_массива
- магия_получить_переменную_отладки
- магия_получить_defelem
- магия_получить_количество_ключей
- магия_получить_упаковку
- магия_получить_позицию
- магия_получить_подпись
- магия_получить_подстроку
- магия_получить_загрязнение
- магия_получить_переменную_u
- магия_получить_вектор
- магия_убить_обратные_ссылки
- магия_следующая_упаковка
- магия_количество_данных_регистра
- магия_получить_данные_регистра
- магия_установить_данные_регистра
- магия_скаляр_упаковка
- магия_установить
- магия_установить_все_среду
- магия_установить_длину_массива
- магия_установить_collxfrm
- магия_установить_строку_db
- магия_установить_переменную_отладки
- магия_установить_defelem
- магия_установить_среду
- магия_установить_isa
- магия_установить_lvref
- магия_установить_mglob
- магия_установить_количество_ключей
- магия_установить_nonelem
- магия_установить_упаковку
- magic_setpos
- magic_setregexp
- magic_setsig
- magic_setsubstr
- magic_settaint
- magic_setutf8
- magic_setuvar
- magic_setvec
- magic_sizepack
- magic_wipepack
- malloc_good_size
- malloced_size
- mem_collxfrm
- mem_log_alloc
- mem_log_free
- mem_log_realloc
- mg_find_mglob
- mode_from_discipline
- more_bodies
- mro_meta_dup
- mro_meta_init
- multiconcat_stringify
- multideref_stringify
- my_attrs
- my_clearenv
- my_lstat_flags
- my_memrchr
- my_mkostemp
- my_mkstemp
- my_mkstemp_cloexec
- my_stat_flags
- my_strerror
- my_unexec
- newGP
- newMETHOP_internal
- newSTUB
- newSVavdefelem
- newXS_deffile
- new_warnings_bitfield
- nextargv
- noperl_die
- notify_parser_that_changed_to_utf8
- oopsAV
- oopsHV
- op_clear
- op_integerize
- op_lvalue_flags
- op_refcnt_dec
- op_refcnt_inc
- op_relocate_sv
- op_std_init
- op_unscope
- opmethod_stash
- opslab_force_free
- opslab_free
- opslab_free_nopad
- package
- package_version
- pad_add_weakref
- padlist_store
- padname_free
- padnamelist_free
- parse_unicode_opts
- parse_uniprop_string
- parser_free
- parser_free_nexttoke_ops
- path_is_searchable
- peep
- pmruntime
- populate_isa
- ptr_hash
- qerror
- re_exec_indentf
- re_indentf
- re_op_compile
- re_printf
- reg_named_buff
- reg_named_buff_iter
- reg_numbered_buff_fetch
- reg_numbered_buff_length
- reg_numbered_buff_store
- reg_qr_package
- reg_skipcomment
- reg_temp_copy
- regcurly
- regprop
- report_evil_fh
- report_redefined_cv
- report_wrongway_fh
- rpeep
- rsignal_restore
- rsignal_save
- rxres_save
- same_dirent
- save_strlen
- save_to_buffer
- sawparens
- scalar
- scalarvoid
- set_caret_X
- set_numeric_standard
- set_numeric_underlying
- set_padlist
- setfd_cloexec
- setfd_cloexec_for_nonsysfd
- setfd_cloexec_or_inhexec_by_sysfdness
- setfd_inhexec
- setfd_inhexec_for_sysfd
- should_warn_nl
- sighandler
- softref2xv
- ssc_add_range
- ssc_clear_locale
- ssc_cp_and
- ssc_intersection
- ssc_union
- sub_crush_depth
- sv_add_backref
- sv_buf_to_ro
- sv_del_backref
- sv_free2
- sv_kill_backrefs
- sv_len_utf8_nomg
- sv_magicext_mglob
- sv_mortalcopy_flags
- sv_only_taint_gmagic
- sv_or_pv_pos_u2b
- sv_resetpvn
- sv_sethek
- sv_setsv_cow
- sv_unglob
- swash_fetch
- swash_init
- tied_method
- tmps_grow_p
- translate_substr_offsets
- try_amagic_bin
- try_amagic_un
- utf16_to_utf8
- utf16_to_utf8_reversed
- utilize
- varname
- vivify_defelem
- vivify_ref
- wait4pid
- was_lvalue_sub
- watch
- win32_croak_not_implemented
- write_to_stderr
- xs_boot_epilog
- xs_handshake
- yyerror
- yyerror_pv
- yyerror_pvn
- yylex
- yyparse
- yyquit
- yyunlex
АВТОРЫ
Система автоматической документации была первоначально добавлена в ядро Perl Бенджамином Штулем. Документация создана теми, кто любезно задокументировал свои функции.
СМОТРИ ТАКЖЕ
© 1993–2020 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.28.3/perlintern