Spec-Zone.ru › Perl 5.28

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 , если нет, независимо от того, было ли значение warn true или 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 perlapi

bool    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
магия_установить_упаковку
END_OF_DOCUMENT_MARKER
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
unshare_hek
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 Бенджамином Штулем. Документация создана теми, кто любезно задокументировал свои функции.

СМОТРИ ТАКЖЕ

perlguts, perlapi

© 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

Spec-Zone.ru

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