Spec-Zone.ru › Perl 5.38

perlintern

СОДЕРЖАНИЕ

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

НАЗВАНИЕ

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

ОПИСАНИЕ

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

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

Обработка AV

av_fetch_simple

Это сокращенная версия av_fetch, предполагающая, что массив очень простой — без магии, без только для чтения, и AvREAL — и что key не отрицательное. Эту функцию НЕЛЬЗЯ использовать в ситуациях, где любое из этих предположений может не выполняться.

Возвращает SV по указанному индексу в массиве. key — это индекс. Если lval истинно, вы гарантированно получите реальный SV (в случае, если он не был реальным раньше), который вы можете изменить. Проверьте, что возвращаемое значение не равно NULL, перед обращением к нему как к SV*.

Приблизительный эквивалент на Perl — $myarray[$key].

SV **  av_fetch_simple(AV *av, SSize_t key, I32 lval)
AvFILLp

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

SSize_t  AvFILLp(AV* av)
av_new_alloc

Эта функция реализует "newAV_alloc_x" в perlapi и "newAV_alloc_xz" в perlapi, которые являются частью публичного API для этой функциональности.

Создаёт новый AV и выделяет его массив SV*.

Это аналогично, но эффективнее, чем:

AV *av = newAV();
av_extend(av, key);

Параметр size используется для предварительного выделения массива SV* достаточного размера для хранения как минимум элементов 0..(size-1). size должно быть не меньше 1.

Параметр zeroflag управляет тем, инициализируется ли массив значениями NULL.

AV *  av_new_alloc(SSize_t size, bool zeroflag)
av_store_simple

Это сокращенная версия av_store, предполагающая, что массив очень простой — без магии, без только для чтения, и AvREAL — и что key не отрицательное. Эту функцию НЕЛЬЗЯ использовать в ситуациях, где любое из этих предположений может не выполняться.

Сохраняет SV в массиве. Индекс массива задан как key. Его можно разобрать, чтобы получить сохранённый SV*, который был там (= val)).

Обратите внимание, что вызывающая сторона отвечает за увеличение счётчика ссылок val перед вызовом.

Приблизительный эквивалент на Perl: splice(@myarray, $key, 1, $val).

SV **  av_store_simple(AV *av, SSize_t key, SV *val)

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

dowantarray

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

Реализует устаревшую "GIMME" в perlapi.

U8  dowantarray()
leave_scope

Реализует LEAVE_SCOPE, которую вы должны использовать вместо неё.

void  leave_scope(I32 base)
magic_freedestruct

Эта функция вызывается через магию для реализации функций mortal_destructor_sv() и mortal_destructor_x(). Её не следует вызывать напрямую, и она не имеет доступных для пользователя частей.

int  magic_freedestruct(SV *sv, MAGIC *mg)
mortal_svfunc_x

Эта функция организует вызов C-функции в конце текущего оператора с предоставленными аргументами. Она является оболочкой вокруг mortal_destructor_sv(), что гарантирует соответствующий вызов последней функции.

Обратите внимание, что есть существенная разница во времени между концом текущего оператора и концом текущего псевдоблока. Если вам нужен механизм для запуска функции в конце текущего псевдоблока, обратитесь к SAVEDESTRUCTORX() вместо этой функции.

void  mortal_svfunc_x(SVFUNC_t f, SV *p)
pop_scope

Реализует "LEAVE" в perlapi

void  pop_scope()
push_scope

Реализует "ENTER" в perlapi

void  push_scope()
save_adelete

Реализует SAVEADELETE.

void  save_adelete(AV *av, SSize_t key)
save_freercpv

Реализует SAVEFREERCPV.

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

void  save_freercpv(char *rcpv)
save_generic_pvref

Реализует SAVEGENERICPV.

Как save_pptr(), но также Safefree() нового значения, если оно отличается от старого. Может быть использовано для восстановления глобального char* до его предыдущего содержания, освобождая новое значение.

void  save_generic_pvref(char **str)
save_generic_svref

Реализует SAVEGENERICSV.

Как save_sptr(), но также SvREFCNT_dec() нового значения. Может быть использовано для восстановления глобального SV до его предыдущего содержания, освобождая новое значение.

void  save_generic_svref(SV **sptr)
save_hdelete

Реализует SAVEHDELETE.

void  save_hdelete(HV *hv, SV *keysv)
save_hints

Реализует SAVEHINTS.

void  save_hints()
save_op

Реализует SAVEOP.

void  save_op()
END_OF_DOCUMENT_MARKER ```
save_padsv_and_mortalize

Реализует SAVEPADSVANDMORTALIZE.

void  save_padsv_and_mortalize(PADOFFSET off)
save_pushptr

Счётчик ссылок объекта ptr будет уменьшен в конце текущего псевдоблока. type указывает тип ptr, выраженный как одна из констант в scope.h, имя которой начинается с SAVEt_.

Это основная реализация нескольких макросов, таких как SAVEFREESV.

void  save_pushptr(void * const ptr, const int type)
save_rcpv

Реализует SAVERCPV.

Сохраняет и восстанавливает строку со счётом ссылок, аналогично тому, как это делает save_generic_svref для SV*. Может использоваться для восстановления строки со счётом ссылок в её предыдущее состояние. Выполняет соответствующий отсчёт счёта ссылок, чтобы ничего не утекло или не было освобождено преждевременно.

void  save_rcpv(char **prcpv)
save_scalar_at

Вспомогательная функция для локализации SV, на который ссылается *sptr.

Если SAVEf_KEEPOLDELEM установлено в flags, функция возвращает входной скаляр без изменений.

В противном случае она заменяет *sptr новым undef скаляром и возвращает его. Новый скаляр будет содержать магию старого (если есть) скопированную в него. Если есть такая магия и SAVEf_SETMAGIC установлено в flags, магия 'set' будет обработана на новом скаляре. Если не установлено, магия 'set' будет пропущена. Последнее, как правило, означает, что вскоре последует присваивание (например, 'local $x = $y'), и оно обработает магию.

SV *  save_scalar_at(SV **sptr, const U32 flags)
save_set_svflags

Реализует SAVESETSVFLAGS.

Устанавливает значения SvFLAGS, заданные маской, на значения в val

void  save_set_svflags(SV *sv, U32 mask, U32 val)
save_shared_pvref

Реализует SAVESHAREDPV.

Подобно save_generic_pvref(), но использует PerlMemShared_free() вместо Safefree(). Может использоваться для восстановления глобального char*, использующего совместное использование, до его предыдущего содержимого, освобождая новое значение.

void  save_shared_pvref(char **str)
save_vptr

Реализует SAVEVPTR.

void  save_vptr(void *ptr)

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

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

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

В настоящее время в разделе Изменение регистра символов нет элементов внутреннего API.

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

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

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

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

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

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

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

BhkENTRY

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

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

void *  BhkENTRY(BHK *hk, token which)
BhkFLAGS

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

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

U32  BhkFLAGS(BHK *hk)
CALL_BLOCK_HOOKS

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

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

void  CALL_BLOCK_HOOKS(token which, arg)

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

CVf_SLABBED
CvROOT
CvSTART

Описано в perlguts.

CX_CUR

Описано в perlguts.

CX_CUR()
CXINC

Описано в perlguts.

CX_LEAVE_SCOPE

Описано в perlguts.

void  CX_LEAVE_SCOPE(PERL_CONTEXT* cx)
CX_POP

Описано в perlguts.

void  CX_POP(PERL_CONTEXT* cx)
cxstack

Описано в perlguts.

cxstack_ix

Описано в perlguts.

CXt_BLOCK
CXt_EVAL
CXt_FORMAT
CXt_GIVEN
CXt_LOOP_ARY
CXt_LOOP_LAZYIV
CXt_LOOP_LAZYSV
CXt_LOOP_LIST
CXt_LOOP_PLAIN
CXt_NULL
CXt_SUB
CXt_SUBST
CXt_WHEN

Описано в perlguts.

cx_type

Описано в perlguts.

dounwind

Описано в perlguts.

void  dounwind(I32 cxix)
my_fork

Это для использования PerlProc_fork в качестве обертки для функции C-библиотеки fork(2) на некоторых платформах, чтобы скрыть некоторые особенности платформ. Его следует использовать только через PerlProc_fork.

Pid_t  my_fork()
PERL_CONTEXT

Описано в perlguts.

COPы и хеши подсказок

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

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

core_prototype

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

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

Обработка CV

CvREFCOUNTED_ANYSV

Если истинно, указывает, что член CvXSUBANY(cv).any_sv содержит указатель SV, счётчик ссылок которого должен быть уменьшен при освобождении самого CV. Кроме того, cv_clone() увеличит счётчик ссылок, а sv_dup() продублирует весь SV, на который указывает, если этот флаг установлен.

Любой CV, который оборачивает XSUB, имеет объединение ANY, которое функция XSUB свободна использовать для своих собственных целей. Возможно, что код хочет сохранить SV в члене any_sv этого объединения. Установив этот флаг, эта ссылка SV будет правильно возвращена или продублирована при освобождении самого CV.

bool  CvREFCOUNTED_ANYSV(CV *cv)
CvREFCOUNTED_ANYSV_off

Вспомогательный макрос для отключения флага CvREFCOUNTED_ANYSV.

void  CvREFCOUNTED_ANYSV_off(CV *cv)
CvREFCOUNTED_ANYSV_on

Вспомогательный макрос для включения флага CvREFCOUNTED_ANYSV.

void  CvREFCOUNTED_ANYSV_on(CV *cv)
CvWEAKOUTSIDE

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

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

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

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

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

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

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

Вставить обработку исключений для текущей операции и цикла RUNOPS,

- a new JMPENV stack catch frame, and
- an inner RUNOPS loop to run all the remaining ops following the
  current PL_op.

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

docatch() предназначен для использования следующим образом:

PP(pp_entertry)
{
    if (CATCH_GET)
        return docatch(Perl_pp_entertry);

    ... rest of function ...
    return PL_op->op_next;
}

Если новый кадр catch не нужен, операция выполняется нормально. В противном случае вызывается docatch(), который рекурсивно вызывает pp_entertry(), на этот раз с CATCH_GET() равным false, так что остальная часть тела entertry выполняется. Затем docatch() вызывает CALLRUNOPS(), который выполняет все операции, следующие за entertry. Когда цикл завершается, управление возвращается в docatch(), который удаляет JMPENV и возвращается в родительский pp_entertry(), который сам сразу возвращается. Обратите внимание, что *все* последующие операции выполняются в цикле RUNOPS внутреннего уровня, а не только тело eval. Например, в

sub TIEARRAY { eval {1}; my $x }
tie @a, "main";

в момент выполнения 'my', стек C будет выглядеть примерно так:

#10 main()
#9  perl_run()              # JMPENV_PUSH level 1 here
#8  S_run_body()
#7  Perl_runops_standard()  # main RUNOPS loop
#6  Perl_pp_tie()
#5  Perl_call_sv()
#4  Perl_runops_standard()  # unguarded RUNOPS loop: no new JMPENV
#3  Perl_pp_entertry()
#2  S_docatch()             # JMPENV_PUSH level 2 here
#1  Perl_runops_standard()  # docatch()'s RUNOPs loop
#0  Perl_pp_padsv()

В принципе, любой раздел ядра Perl, который запускает цикл RUNOPS, может гарантировать, что он перехватит любые исключения и перезапустит цикл при необходимости. Если он не готов сделать это (например, call_sv() нет), то он устанавливает CATCH_GET() в значение true, чтобы любой последующий код типа eval знал, как настроить новый обработчик и цикл (через docatch()).

См. "Обработка исключений" в perlinterp для получения дополнительной информации.

OP *  docatch(Perl_ppaddr_t firstpp)

Отладка

comma_aDEPTH

Некоторые функции при компиляции с DEBUGGING принимают дополнительный конечный аргумент, названный depth, указывающий глубину стека C. В противном случае этот аргумент опускается. Данный макрос расширяется либо до , depth при DEBUGGING, либо до пустого значения, если DEBUGGING не используется, уменьшая количество #ifdef в коде.

Программа отвечает за поддержание правильного значения для depth.

comma_aDEPTH
comma_pDEPTH

Используется в объявлениях прототипов функций, которые принимают конечный параметр "comma_aDEPTH", подобно тому, как pTHX_ используется в функциях, принимающих начальный параметр контекста потока.

debop

Реализует опцию командной строки Perl -Dt для операции o.

I32  debop(const OP *o)
debprof

Вызывается для указания того, что o была выполнена, для целей профилирования в соответствии с опцией командной строки -DP.

void  debprof(const OP *o)
debprofdump

Выводит содержимое данных, собранных опцией командной строки Perl -DP.

void  debprofdump()
debug_aDEPTH

Аналогично "comma_aDEPTH", но без ведущего аргумента. Предназначен для функций без обычных аргументов и используется в самой "comma_aDEPTH".

debug_aDEPTH
debug_pDEPTH

Аналогично "comma_pDEPTH", но без ведущего аргумента. Предназначен для функций без обычных аргументов и используется в самой "comma_pDEPTH".

debug_pDEPTH
free_c_backtrace

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

void  free_c_backtrace(Perl_c_backtrace *bt)
get_c_backtrace

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

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

Perl_c_backtrace *  get_c_backtrace(int max_depth, int skip)
PL_DBsingle

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

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

SV *  PL_DBsingle
PL_DBsub

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

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

GV *  PL_DBsub
PL_DBtrace

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

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

SV *  PL_DBtrace
runops_debug

Описание в perlguts.

int  runops_debug()
runops_standard

Описание в perlguts.

int  runops_standard()

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

sv_peek

Реализует SvPEEK

char *  sv_peek(SV *sv)

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

cv_dump

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

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

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

void  cv_forget_slab(CV *cv)
do_dump_pad

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

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

Реализует "PERL_GET_CONTEXT" в perlapi, который следует использовать вместо него.

void *  get_context()
pad_alloc_name

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

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

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

void  pad_block_start(int full)
pad_check_dup

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

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

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

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

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

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

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

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

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

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

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

void  pad_free(PADOFFSET po)
pad_leavemy

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

OP *  pad_leavemy()
padlist_dup

Дублирует блок.

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

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

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

Дублирует список имён блоков.

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

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

void  pad_push(PADLIST *padlist, int depth)
pad_reset

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

void  pad_reset()
pad_setsv

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

void  pad_setsv(PADOFFSET po, SV *sv)
pad_sv

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

SV *  pad_sv(PADOFFSET po)
pad_swipe

Отказаться от tmp в текущем блоке по смещению po и заменить его новым.

void  pad_swipe(PADOFFSET po, bool refadjust)
set_context

Реализует "PERL_SET_CONTEXT" в perlapi, который следует использовать вместо него.

void  set_context(void *t)
si_dup

Дублировать структуру информации о стеке, возвращая указатель на клонированный объект.

PERL_SI *  si_dup(PERL_SI *si, CLONE_PARAMS *param)
ss_dup

Дублировать стек сохранения, возвращая указатель на клонированный объект.

ANY *  ss_dup(PerlInterpreter *proto_perl, CLONE_PARAMS *param)

Errno

dSAVEDERRNO

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

void  dSAVEDERRNO
dSAVE_ERRNO

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

void  dSAVE_ERRNO
RESTORE_ERRNO

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

void  RESTORE_ERRNO
SAVE_ERRNO

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

void  SAVE_ERRNO
SETERRNO

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

void  SETERRNO(int errcode, int vmserrcode)

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

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

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

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

Числа с плавающей запятой

В настоящее время нет внутренних элементов API в Числах с плавающей запятой

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

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

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

В настоящее время нет внутренних элементов API в Глобальных переменных

Обработка GV и Стек

amagic_applies

Проверить sv , чтобы определить, применяется ли перегруженная (активная магическая) операция method к нему. Если sv не является SvROK или это не объект, то возвращает false, иначе проверяет, благословен ли объект в класс, поддерживающий перегруженные операции, и возвращает true, если вызов amagic_call() с этим SV и заданным методом вызовет магическую операцию, включая правила отката перегрузки или nomethod. Таким образом, вызов:

amagic_applies(sv, string_amg, AMG_unary)

вернёт true для объекта с настроенной перегрузкой любым из следующих способов:

use overload q("") => sub { ... };
use overload q(0+) => sub { ... }, fallback => 1;

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

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

method — целочисленный перечисление, одно из значений, которые можно найти в overload.h, например string_amg.

flags должно быть установлено в AMG_unary для унарных операций.

bool  amagic_applies(SV *sv, int method, int flags)
gp_dup

Дублировать типглоб, возвращая указатель на клонированный объект.

GP *  gp_dup(GP * const gp, CLONE_PARAMS * const param)
gv_handler

Реализует StashHANDLER, которую следует использовать вместо неё

CV *  gv_handler(HV *stash, I32 id)
gv_stashsvpvn_cached

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

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

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

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

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

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

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

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

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

void  gv_try_downgrade(GV *gv)

Управление крючками

В настоящее время нет внутренних элементов API в Управлении крючками

Обработка HV

hv_eiter_p

Реализует HvEITER , которую следует использовать вместо неё.

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

HE **  Perl_hv_eiter_p(pTHX_ HV *hv)
hv_eiter_set

Реализует HvEITER_set , которую следует использовать вместо неё.

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

void  Perl_hv_eiter_set(pTHX_ HV *hv, HE *eiter)
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)
hv_fill

Возвращает количество используемых бакетов хеш-таблицы.

Эта функция реализует макрос HvFILL , который следует использовать вместо неё.

Начиная с perl 5.25, эта функция используется только для отладки, и количество используемых бакетов хеш-таблицы никак не кэшируется, поэтому эта функция может быть затратной по времени, так как ей необходимо проитерироваться по всем бакетам хеш-таблицы.

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

STRLEN  Perl_hv_fill(pTHX_ HV * const hv)
hv_placeholders_get

Реализует HvPLACEHOLDERS_get , которую следует использовать вместо неё.

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

I32  Perl_hv_placeholders_get(pTHX_ const HV *hv)
hv_placeholders_set

Реализует HvPLACEHOLDERS_set , которую следует использовать вместо неё.

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

void  Perl_hv_placeholders_set(pTHX_ HV *hv, I32 ph)
hv_riter_p

Реализует HvRITER , которую следует использовать вместо неё.

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

I32 *  Perl_hv_riter_p(pTHX_ HV *hv)
hv_riter_set

Реализует HvRITER_set , которую следует использовать вместо неё.

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

void  Perl_hv_riter_set(pTHX_ HV *hv, I32 riter)
refcounted_he_chain_2hv

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

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

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

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

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

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

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

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

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

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

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

void  refcounted_he_free(struct refcounted_he *he)
refcounted_he_inc

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

struct refcounted_he *  refcounted_he_inc(
                                         struct refcounted_he *he)
refcounted_he_new_pv

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

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

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

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

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

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

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

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

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

Аналогично "refcounted_he_new_pvn", но принимает перловский скаляр вместо пары строка/длина.

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

Если ни у кого нет доступа к общей строке str длиной len, освободить её.

len и hash должны быть валидны для str.

void  unsharepvn(const char *sv, I32 len, U32 hash)

Вход/Выход

dirp_dup

Дублирует дескриптор каталога, возвращая указатель на клонированный объект.

DIR *  dirp_dup(DIR * const dp, CLONE_PARAMS * const param)
fp_dup

Дублирует дескриптор файла, возвращая указатель на клонированный объект.

PerlIO *  fp_dup(PerlIO * const fp, const char type,
                 CLONE_PARAMS * const param)
my_fflush_all

Реализует PERL_FLUSHALL_FOR_CHILD на некоторых платформах.

I32  my_fflush_all()
my_mkostemp

Функция C-библиотеки mkostemp(3) (если доступна) или её перловская реализация.

ПРИМЕЧАНИЕ: my_mkostemp необходимо явно вызывать как Perl_my_mkostemp.

int  Perl_my_mkostemp(char *templte, int flags)
my_mkstemp

Функция C-библиотеки mkstemp(3) (если доступна) или её перловская реализация.

ПРИМЕЧАНИЕ: my_mkstemp необходимо явно вызывать как Perl_my_mkstemp.

int  Perl_my_mkstemp(char *templte)
PL_last_in_gv

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

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

GV*  PL_last_in_gv
PL_ofsgv

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

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

GV*  PL_ofsgv
PL_rs

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

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

SV*  PL_rs
start_glob

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

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

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

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

Целое число

В настоящее время нет внутренних элементов API в Целом числе

Форматы Ввода/Вывода

В настоящее время нет внутренних элементов API в Форматах Ввода/Вывода

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

resume_compcv_and_save

Возобновляет буфер, ранее приостановленный функцией suspend_compcv, таким образом, что он будет повторно приостановлен в конце области видимости, чтобы его можно было использовать повторно позже. Это следует использовать в паре области видимости ENTER/LEAVE.

void  resume_compcv_and_save(struct suspended_compcv *buffer)
resume_compcv_final

Возобновляет состояние анализатора, ранее сохранённое с помощью функции suspend_compcv для окончательного возобновления перед компиляцией в полный CV. Это следует использовать в паре области видимости ENTER/LEAVE.

void  resume_compcv_final(struct suspended_compcv *buffer)
validate_proto

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

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

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

Обратите внимание, что NULL является корректным proto и всегда вернёт true.

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

Локали

В настоящее время нет внутренних элементов API в Локалях

Магия

magic_clearhint

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

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

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

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

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

sv и mg — это привязанное свойство и привязанная магия.

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

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

flags может быть:

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

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

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

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

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

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

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

Дублирует цепочку магии, возвращая указатель на клонированный объект.

MAGIC *  mg_dup(MAGIC *mg, CLONE_PARAMS * const param)
mg_localize

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

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

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

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

calloc

Реализует "Newxz" в perlapi, которую следует использовать вместо неё.

ПРИМЕЧАНИЕ: calloc необходимо явно вызывать как Perl_calloc.

Malloc_t  Perl_calloc(MEM_SIZE elements, MEM_SIZE size)
malloc

Реализует "Newx" в perlapi, которую следует использовать вместо неё.

ПРИМЕЧАНИЕ: malloc необходимо явно вызывать как Perl_malloc.

Malloc_t  Perl_malloc(MEM_SIZE nbytes)
mfree

Реализует "Safefree" в perlapi, которую следует использовать вместо неё.

ПРИМЕЧАНИЕ: mfree необходимо явно вызывать как Perl_mfree.

Free_t  Perl_mfree(Malloc_t where)
realloc

Реализует "Renew" в perlapi, которую следует использовать вместо неё.

ПРИМЕЧАНИЕ: realloc необходимо явно вызывать как Perl_realloc.

Malloc_t  Perl_realloc(Malloc_t where, MEM_SIZE nbytes)

MRO

mro_get_linear_isa_dfs

Возвращает линейную последовательность поиска по глубине @ISA данного хранилища. Возвращаемое значение — AV*, элементы которого — строковые SV, представляющие имена классов. 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)
END_OF_DOCUMENT_MARKER
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)

Функции Multicall

В настоящее время в Функциях Multicall нет внутренних элементов API.

Числовые функции

isinfnansv

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

Обратите внимание, что эта функция всегда принимает конечный мусор (аналогично grok_number_flags с PERL_SCAN_TRAILING), поэтому "inferior" и "NAND gates" вернут true.

bool  isinfnansv(SV *sv)

Optrees

newATTRSUB_x

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

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

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

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

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

Если o_is_gv ложно и o равно нулю, то подпрограмма будет анонимной. Если o_is_gv ложно и o не равно нулю, то 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 равно нулю. Строка прототипа копируется; вызывающая сторона может изменить предоставленную строку после этого. Если filename не равно нулю, оно должно быть нуль-терминированным именем файла, и у подпрограммы будет установлено соответствующее CvFILE. По умолчанию CvFILE устанавливается на указатель непосредственно на предоставленную строку, которая должна быть статической. Если у flags установлен бит XS_DYNAMIC_FILENAME, то вместо этого будет сделана копия строки.

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

Если name равно нулю, то подпрограмма будет анонимной, с CvGV, ссылающимся на __ANON__ глобальную переменную. Если name не равно нулю, то подпрограмма будет именованной соответственно, ссылаясь на соответствующую глобальную переменную. 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 равно нулю, это указывает на то, что новая подпрограмма не станет константой. Если const_svp не равно нулю, это указывает на то, что новая подпрограмма станет константой, и оно указывает на 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)
op_refcnt_lock

Реализует макрос OP_REFCNT_LOCK, который вы должны использовать вместо него.

void  op_refcnt_lock()
op_refcnt_unlock

Реализует макрос OP_REFCNT_UNLOCK, который вы должны использовать вместо него.

void  op_refcnt_unlock()
traverse_op_tree

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

Инициализирующий вызов должен предоставить корень дерева как top, так и o.

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

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

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

В настоящее время в Pack и Unpack нет внутренних элементов API.

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

CX_CURPAD_SAVE

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

void  CX_CURPAD_SAVE(struct context)
CX_CURPAD_SV

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

SV *  CX_CURPAD_SV(struct context, PADOFFSET po)
PAD_BASE_SV

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

SV *  PAD_BASE_SV(PADLIST padlist, PADOFFSET po)
PAD_CLONE_VARS

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

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

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

U32  PAD_COMPNAME_FLAGS(PADOFFSET po)
PAD_COMPNAME_GEN

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

STRLEN  PAD_COMPNAME_GEN(PADOFFSET po)
PAD_COMPNAME_GEN_set

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

STRLEN  PAD_COMPNAME_GEN_set(PADOFFSET po, int gen)
PAD_COMPNAME_OURSTASH

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

HV *  PAD_COMPNAME_OURSTASH(PADOFFSET po)
PAD_COMPNAME_PV

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

char *  PAD_COMPNAME_PV(PADOFFSET po)
PAD_COMPNAME_TYPE

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

HV *  PAD_COMPNAME_TYPE(PADOFFSET po)
PadnameIsFIELD

Является ли это переменной "поле"? Для PADNAME, где это true, доступна дополнительная информация через PadnameFIELDINFO.

bool  PadnameIsFIELD(PADNAME * pn)
PadnameIsOUR

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

bool  PadnameIsOUR(PADNAME * pn)
PadnameIsSTATE

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

bool  PadnameIsSTATE(PADNAME * pn)
PadnameOURSTASH

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

HV *  PadnameOURSTASH(PADNAME * pn)
PadnameOUTER

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

bool  PadnameOUTER(PADNAME * pn)
PadnameTYPE

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

HV *  PadnameTYPE(PADNAME * pn)
PAD_RESTORE_LOCAL

Восстановить старый pad, сохранённый в локальную переменную opad функцией PAD_SAVE_LOCAL().

void  PAD_RESTORE_LOCAL(PAD *opad)
PAD_SAVE_LOCAL

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

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

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

void  PAD_SAVE_SETNULLPAD()
PAD_SET_CUR

Установить текущим pad pad n в списке pad, сохраняя предыдущий текущий pad. Примечание. В настоящее время этот макрос расширяется до строки, слишком длинной для некоторых компиляторов, поэтому лучше заменить его на

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_SETSV

Установить значение по смещению po в текущем pad на sv.

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

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

SV *  PAD_SV(PADOFFSET po)
PAD_SVl

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

SV *  PAD_SVl(PADOFFSET po)
SAVECLEARSV

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

void  SAVECLEARSV(SV **svp)
SAVECOMPPAD

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

void  SAVECOMPPAD()
SAVEPADSV

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

void  SAVEPADSV(PADOFFSET po)

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

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

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

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

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

В настоящее время в информации о прототипах нет внутренних элементов API.

Функции REGEXP

regnode

Описано в perlreguts.

Отчёты и форматы

В настоящее время в отчётах и форматах нет внутренних элементов API.

Сигналы

В настоящее время в сигналах нет внутренних элементов API.

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

В настоящее время в настройке сайта нет внутренних элементов API.

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

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

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

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

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

djSP

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

djSP();
LVRET

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

save_alloc

Реализует "SSNEW" в perlapi и аналогичные, которые следует использовать вместо этой функции.

SSize_t  save_alloc(SSize_t size, I32 pad)

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

delimcpy_no_escape

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

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

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

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

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

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

Реализует макрос "MY_CXT_INIT" в perlxs, который следует использовать вместо него.

При первом загрузке модуля глобальная переменная PL_my_cxt_index увеличивается, и это значение присваивается статической переменной модуля my_cxt_index (адрес которой передаётся как аргумент). Затем для каждого интерпретатора, для которого вызывается эта функция, она гарантирует, что слот void* доступен для подвешивания статических данных, выделяет или расширяет массив PL_my_cxt_list интерпретатора.

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

void *  Perl_my_cxt_init(pTHX_ int *indexp, size_t size)
quadmath_format_needed

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

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

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

bool  quadmath_format_needed(const char *format)
quadmath_format_valid

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

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

Возвращает true, если это допустимый формат, false — если нет.

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

bool  quadmath_format_valid(const char *format)

Флаги SV

SVt_INVLIST

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

Обработка SV

PL_Sv

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

НО ОСТОРОЖНО, если это используется в ситуации, когда что-то, использующее его, находится в стеке вызовов с чем-то другим, использующим его, эта переменная будет удалена, что приведёт к труднодиагностируемым ошибкам.

PL_Sv
sv_add_arena

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

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

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

bool  sv_2bool(SV * const sv)
sv_2bool_flags

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

bool  sv_2bool_flags(SV *sv, I32 flags)
sv_clean_all

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

I32  sv_clean_all()
sv_clean_objs

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

void  sv_clean_objs()
sv_free_arenas

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

void  sv_free_arenas()
sv_grow

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

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

Упрощённая версия sv_grow, предназначенная только для случаев, когда sv — только что созданный SVt_PV, SVt_PVIV, SVt_PVNV или SVt_PVMG. Т.е. sv имеет стандартные флаги, никогда не был другим типом и не имеет существующей строки. В основном просто присваивает буфер символов и возвращает указатель на него.

char *  sv_grow_fresh(SV * const sv, STRLEN newlen)
sv_newref

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

SV *  sv_newref(SV * const sv)
sv_2num

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

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

SV *  sv_2num(SV * const sv)
sv_pv

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

char *  sv_pv(SV *sv)
sv_pvbyte

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

char *  sv_pvbyte(SV *sv)
sv_pvbyten_force

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

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

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

Обычно используется через макрос SvPVbyte_nolen.

char *  sv_2pvbyte_nolen(SV *sv)
sv_pvn_force

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

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

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

char *  sv_2pv_nolen(SV *sv)
sv_pvutf8n_force

Обработчик макроса SvPVutf8x_force. Всегда используйте макрос вместо него.

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

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

Обычно используется через макрос SvPVutf8_nolen.

char *  sv_2pvutf8_nolen(SV *sv)
sv_pvutf8

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

char *  sv_pvutf8(SV *sv)
sv_tainted

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

bool  sv_tainted(SV * const sv)
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)
sv_true

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

I32  sv_true(SV * const sv)
sv_untaint

Убрать метку "загрязнён" у SV. Используйте SvTAINTED_off вместо этого.

void  sv_untaint(SV * const sv)

Загрязнение

sv_taint

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

void  sv_taint(SV *sv)
TAINT

Если мы не в режиме проверки загрязнения, ничего не делаем; в противном случае указываем "TAINT_set" и "TAINT_PROPER", что какой-то неуказанный элемент загрязнён.

void  TAINT()
TAINT_ENV

Проверяет несколько компонентов %ENV на наличие загрязнения и вызывает "taint_proper", если какой-либо из них загрязнён. Проверяемые компоненты — это, например, $PATH.

void  TAINT_ENV
taint_env

Реализует макрос "TAINT_ENV", который вы, как правило, должны использовать вместо него.

void  taint_env()
TAINT_get

Возвращает булево значение, обозначающее, загрязнён ли некоторый элемент.

bool  TAINT_get()
TAINT_IF

Если c имеет значение true, вызывает "TAINT", чтобы указать, что что-то загрязнённо; в противном случае ничего не делает.

void  TAINT_IF(bool c)
TAINTING_get

Возвращает булево значение, обозначающее, включена ли проверка загрязнённости.

bool  TAINTING_get()
TAINTING_set

Включить/выключить режим проверки загрязнения

void  TAINTING_set(bool s)
TAINT_NOT

Удалить все метки "загрязнён", ранее установленные, например, TAINT.

void  TAINT_NOT()
TAINT_PROPER

Если ни один элемент не загрязнён, ничего не делаем; в противном случае выводим сообщение (содержащее s), указывающее на нарушение загрязнения. Если такие нарушения фатальны, вызывается ошибка.

void  TAINT_PROPER(const char * s)
taint_proper

Реализует макрос "TAINT_PROPER", который вы, как правило, должны использовать вместо него.

void  taint_proper(const char *f, const char * const s)
TAINT_set

Если s истинно, "TAINT_get" возвращает true; Если s ложно, "TAINT_get" возвращает false;

void  TAINT_set(bool s)
TAINT_WARN_get

Возвращает false, если нарушения загрязнения фатальны; Возвращает true, если это просто предупреждения

bool  TAINT_WARN_get()
TAINT_WARN_set

s равное true означает, что "TAINT_WARN_get" должен возвращать, что нарушения загрязнения — это просто предупреждения

s равное false означает, что "TAINT_WARN_get" должен возвращать, что нарушения загрязнения — это фатальные ошибки.

void  TAINT_WARN_set(bool s)

Время

В настоящее время нет внутренних элементов API в разделе Время

Имена типов

В настоящее время нет внутренних элементов API в разделе Имена типов

Поддержка Юникода

bytes_from_utf8_loc

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В противном случае возвращаемый скрипт будет SCX_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)
utf8n_to_uvuni

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

my_popen_list

Реализация функции на некоторых системах для PerlProc_popen_list()

PerlIO *  my_popen_list(const char *mode, int n, SV **args)
my_socketpair

Эмулирует socketpair(2) на системах, где её нет, но есть достаточная функциональность для эмуляции.

int  my_socketpair(int family, int type, int protocol, int fd[2])

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

В настоящее время нет внутренних API-элементов в Версионировании

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

deprecate

Обёртка вокруг Perl_ck_warner_d() для вывода предупреждения о устаревании в заданной категории с соответствующим сообщением. Аргумент message должен быть строкой C. Строка " устарело" будет автоматически добавлена в конец message.

deprecate(U32 category, "message")
deprecate_disappears_in

Обёртка вокруг Perl_ck_warner_d() для вывода предупреждения о устаревании в заданной категории с соответствующим сообщением о том, что конструкция, на которую ссылается сообщение, исчезнет в определённой версии. Аргументы when и message должны быть строками C. Строка when должна иметь формат "5.40", без знака младшей версии. Результат вывода сообщения будет результатом следующего выражения message " is deprecated, and will disappear in Perl " when, поэтому message и when должны быть строками C.

deprecate_disappears_in(U32 category, "when", "message")
deprecate_fatal_in

Обёртка вокруг Perl_ck_warner_d() для вывода предупреждения об устаревании в заданной категории с соответствующим сообщением о том, что конструкция, на которую ссылается сообщение, станет фатальной в определённой версии. Аргументы when и message должны быть строками C. Строка when должна иметь формат "5.40", без знака младшей версии. Результат вывода сообщения будет результатом следующего выражения message " is deprecated, and will become fatal in Perl " when, поэтому message и when должны быть строками C.

deprecate_fatal_in(U32 category, "when", "message")
PL_dowarn

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

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

U8  PL_dowarn
report_uninit

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

void  report_uninit(const SV *uninit_sv)

XS

В настоящее время в XS нет внутренних элементов API.

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

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

Экспериментальные и устаревшие неописанные элементы перечислены отдельно в конце.

abort_execution
add_above_Latin1_folds
add_cp_to_invlist
_add_range_to_invlist
allocmy
amagic_cmp
amagic_cmp_desc
amagic_cmp_locale
amagic_cmp_locale_desc
amagic_i_ncmp
amagic_i_ncmp_desc
amagic_is_enabled
amagic_ncmp
amagic_ncmp_desc
any_dup
append_utf8_from_native_byte
apply
atfork_lock
atfork_unlock
av_arylen_p
av_extend_guts
av_iter_p
av_nonelem
av_reify
bind_match
block_gimme
boot_core_builtin
boot_core_mro
boot_core_PerlIO
boot_core_UNIVERSAL
build_infix_plugin
_byte_dump_string
call_list
cando
capture_clear
cast_iv
cast_i32
cast_ulong
cast_uv
check_hash_fields_and_hekify
check_regnode_after
check_utf8_print
ck_anoncode
ck_backtick
ck_bitop
ck_cmp
ck_concat
ck_defined
ck_delete
ck_each
ck_entersub_args_core
ck_eof
ck_eval
ck_exec
ck_exists
ck_ftst
ck_fun
ck_glob
ck_grep
ck_helemexistsor
ck_index
ck_isa
ck_join
ck_length
ck_lfun
ck_listiob
ck_match
ck_method
ck_null
ck_open
ck_prototype
ck_readline
ck_refassign
ck_repeat
ck_require
ck_return
ck_rfun
ck_rvconst
ck_sassign
ck_select
ck_shift
ck_smartmatch
ck_sort
ck_spair
ck_split
ck_stringify
ck_subr
ck_substr
ck_svconst
ck_tell
ck_trunc
ck_trycatch
ckwarn
ckwarn_d
class_add_ADJUST
class_add_field
class_apply_attributes
class_apply_field_attributes
class_prepare_initfield_parse
class_prepare_method_parse
class_seal_stash
class_set_field_defop
class_setup_stash
class_wrap_method_body
clear_defarray
closest_cop
cmpchain_extend
cmpchain_finish
cmpchain_start
cmp_desc
cmp_locale_desc
cntrl_to_mnemonic
construct_ahocorasick_from_trie
cop_file_avn
coresub_op
croak_caller
croak_kw_unless_class
croak_memory_wrap
croak_no_mem
croak_popstack
csighandler
csighandler1
csighandler3
current_re_engine
custom_op_get_field
cv_clone_into
cv_const_sv_or_av
cvgv_from_hek
cvgv_set
cvstash_set
cv_undef_flags
cx_dump
cx_dup
cxinc
deb_stack_all
debstackptrs
debug_hash_seed
debug_peep
debug_show_study_flags
debug_studydata
defelem_target
despatch_signals
die_unwind
do_aexec
do_aexec5
do_aspawn
do_eof
does_utf8_overflow
do_exec
do_exec3
dofile
do_gv_dump
do_gvgv_dump
do_hv_dump
doing_taint
do_ipcctl
do_ipcget
do_magic_dump
do_msgrcv
do_msgsnd
do_ncmp
do_op_dump
do_pmop_dump
do_print
do_readline
doref
do_seek
do_semop
do_shmio
do_spawn
do_spawn_nowait
do_sv_dump
do_sysseek
do_tell
do_trans
do_uniprop_match
do_vecget
do_vecset
do_vop
drand48_init_r
drand48_r
dtrace_probe_call
dtrace_probe_load
dtrace_probe_op
dtrace_probe_phase
dump_all_perl
dump_indent
dump_packsubs_perl
dump_sub_perl
dump_sv_child
dumpuntil
dump_vindent
dup_warnings
find_first_differing_byte_pos
find_lexical_cv
find_runcv_where
find_script
foldEQ_latin1_s2_folded
foldEQ_latin1
foldEQ_utf8_flags
force_locale_unlock
_force_out_malformed_utf8_message
form_alien_digit_msg
form_cp_too_large_msg
free_tied_hv_pool
free_tmps
get_and_check_backslash_N_name
get_ANYOFHbbm_contents
get_ANYOFM_contents
get_db_sub
get_debug_opts
get_deprecated_property_msg
getenv_len
get_extended_os_errno
get_hash_seed
get_invlist_iter_addr
get_invlist_offset_addr
get_invlist_previous_index_addr
get_mstats
get_prop_definition
get_prop_values
get_regclass_aux_data
get_re_gclass_aux_data
get_regex_charset_name
get_win32_message_utf8ness
gp_free
gp_ref
grok_bin_oct_hex
grok_bslash_c
grok_bslash_o
grok_bslash_x
gv_check
gv_fetchmeth_internal
gv_override
gv_setref
gv_stashpvn_internal
he_dup
hek_dup
hfree_next_entry
hv_auxalloc
hv_common
hv_common_key_len
hv_delayfree_ent
hv_free_ent
hv_placeholders_p
hv_pushkv
hv_rand_set
hv_undef_flags
infix_plugin_standard
init_argv_symbols
init_constants
init_dbargs
init_debugger
init_i18nl10n
init_named_cv
init_stacks
init_tm
init_uniprops
_inverse_folds
invert
invlist_array
_invlist_array_init
invlist_clear
invlist_clone
_invlist_contains_cp
invlist_contents
_invlist_dump
_invlistEQ
invlist_extend
invlist_highest
_invlist_intersection
_invlist_intersection_maybe_complement_2nd
_invlist_invert
invlist_is_iterating
invlist_iterfinish
invlist_iterinit
invlist_iternext
_invlist_len
invlist_max
invlist_previous_index
_invlist_search
invlist_set_len
invlist_set_previous_index
_invlist_subtract
invlist_trim
_invlist_union
_invlist_union_maybe_complement_2nd
invmap_dump
invoke_exception_hook
io_close
isFF_overlong
is_grapheme
_is_in_locale_category
is_invlist
is_ssc_worth_it
_is_uni_FOO
_is_uni_perl_idcont
_is_uni_perl_idstart
is_utf8_char_helper_
is_utf8_common
is_utf8_FF_helper_
_is_utf8_FOO
is_utf8_overlong
_is_utf8_perl_idcont
_is_utf8_perl_idstart
jmaybe
join_exact
keyword
keyword_plugin_standard
list
load_charnames
locale_panic
localize
lossless_NV_to_IV
lsbit_pos32
lsbit_pos64
magic_clear_all_env
magic_cleararylen_p
magic_clearenv
magic_clearhook
magic_clearhookall
magic_clearisa
magic_clearpack
magic_clearsig
magic_copycallchecker
magic_existspack
magic_freearylen_p
magic_freecollxfrm
magic_freemglob
magic_freeovrld
magic_freeutf8
magic_get
magic_getarylen
magic_getdebugvar
magic_getdefelem
magic_getnkeys
magic_getpack
magic_getpos
magic_getsig
magic_getsubstr
magic_gettaint
magic_getuvar
magic_getvec
magic_killbackrefs
magic_nextpack
magic_regdata_cnt
magic_regdatum_get
magic_regdatum_set
magic_scalarpack
magic_set
magic_set_all_env
magic_setarylen
magic_setcollxfrm
magic_setdbline
magic_setdebugvar
magic_setdefelem
magic_setenv
magic_sethook
magic_sethookall
magic_setisa
magic_setlvref
magic_setmglob
magic_setnkeys
magic_setnonelem
magic_setpack
magic_setpos
magic_setregexp
magic_setsig
magic_setsigall
magic_setsubstr
magic_settaint
magic_setutf8
magic_setuvar
magic_setvec
magic_sizepack
magic_wipepack
make_trie
malloced_size
malloc_good_size
markstack_grow
mbtowc_
mem_collxfrm_
mem_log_alloc
mem_log_del_sv
mem_log_free
mem_log_new_sv
mem_log_realloc
mg_find_mglob
mg_size
mode_from_discipline
more_bodies
more_sv
moreswitches
mortal_getenv
mortalized_pv_copy
mro_get_private_data
mro_meta_dup
mro_meta_init
msbit_pos32
msbit_pos64
multiconcat_stringify
multideref_stringify
my_atof2
my_atof3
my_attrs
my_clearenv
my_lstat
my_lstat_flags
my_memrchr
my_mkostemp_cloexec
my_mkstemp_cloexec
my_stat
my_stat_flags
my_strerror
my_strftime8_temp
my_unexec
newFORM
_new_invlist
_new_invlist_C_array
newMETHOP_internal
newMYSUB
newPROG
new_stackinfo
newSTUB
newSVavdefelem
newXS_deffile
nextargv
no_bareword_allowed
no_bareword_filehandle
noperl_die
notify_parser_that_changed_to_utf8
oopsAV
oopsHV
op_clear
op_integerize
op_lvalue_flags
opmethod_stash
op_prune_chain_head
op_relocate_sv
opslab_force_free
opslab_free
opslab_free_nopad
op_std_init
op_varname
package
package_version
pad_add_weakref
padlist_store
padname_free
PadnameIN_SCOPE
padnamelist_free
parser_dup
parser_free
parser_free_nexttoke_ops
parse_unicode_opts
path_is_searchable
peep
perl_alloc_using
perl_clone_using
PerlEnv_putenv
PerlIO_context_layers
PerlIO_restore_errno
PerlIO_save_errno
PerlLIO_dup_cloexec
PerlLIO_dup2_cloexec
PerlLIO_open_cloexec
PerlLIO_open3_cloexec
PerlProc_pipe_cloexec
PerlSock_accept_cloexec
PerlSock_socket_cloexec
PerlSock_socketpair_cloexec
perly_sighandler
pmruntime
POPMARK
populate_anyof_bitmap_from_invlist
populate_bitmap_from_invlist
populate_invlist_from_bitmap
populate_isa
pregfree
pregfree2
ptr_hash
qerror
ReANY
reentrant_free
reentrant_init
reentrant_retry
reentrant_size
re_exec_indentf
ref
reg_add_data
regcurly
regdump
regdupe_internal
regexec_flags
regfree_internal
reginitcolors
reg_named_buff
reg_named_buff_all
reg_named_buff_exists
reg_named_buff_fetch
reg_named_buff_firstkey
reg_named_buff_iter
reg_named_buff_nextkey
reg_named_buff_scalar
regnext
regnode_after
reg_numbered_buff_fetch
reg_numbered_buff_fetch_flags
reg_numbered_buff_length
reg_numbered_buff_store
regprop
reg_qr_package
reg_skipcomment
reg_temp_copy
re_indentf
re_intuit_start
re_intuit_string
re_op_compile
report_evil_fh
report_redefined_cv
report_wrongway_fh
re_printf
rpeep
rsignal_restore
rsignal_save
rvpv_dup
rxres_save
same_dirent
save_bool
save_clearsv
save_delete
save_destructor
save_destructor_x
save_freeop
save_freepv
save_freesv
save_int
save_iv
save_I8
save_I16
save_I32
save_mortalizesv
save_pptr
save_pushi32ptr
save_pushptrptr
save_re_context
save_sptr
savestack_grow
savestack_grow_cnt
save_strlen
sawparens
scalar
scalarvoid
scan_commit
scan_num
seed
set_ANYOF_arg
set_caret_X
setfd_cloexec
setfd_cloexec_for_nonsysfd
setfd_cloexec_or_inhexec_by_sysfdness
setfd_inhexec
setfd_inhexec_for_sysfd
set_numeric_standard
set_numeric_underlying
set_padlist
_setup_canned_invlist
share_hek
should_warn_nl
should_we_output_Debug_r
sighandler
sighandler1
sighandler3
single_1bit_pos32
single_1bit_pos64
Slab_Alloc
Slab_Free
Slab_to_ro
Slab_to_rw
softref2xv
sortsv_flags_impl
ssc_finalize
ssc_init
stack_grow
str_to_version
strxfrm
study_chunk
sub_crush_depth
sv_add_backref
sv_buf_to_ro
sv_del_backref
sv_i_ncmp
sv_i_ncmp_desc
sv_2iv
sv_magicext_mglob
sv_ncmp
sv_ncmp_desc
sv_only_taint_gmagic
sv_or_pv_pos_u2b
sv_pvbyten_force_wrapper
sv_pvutf8n_force_wrapper
sv_resetpvn
sv_sethek
SvTRUE_common
sv_unglob
sv_2uv
switch_locale_context
sys_init
sys_init3
sys_intern_clear
sys_intern_dup
sys_intern_init
sys_term
tied_method
tmps_grow_p
_to_fold_latin1
TOPMARK
to_uni_fold
_to_uni_fold_flags
to_uni_lower
to_uni_title
to_uni_upper
_to_upper_title_latin1
_to_utf8_fold_flags
_to_utf8_lower_flags
_to_utf8_title_flags
_to_utf8_upper_flags
translate_substr_offsets
try_amagic_bin
try_amagic_un
uiv_2buf
unlnk
unshare_hek
unwind_paren
_utf8n_to_uvchr_msgs_helper
utf16_to_utf8_base
utf16_to_utf8_reversed
utf16_to_utf8
utf8_to_uvchr_buf_helper
utilize
uvoffuni_to_utf8_flags_msgs
uvuni_to_utf8
variant_byte_number
varname
vivify_defelem
vivify_ref
wait4pid
warn_elem_scalar_context
_warn_problematic_locale
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

Далее следуют экспериментальные неописанные элементы.

alloc_LOGOP           cx_pushloop_for              invlist_lowest
create_eval_scope     cx_pushloop_plain            newGP
cv_ckproto_len_flags  cx_pushsub                   new_warnings_bitfield
cx_popblock           cx_pushtry                   op_refcnt_dec
cx_popeval            cx_pushwhen                  op_refcnt_inc
cx_popformat          cx_topblock                  op_unscope
cx_popgiven           delete_eval_scope            scan_str
cx_poploop            do_open_raw                  scan_word
cx_popsub             do_open6                     scan_word6
cx_popsub_args        emulate_cop_io               skipspace_flags
cx_popsub_common      get_re_arg                   sv_free2
cx_popwhen            get_vtbl                     sv_kill_backrefs
cx_pushblock          gimme_V                      sv_setpv_freshbuf
cx_pusheval           hv_backreferences_p          sv_setsv_cow
cx_pushformat         hv_kill_backrefs             utf8_to_utf16_base
cx_pushgiven          invlist_highest_range_start  

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

get_no_modify  get_opargs  get_ppaddr  

AUTHORS

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

См. также

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

© 1993–2023 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.38.0/perlintern

Spec-Zone.ru

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