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" в perlapivoid pop_scope()
-
push_scope -
Реализует "
ENTER" в perlapivoid 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()
-
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)
-
Реализует
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_SLABBEDCvROOTCvSTART-
Описано в 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_BLOCKCXt_EVALCXt_FORMATCXt_GIVENCXt_LOOP_ARYCXt_LOOP_LAZYIVCXt_LOOP_LAZYSVCXt_LOOP_LISTCXt_LOOP_PLAINCXt_NULLCXt_SUBCXt_SUBSTCXt_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 -
Реализует
SvPEEKchar * 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для соответствия. Еслиwarntrue, выводятся соответствующие предупреждения. Переменные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)
-
Если ни у кого нет доступа к общей строке
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)
-
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_curpadvoid 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 perlapibool 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-8sправильно сформирован (например, он проходит"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